wwf-wrestlemania/SCREEN.ASM

989 lines
17 KiB
NASM
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

**************************************************************
*
* Software: Jake Simpson
* Initiated: 10/11/94
*
* Modified:
*
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
*
**************************************************************
.file "screen.asm"
.title "wrestling game program"
.width 132
.option b,d,l,t
.mnolist
.include "macros.h"
.include "mproc.equ" ;Mproc equates
.include "display.equ" ;Display proc equates
.include "gsp.equ" ;Gsp asm equates
.include "sys.equ"
.include "wwfsec.equ"
.include "game.equ"
.INCLUDE "SCREEN.TBL"
.include "imgtbl.glo"
.ref triple_sound
.ref FADERAM, RNDRNG0
.ref ZERO_BITS
.ref HALT
.ref dpageflip
.REF dpageflip_off
.ref clear_objs
.ref IRQSKYE
.ref BGND_UD1
.ref BAKMODS
.ref pal_getf
.ref SYSCOPY
.REF pal_clean
.REF WHAT_SPEED
.REF GAMSTATE
.REF get_all_buttons_cur2
; .GLOBAL CLOSE_SCREEN_BOX, OPEN_SCREEN_BOX
; .GLOBAL CLOSE_SCREEN_BOX_CENTER, OPEN_SCREEN_BOX_CENTER
.GLOBAL CLOSE_SCREEN_LINE, OPEN_SCREEN_LINE
.GLOBAL BLOW_0_TO_1,RESET_FROM_PIXEL_WIPE
.GLOBAL SET_UP_PIXEL_WIPE
.DEF DUMRETS
.def special_screen
.DEF RESETUP_LINES
.DEF dma_it_out
.def LINES
.DEF CLOSE_VERT_SCREEN_LINE
.DEF OPEN_VERT_SCREEN_LINE
.DEF LINES_VERT
.def HORZTRN1,HORZTRN2
BSSX WHICH_SCREEN,32
BSSX TOP_LEFT,32
BSSX BOT_RIGHT,32
.BSS LINE_1,64*8
.bss LINE_START,32
.BSS WHICH_WAY,16
.bss special_screen,16
.bss which_pal,16
;array size = 2560*32
;ARRAYS .equ FADERAM
.bss ARRAYS,256*16*80
.text
GROW_SCREEN
RETP
;**************************************************************************
;* *
;* DO NOT call WIPEOUT or any of that stuff before calling this routine ! *
;* In order to use the pixel wipes, you must call this routine before doing *
;* anything else. It will do ALL screen setting up for you. Don't mess around *
;* with that BLANK or UNBLANK thing. Call this routine with A0 set to the *
;* background module you want to display. Once this routine is done, create *
;* the objects you want to display etc and then do a sleep of 1. Then *
;* JSRP BLOW_0_TO_1 or BLOW_0_TO_1 and then when returned, call *
;* RESET_FROM_PIXEL_WIPE and resume normal processing. *
;* *
;**************************************************************************
SET_UP_PIXEL_WIPE
PUSH A0
clr a0
move a0,@HALT
move a0,@dtype ;2d mode
move a0,@IRQSKYE
move a0,@WORLDTLX,L
move a0,@WORLDTLY,L
inc a0
move a0,@special_screen
movi SCRNEND,a0 ;[256,405]
move a0,@SCRNLR,L
clr a0
CALLA dpageflip_off
calla clear_objs
calla ZERO_BITS
movi SCRNEND,a0 ;[256,405]
move a0,@SCRNLR,L
clr a0
move a0,@WORLDTLX,L
move a0,@WORLDTLY,L
PULL A0
move a0,@BAKMODS,L
JAUC BGND_UD1 ;create objects for background
RESET_FROM_PIXEL_WIPE
clr a0
move a0,@special_screen
movk 1,a0 ;page flipping on
move a0,@dpageflip
RETS
ARRAY_SIZE .EQU 256*32
ARRAYA .EQU ARRAY_SIZE*0
ARRAYB .EQU ARRAY_SIZE*5
BLOW_0_TO_1
CALLR INIT_TABLES
SLEEP 1
MOVI ARRAYA+ARRAYS,A3
CALLR RANDOMIZE_TABLES
SLEEP 1
MOVI ARRAYB+ARRAYS,A3
CALLR RANDOMIZE_TABLES
SLEEP 1
CLR A0
MOVE A0,@DISPLAYON
SLEEP 1
MOVI 1C0H,A9
MOVK 10,A10
DO_NEXT_BLOCK
MOVI ARRAYA+ARRAYS,A8
SLEEP 3
CREATE0 DISPLAY_ARRAY
ADDI 0A0H,A9
MOVI ARRAYB+ARRAYS,A8
SLEEP 3
CREATE0 DISPLAY_ARRAY
ADDI 0A0H,A9
DEC A10
JRNZ DO_NEXT_BLOCK
SLEEP 25
MOVK 1,A0
MOVE A0,@DISPLAYON
RETP
DISPLAY_ARRAY
MOVI 100000H,A10
callr PAL_RAM_OFF
movi 5,a0
next_copy
pushp a0
CALLR COPY_ARRAY
; SUBI 256*32,A8
; CALLR PAL_RAM_ON
; CALLR COPY_ARRAY
callr PAL_RAM_OFF
sleep 1
pullp a0
dsjs a0,next_copy
DIE
COPY_ARRAY
pushst
dint
movi DMACMAP,a7
MOVI 256,A2
movi SYSCINIT,a11
move a11,a5
ANDi 0FFFFH-PALENB,a5
.ALIGN
COPY_NEXT
MOVE *A8+,A3,L
ADD A9,A3
MOVE A3,A0
ADD A10,A0
move a5,@SYSCTRL
MOVE *A0,*A7
move a11,@SYSCTRL
MOVE *A0,*A3
move a5,@SYSCTRL
move *a0(1000h),*a7(0)
move a11,@SYSCTRL
MOVE *A0(1000H),*A3(1000H)
DSJS A2,COPY_NEXT
popst
RETS
PAL_RAM_ON
movi SYSCINIT,a11
ANDi 0FFFFH-PALENB,a11
move a11,@SYSCOPY
move a11,@SYSCTRL
rets
PAL_RAM_OFF
movi SYSCINIT,a11
move a11,@SYSCTRL
move a11,@SYSCOPY
RETS
RANDOMIZE_TABLES
MOVI 1279,A2
RAND_NEXT_POINT
MOVE A2,A0
CALLA RNDRNG0
SLL 5,A0
ADD A3,A0
MOVE A2,A4
SLL 5,A4
ADD A3,A4
MOVE *A0,A14,L
MOVE *A4,*A0,L
MOVE A14,*A4,L
DSJS A2,RAND_NEXT_POINT
RETS
INIT_TABLES
MOVI 010H,A4
MOVI 2000H-(10*10H),A5
MOVI ARRAYA+ARRAYS,A1
CALLR INIT_ARRAY
MOVI ARRAYB+ARRAYS,A1
INIT_ARRAY
MOVI 128,A3
CLR A0
NEXT_DOWN
MOVI 10,A2
NEXT_ACROSS
MOVE A0,*A1+,L
ADD A4,A0
DSJS A2,NEXT_ACROSS
ADD A5,A0
DSJS A3,NEXT_DOWN
RETS
** NOTE !!!! ALL SCREEN CLEAR AND OPENS MUST BE CALLED WITH A JSRP ****
;**************************************************************************
;* *
;* For close/open screen box, send the y:x coor you want to close *
;* to in a9. Send the duration of close in a8 *
;* *
;**************************************************************************
.IF 0
OPEN_SCREEN_BOX_CENTER
MOVI [127,200],A9
MOVI 25,A8
OPEN_SCREEN_BOX
MOVI DRAW_BOXES,A0
MOVE A0,@WHICH_SCREEN,L
CALLR CALC_INCREMENTS
NEG A0
NEG A1
NEG A2
NEG A3
MOVY A9,A6
MOVY A9,A7
SLL 16,A9
MOVE A9,A4
MOVE A9,A5
JRUC PUT_UP_BOX
CLOSE_SCREEN_BOX_CENTER
MOVI [127,200],A9
MOVK 25,A8
CLOSE_SCREEN_BOX
MOVI DRAW_BOXES,A0
MOVE A0,@WHICH_SCREEN,L
CALLR CALC_INCREMENTS
MOVI [400,0],A5
MOVI [254,0],A7
PUT_UP_BOX
CALLR CALC_BOX
PUSHP A0,A1,A2,A3
PUSHP A4,A5,A6,A7
SLEEP 1
PULLP A4,A5,A6,A7
PULLP A0,A1,A2,A3
DSJS A8,PUT_UP_BOX
MOVI DUMRETS,A1
MOVE A1,@WHICH_SCREEN,L
CLR A0
MOVE A0,@TOP_LEFT,L
MOVE A0,@BOT_RIGHT,L
RETP
CALC_INCREMENTS
MOVY A9,A7
CLR A1
MOVX A9,A1
SLL 16,A1
DIVS A8,A1
MOVE A1,A0
CLR A1
MOVX A9,A1
MOVI 400,A5
SUB A5,A1
SLL 16,A1
DIVS A8,A1
CLR A3
MOVY A7,A3
DIVS A8,A3
MOVE A3,A2
CLR A3
MOVY A7,A3
SRL 16,A3
MOVI 254,A5
SUB A5,A3
SLL 16,A3
DIVS A8,A3
CLR A4
CLR A5
CLR A6
CLR A7
DUMRETS
RETS
;A0 32BIT ADD FOR LEFT
;A1 32BIT ADD FOR RIGHT
;A2 32BIT ADD FOR TOP
;A3 32BIT ADD FOR BOTTOM
;A4 32BIT XPOS FOR LEFT
;A5 32BIT XPOS FOR RIGHT
;A6 32BIT YPOS FOR TOP
;A7 32BIT YPOS FOR BOTTOM
CALC_BOX
ADD A0,A4
ADD A1,A5
ADD A2,A6
ADD A3,A7
MOVE A4,A14
SRL 16,A14
MOVY A6,A14
MOVE A14,@TOP_LEFT,L
MOVE A5,A14
SRL 16,A14
MOVY A7,A14
MOVE A14,@BOT_RIGHT,L
RETS
DRAW_BOXES
MOVI 01000100H,A5
CLR A8
MOVI 4a748c9H,A11
MOVI 900C0000H,A12
CLR A10
MOVI [255,0],A1
MOVE @TOP_LEFT,A9
jrz no_draw_anything1
MOVY A1,A9
callr dma_it_out
no_draw_anything1
MOVI 400,A1
MOVE @BOT_RIGHT,A10
SUB A10,A1
jrz no_draw_anything2
jrn no_draw_anything2
MOVX A1,A9
CLR A10
MOVE @BOT_RIGHT,A10
callr dma_it_out
no_draw_anything2
CLR A10
MOVE @TOP_LEFT,A10
MOVE @BOT_RIGHT,A9
SUB A10,A9
JRZ no_draw_anything4
JRN no_draw_anything4
MOVE @TOP_LEFT+010H,A14
JRZ no_draw_anything3
JRN no_draw_anything3
SLL 16,A14
MOVY A14,A9
callr dma_it_out
no_draw_anything3
CLR A10
MOVE @TOP_LEFT,A10
MOVE @BOT_RIGHT,A14,L
MOVY A14,A10
MOVI 254,A3
SRL 16,A14
SUB A14,A3
JRZ no_draw_anything4
JRN no_draw_anything4
SLL 16,A3
MOVY A3,A9
callr dma_it_out
no_draw_anything4
RETS
.ENDIF
;A5 SCALE
;A8 PAL|CONST
;A9 YSIZE|XSIZE
;A10 DAG
;A11 SAG
;A12 OCTRL|OFFSET
dma_it_out
move b2,a1
addxy a1,a10 ;Add the page y offset : XPad
mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs
addk 1,b13 ;+1 Q cnt
jrgt #nxt ;DMA going?
dint
setf 1,0,0 ;>Enable DMA int
movk 1,a1
move a1,@INTENB+1 ;X1E
setf 16,1,0
move *b11,b0
jrn #dmaok ;DMA busy?
move b13,b13
jrn #dmaok ;DMA int done?
trap 1 ;Cause DMA int
#dmaok eint
#nxt
DUMRETS
rets
;#**************************************************************************
;* *
;* ENTRY A8=SPEED OF ONE LINE, A9=DELAY BETWEEN EACH LINE (IF NEG START A *
;* at the top, otherwise start at the bottom *
;* *
;**************************************************************************
OPEN_VERT_SCREEN_LINE
move @WHAT_SPEED,A8
MOVI HORZTRN1P,A0
CALLA pal_getf
move a0,@which_pal
MOVI [0,400],A1
MOVE A1,@TOP_LEFT,L
CLR A1
MOVE A1,@BOT_RIGHT,L
MOVI [256,0],A0
CLR A1
CLR A3
CALLR SET_INITIAL_LINES
MOVI LINES_VERT,A1
MOVE A1,@WHICH_SCREEN,L
MOVI [255,0],A11
DIVS A8,A11
NEG A11
MOVK 7,A10
#NEXT_LINE2B
movk 18,a0
calla triple_sound
CREATE0 MOVE_LINE_VERT
MOVE A9,A0
CALLA PRCSLP
DEC A10
JRNN #NEXT_LINE2B
MOVE A8,A0
SUB A9,A0
ADDK 2,A0
CALLA PRCSLP
MOVI DUMRETS,A1
MOVE A1,@WHICH_SCREEN,L
CLR A1
MOVE A1,@TOP_LEFT,L
MOVE A1,@BOT_RIGHT,L
; CALLA pal_clean
RETP
;#**************************************************************************
;* *
;* ENTRY A8=SPEED OF ONE LINE, A9=DELAY BETWEEN EACH LINE *
;* IF DELAY IS NEGATIVE (IE TWOS COMPLEMENT) THEN GO FROM TOP DOWN *
;* *
;**************************************************************************
CLOSE_VERT_SCREEN_LINE
calla get_all_buttons_cur2
jrz #reg_spd
srl 1,a8
#reg_spd
move a8,@WHAT_SPEED
MOVI HORZTRN1P,A0
CALLA pal_getf
move a0,@which_pal
CLR A1
MOVE A1,@TOP_LEFT,L
MOVE A1,@BOT_RIGHT,L
CLR A0
CLR A3
MOVI [256,0],A1
CALLR SET_INITIAL_LINES
MOVI LINES_VERT,A1
MOVE A1,@WHICH_SCREEN,L
MOVI [255,0],A11
DIVS A8,A11
MOVK 7,A10
#NEXT_LINE2A
movk 18,a0
calla triple_sound
CREATE0 MOVE_LINE_VERT
MOVE A9,A0
CALLA PRCSLP
DEC A10
JRNN #NEXT_LINE2A
MOVE A8,A0
SUB A9,A0
ADDK 2,A0
CALLA PRCSLP
MOVI DUMRETS,A1
MOVE A1,@WHICH_SCREEN,L
CLR A1
MOVE A1,@TOP_LEFT,L
MOVE A1,@BOT_RIGHT,L
; CALLA pal_clean
RETP
MOVE_LINE_VERT
MOVE A11,A11
JRNN NO_NEED_TO_RESET_NOW
MOVE A10,A1
MOVI 50,A3
MPYU A3,A1
MOVE A1,@TOP_LEFT
NO_NEED_TO_RESET_NOW
MOVE A10,A9
SLL 6,A9
ADDI LINE_1,A9
ADD_NEXT_BIT_TO_LINE
MOVE A10,A0
SRL 1,A0
JRNC YOU_STAY_HERE
MOVE *A9,A0,L
SUB A11,A0
MOVE A0,*A9,L
YOU_STAY_HERE
MOVE *A9(020H),A0,L
ADD A11,A0
MOVE A0,*A9(020H),L
SLEEPK 1
DSJS A8,ADD_NEXT_BIT_TO_LINE
MOVE A11,A11
JRN WE_OPENING
MOVI [100H,0],A0
MOVE A0,*A9(020H),L
CLR A0
MOVE A0,*A9,L
MOVI 9,A1
SUB A10,A1
MOVI 50,A3
MPYU A3,A1
NEG A1
MOVE A1,@BOT_RIGHT
DIE
WE_OPENING
CLR A0
MOVE A0,*A9(020H),L
MOVI [100H,0],A0
MOVE A0,*A9,L
DIE
LINES_VERT
MOVI 01000100H,A5
CLR A8
MOVI [256,50],A9
move @which_pal,a8
MOVI 0d0020000H,A12
CLR A14
MOVI LINE_1,A3,L
MOVK 8,A2
DO_NEXT_VERT_LINE
CALLR DISPLAY_VERT_LINE
DSJS A2,DO_NEXT_VERT_LINE
RETS
DISPLAY_VERT_LINE
MOVE @VERTTRN1+040H,A11,L
MOVE A2,A0
SRL 1,A0
JRNC GOT_TOP_BAR
MOVE @VERTTRN2+040H,A11,L
GOT_TOP_BAR
MOVE A14,A10
SRL 16,A10
MOVE *A3+,A0,L ;POSITION
MOVY A0,A10
MOVE *A3+,A0,L ;SIZE
SRA 16,A0
JRZ NO_DISPLAY_VERT_LINE
JRN NO_DISPLAY_VERT_LINE
MOVE A0,A1
SLL 16,A0
MOVY A0,A9
MOVE A2,A6
SRL 1,A6
JRC NO_SHIFT_SAG
MOVI 256,A6
SUB A1,A6
MOVI 50,A1
MPYU A6,A1
MOVE A1,A6
SLL 2,A1
ADD A6,A1
ADD A1,A11
NO_SHIFT_SAG
CALLR dma_it_out
NO_DISPLAY_VERT_LINE
ADDI [50,0],A14
RETS
;#**************************************************************************
;* *
;* ENTRY A8=SPEED OF ONE LINE, A9=DELAY BETWEEN EACH LINE (IF NEG START A *
;* at the top, otherwise start at the bottom *
;* *
;**************************************************************************
OPEN_SCREEN_LINE
move @WHAT_SPEED,A8
MOVI HORZTRN1P,A0
CALLA pal_getf
move a0,@which_pal
MOVI LINE_1+040H,A0
MOVE A0,@LINE_START,L
CLR A1
CLR A3
MOVI [400,0],A0
CALLR SET_INITIAL_LINES
MOVI [400,0],A11
DIVS A8,A11
NEG A11
MOVE A9,A9
JRN #SET_BOT_RIGHT
MOVI [254,0],A10
MOVE A10,@TOP_LEFT,L
JRUC DO_LINES
#SET_BOT_RIGHT
MOVI [254,0],A10
NEG A10
MOVE A10,@BOT_RIGHT,L
JRUC DO_LINES
;#**************************************************************************
;* *
;* ENTRY A8=SPEED OF ONE LINE, A9=DELAY BETWEEN EACH LINE *
;* IF DELAY IS NEGATIVE (IE TWOS COMPLEMENT) THEN GO FROM TOP DOWN *
;* *
;**************************************************************************
CLOSE_SCREEN_LINE
MOVE @GAMSTATE,A14
CMPI INAMODE,A14
JREQ MAKE_IT_FAST
calla get_all_buttons_cur2
jrz #reg_spd2
MAKE_IT_FAST
srl 1,a8
#reg_spd2
move a8,@WHAT_SPEED
MOVI HORZTRN1P,A0
; MOVE @GAMSTATE,A14
; CMPI INAMODE,A14
; JRNE NORMAL_COLOURS
; MOVI DRKTRPLTP,A0
;NORMAL_COLOURS
CALLA pal_getf
move a0,@which_pal
MOVI LINE_1,A0
MOVE A0,@LINE_START,L
CLR A0
CLR A3
MOVI [400,0],A1
CALLR SET_INITIAL_LINES
MOVI [400,0],A11
DIVS A8,A11
DO_LINES
MOVE A9,@WHICH_WAY
MOVE A9,A9
JRNN #BOTTOM_UP
NEG A9
;TOP DOWN
MOVK 1,A10
#NEXT_LINE1
MOVE @GAMSTATE,A0
CMPI INAMODE,A0
JREQ NO_SOUNDS
movk 18,a0
calla triple_sound
NO_SOUNDS
CREATE0 MOVE_LINE
MOVE A9,A0
JRZ #NO_SLEEP_BETWEEN1
CALLA PRCSLP
#NO_SLEEP_BETWEEN1
INC A10
CMPI 7,A10
JRNE #NEXT_LINE1
JRUC EXIT_CLOSE_LINE
#BOTTOM_UP
MOVK 6,A10
#NEXT_LINE2
MOVE @GAMSTATE,A0
CMPI INAMODE,A0
JREQ NO_SOUNDS2
movk 18,a0
calla triple_sound
NO_SOUNDS2
CREATE0 MOVE_LINE
MOVE A9,A0
JRZ #NO_SLEEP_BETWEEN2
CALLA PRCSLP
#NO_SLEEP_BETWEEN2
DSJS A10,#NEXT_LINE2
EXIT_CLOSE_LINE
MOVE A8,A0
SUB A9,A0
ADDK 2,A0
CALLA PRCSLP
MOVI DUMRETS,A1
MOVE A1,@WHICH_SCREEN,L
CLR A1
MOVE A1,@TOP_LEFT,L
MOVE A1,@BOT_RIGHT,L
MOVE @LINE_START,A1,L
CMPI LINE_1,A1
JREQ NO_CLEAR_OUT_PALS
CALLA pal_clean
NO_CLEAR_OUT_PALS
RETP
SET_INITIAL_LINES
MOVI LINE_1,A2
MOVE A3,*A2+,L
MOVE A0,*A2+,L
MOVE A1,*A2+,L
MOVE A0,*A2+,L
MOVE A3,*A2+,L
MOVE A0,*A2+,L
MOVE A1,*A2+,L
MOVE A0,*A2+,L
MOVE A3,*A2+,L
MOVE A0,*A2+,L
MOVE A1,*A2+,L
MOVE A0,*A2+,L
MOVE A3,*A2+,L
MOVE A0,*A2+,L
MOVE A1,*A2+,L
MOVE A0,*A2+,L
MOVI LINES,A1
MOVE A1,@WHICH_SCREEN,L
RETS
MOVE_LINE
MOVE A11,A11
JRN NO_DEC_A10
DEC A10
JRUC A10_POINTS_AT_START_LINE
NO_DEC_A10
MOVI 43,A7
DEC A10
MPYS A10,A7
INC A10
MOVE @WHICH_WAY,A0
JRNN LINES_OPEN_DOWN
LINES_OPEN_UP
ADDI 43,A7
MOVI 254,A0
SUB A7,A0
SLL 16,A0
NEG A0
MOVE A0,@BOT_RIGHT,L
JRUC A10_POINTS_AT_START_LINE
LINES_OPEN_DOWN
SLL 16,A7
MOVE A7,@TOP_LEFT,L
A10_POINTS_AT_START_LINE
MOVE A10,A9
SLL 6,A9
ADDI LINE_1,A9
EXPAND_LINE
MOVE A10,A0
SRL 1,A0
JRNC NO_MOVE_LINE_X
MOVE *A9,A0,L
SUB A11,A0
MOVE A0,*A9,L
NO_MOVE_LINE_X
MOVE *A9(020H),A0,L
ADD A11,A0
MOVE A0,*A9(020H),L
SLEEPK 1
DSJS A8,EXPAND_LINE
MOVE A11,A11
JRNN SET_LINES_SOLID
CLR A0
MOVE A0,*A9(020H),L
DIE
SET_LINES_SOLID
CLR A0
MOVE A0,*A9,L
MOVI [400,0],A0
MOVE A0,*A9(020H),L
MOVI 43,A7
MPYS A10,A7
MOVE @WHICH_WAY,A0
JRN LINES_CLOSE_DOWN
LINES_CLOSE_UP
MOVI 254,A0
SUB A7,A0
SLL 16,A0
NEG A0
MOVE A0,@BOT_RIGHT,L
DIE
LINES_CLOSE_DOWN
ADDI 43,A7
SLL 16,A7
MOVE A7,@TOP_LEFT,L
DIE
LINES
MOVI 01000100H,A5
CLR A8
move @which_pal,a8
MOVI [43,400],A9
MOVI 0d0020000H,A12
CLR A14
MOVE @LINE_START,A3,L
MOVK 6,A2
DO_NEXT_LINE
CALLR DISPLAY_LINE
DSJS A2,DO_NEXT_LINE
RETS
DISPLAY_LINE
MOVE @HORZTRN1+040H,A11,L
MOVE A2,A0
SRL 1,A0
JRNC GOT_RIGHT_BAR
MOVE @HORZTRN2+040H,A11,L
GOT_RIGHT_BAR
MOVE *A3+,A0,L ;POSITION
SRL 16,A0
MOVX A0,A10
MOVY A14,A10
MOVE *A3+,A0,L ;SIZE
SRA 16,A0
JRZ NO_DISPLAY_LINE
JRN NO_DISPLAY_LINE
MOVI 400,A1
SUB A0,A1
MOVX A1,A12
MOVE A2,A6
MOVE @LINE_START,A0,L
CMPI LINE_1,A0
JREQ WHICH_SIDE_CLIP
DEC A6
WHICH_SIDE_CLIP
SRL 1,A6
JRC NO_SHIFT_CLIP
MOVE A1,A6
SLL 2,A1
ADD A1,A6
ADD A6,A11
NO_SHIFT_CLIP
CALLR dma_it_out
NO_DISPLAY_LINE
ADDI [43,0],A14
RETS
RESETUP_LINES
MOVI LINES,A0
MOVE A0,@WHICH_SCREEN,L
MOVI HORZTRN1P,A0
CALLA pal_getf
move a0,@which_pal
rets
SUBR DRKTRPLTP
.word 31
.word 00000h,00407h,00407h,00808h,00809h,00c09h,00809h,0100ah
.word 0100ah,01009h,0100bh,00808h,00408h,00007h,00408h,01c0bh
.word 0140ah,01409h,0180ah,01809h,01c0ah,0180ah,00c08h,00006h
.word 0140dh,02410h,00004h,00003h,00001h,0344dh,05ef7h
******************************************************************************
.end