PCS_AppleII/source_disc2/DISK.S

1081 lines
13 KiB
ArmAsm

LST OFF
*
* PCS DISK I/O AND KEYBOARD
* HANDLERS
*
ORG $9500
OBJ $8000
*
PARAM EQU $00
TEMP EQU $07
XTEMP EQU TEMP+1
YTEMP EQU XTEMP+1
TEMP2 EQU YTEMP+1
*
BASE1 EQU $10
BASE2 EQU BASE1+2
*
* USER INTERFACE
*
CURSOR EQU $80
CURSORY EQU CURSOR+2
CURSORXDIV7 EQU CURSORY+1
CURSORXMOD7 EQU CURSORXDIV7+1
CURSORHEIGHT EQU CURSORXMOD7+1
CURSORWIDTH EQU CURSORHEIGHT+1
CRSRXACC EQU CURSORWIDTH+1
CRSRYACC EQU CRSRXACC+1
NEWCURSORXDIV7 EQU CRSRYACC+1
NEWCURSORXMOD7 EQU NEWCURSORXDIV7+1
NEWCURSORY EQU NEWCURSORXMOD7+1
CRSRRTSTOP EQU NEWCURSORY+1
NEWITEM EQU CRSRRTSTOP+1
LASTITEM EQU NEWITEM+2
*
* DATA STRUCTURE
*
OBJ EQU LASTITEM+2
NEXTOBJ EQU OBJ+2
OBJCOUNT EQU NEXTOBJ+1
PLYPTRX EQU OBJCOUNT+1
PLYPTRY EQU PLYPTRX+2
OBJID EQU PLYPTRY+2
FILLCOLOR EQU OBJID+1
VRTXCOUNT EQU FILLCOLOR+1
LBASE EQU VRTXCOUNT+1
SCANMODE EQU LBASE+2
MEMBTM EQU SCANMODE+1
MIDBTM EQU MEMBTM+2
MIDTOP EQU MIDBTM+2
MIDY EQU MIDTOP+2
*
CHARINDX EQU MIDY+1
CHARASCII EQU CHARINDX+1
BOXCURSORON EQU CHARASCII+1
DTIMER1 EQU BOXCURSORON+1
DTIMER2 EQU DTIMER1+1
DRIVE EQU DTIMER2+1
SLOT EQU DRIVE+1
DISKCMD EQU SLOT+1
STACKTEMP EQU DISKCMD+1
*
GAMEBTM EQU $177D
GAMESTART EQU $8554
PLAYGAME EQU GAMESTART+32
GAMETOP EQU $8F00
*
CHARBUF EQU $1F00
LINELEN EQU $1F1E
HIRES1 EQU $2000
HTOP EQU $4000
FMWB EQU $400
TSBUF EQU $500
DSBUF EQU $600
SWAPUSER EQU $1E18
RELOAD EQU $1E1C
ERRMSGS EQU $A971
ERRTBL EQU $AA3F
FMGR EQU $AAFD
FMPL EQU $B5BB
*
* PBDB
*
PBBASE EQU $4000
LOGIC EQU PBBASE
WSET EQU LOGIC+24
PBDATA EQU WSET+4
OBJDX EQU PBDATA+1
PBDX EQU $6F40
*
* EXTERNALS
*
DIV7 EQU $1400
MOD7 EQU DIV7+$100
LO EQU MOD7+$100
HI EQU LO+$C0
SETMODE EQU HI+$10F
DRAWBITS EQU SETMODE+$25
XOFFDRAW EQU DRAWBITS+$3D
GETRECT EQU XOFFDRAW+$59
MASKS EQU GETRECT+$41
HLINE EQU MASKS+$F
VLINE EQU HLINE+$20
FRAMERECT EQU VLINE+$58
DRAWRECT EQU FRAMERECT+$28
INRECT EQU DRAWRECT+$10
GETBUTNS EQU INRECT+$2D
INITCRSR EQU GETBUTNS+$7
XDRAWCRSR EQU INITCRSR+$1B
UPDATECRSR EQU XDRAWCRSR+$7
DOCRSRX EQU UPDATECRSR+$1E
GETCURSORX EQU DOCRSRX+$45
DOCRSRY EQU GETCURSORX+$16
JSCTRL EQU DOCRSRY+$4D
CRSRINRECT EQU JSCTRL+$21
DOMENU EQU CRSRINRECT+$13
SELECT EQU DOMENU+$54
INIT EQU SELECT+$40
MOVEUP EQU INIT+$35
MOVEDOWN EQU MOVEUP+$3B
ADDIYX EQU MOVEDOWN+$39
ADDYX EQU ADDIYX+$E
SUBIYX EQU ADDYX+$10
SUBYX EQU SUBIYX+$12
CMPYX EQU SUBYX+$10
CHARTO EQU CMPYX+$F
PRCHAR EQU CHARTO+$A
PRINT EQU PRCHAR+$38
CHAR EQU PRINT+$19
*
* PPAK
*
DRAWDISPLAY EQU $8E20
GETOBJ EQU DRAWDISPLAY+$3E
GETNEXTOBJ EQU GETOBJ+$C
GETINFO EQU GETNEXTOBJ+$1B
DRAWOBJ EQU GETINFO+$3E
SETCOLOR EQU DRAWOBJ+$14
SCANPOLY EQU SETCOLOR+$25
ALIGNPOLY EQU SCANPOLY+$404
GETSCAN EQU ALIGNPOLY+$39
MAKEHOLE EQU GETSCAN+$57
SELECTPOLY EQU MAKEHOLE+$4A
POLYPOINTS EQU SELECTPOLY+$33
REMOVEPOLY EQU POLYPOINTS+$37
GETBOUNDS EQU REMOVEPOLY+$6E
*
TSX
STX STACKTEMP
START LDY #0
LDA #$4D
SETUP2 STY XTEMP
STA CHAR+2
LDA #$18
STA CHAR+3
LDA #0
STA CHAR+4
LDA TXTLO,Y
LDX TXTHI,Y
JSR PRINT
LDA CHAR+2
CLC
ADC #10
LDY XTEMP
CPY #2
BEQ SKIP
CPY #4
BNE NOSKIP
SKIP ADC #10
NOSKIP INY
CPY #7
BNE SETUP2
*
LDA #$4D
SETUP3 STY XTEMP
STA CHAR+2
LDA #$20
STA CHAR+3
LDA #0
STA CHAR+4
LDA TXTLO,Y
LDX TXTHI,Y
JSR PRINT
LDA CHAR+2
CLC
ADC #10
LDY XTEMP
INY
CPY #11
BNE *+4
ADC #10
CPY #13
BNE SETUP3
*
LDA #<HAND
LDX #>HAND
JSR INITCRSR
*
LDA #1
STA DRIVE
JSR HLDRIVE
LDA #6
STA SLOT
JSR HLSLOT
*
MAIN JSR JSCTRL
JSR UPDATECRSR
LDA $C061
BPL MAIN
*
MAIN2 LDA #<SLOTB
LDX #>SLOTB
JSR CRSRINRECT
BCC MAIN3
*
LDA SLOT
JSR HLSLOT
LDA #0
STA LASTITEM+1
LDA #<SLOTMENU
LDX #>SLOTMENU
JSR DOMENU
BEQ SSLOT3
SSLOT2 LDA SLOT
JSR HLSLOT
JMP MAIN
SSLOT3 LDA #6
STA SLOT
BNE SSLOT2
*
SLOTMENU DA SBOX1
DA SETSLOT
DA SBOX2
DA SETSLOT
DA SBOX3
DA SETSLOT
DA SBOX4
DA SETSLOT
HEX 00
*
SETSLOT LDA YTEMP
CLC
ADC #18
LSR
LSR
STA SLOT
RTS
*
MAIN3 LDA #<DRIVEB
LDX #>DRIVEB
JSR CRSRINRECT
BCC MAIN4
*
LDA DRIVE
JSR HLDRIVE
LDA #0
STA LASTITEM+1
LDA #<DRIVEMENU
LDX #>DRIVEMENU
JSR DOMENU
BEQ SDRIV3
SDRIV2 LDA DRIVE
JSR HLDRIVE
JMP MAIN
SDRIV3 LDA #1
STA DRIVE
BNE SDRIV2
*
DRIVEMENU DA DBOX1
DA SETDRIVE
DA DBOX2
DA SETDRIVE
HEX 00
*
SETDRIVE LDA YTEMP
CLC
ADC #6
LSR
LSR
STA DRIVE
RTS
*
HLSLOT TAY
LDA SLVERT-4,Y
STA SLOTBOX
LDA #<SLOTBOX
LDX #>SLOTBOX
JMP DRAWRECT
*
SLVERT HEX 4B555F69
*
HLDRIVE TAY
LDA DRVERT-1,Y
STA DRIVEBOX
LDA #<DRIVEBOX
LDX #>DRIVEBOX
JMP DRAWRECT
*
DRVERT HEX 7E88
*
MAIN4 LDA #<MENUBOX
LDX #>MENUBOX
JSR CRSRINRECT
BCC MAIN5
*
LDA #0
STA LASTITEM+1
LDA #<DISKMENU
LDX #>DISKMENU
JSR DOMENU
MAIN5 JMP MAIN
*
HAND DA *+7
HEX 0000000C02
HEX 030006000C00180C
HEX 34067C067E077E07
HEX 7C0B780D70060003
*
DISKMENU DA LOADBOX
DA LOAD
DA SAVEBOX
DA SAVE
DA QUITBOX
DA QUIT
DA MAKEBOX
DA MAKE
DA PLAYBOX
DA PLAY
HEX 00
*
TXTLO DA <LOADMSG
DA <SAVEMSG
DA <QUITMSG
DA <MAKEMSG
DA <GAMEMSG
DA <PLAYMSG
DA <GAMEMSG
DA <SL4MSG
DA <SL5MSG
DA <SL6MSG
DA <SL7MSG
DA <DR1MSG
DA <DR2MSG
*
TXTHI DA >LOADMSG
DA >SAVEMSG
DA >QUITMSG
DA >MAKEMSG
DA >GAMEMSG
DA >PLAYMSG
DA >GAMEMSG
DA >SL4MSG
DA >SL5MSG
DA >SL6MSG
DA >SL7MSG
DA >DR1MSG
DA >DR2MSG
*
LOADMSG HEX 15180A8D
SAVEMSG HEX 1C0A1F8E
QUITMSG HEX 1A1E129D
MAKEMSG HEX 160A148E
PLAYMSG HEX 19150AA2
GAMEMSG HEX 100A168E
INSERTMSG HEX 12171C0E1B1D2422181E1B24100A160E240D121C14
HEX 240A170D2411121D240A24140EA2
*
SL4MSG HEX 1C15181D84
SL5MSG HEX 1C15181D85
SL6MSG HEX 1C15181D86
SL7MSG HEX 1C15181D87
*
DR1MSG HEX 0D1B121F0E81
DR2MSG HEX 0D1B121F0E82
*
MENUBOX HEX 4017006F0F06
LOADBOX HEX 4B17040A0400
SAVEBOX HEX 5517040A0400
QUITBOX HEX 5F17040A0400
MAKEBOX HEX 731704140402
PLAYBOX HEX 931704140402
*
SLOTB HEX 401F00340706
SLOTBOX HEX 001F040A0503
SBOX1 HEX 4B1F040A0503
SBOX2 HEX 551F040A0503
SBOX3 HEX 5F1F040A0503
SBOX4 HEX 691F040A0503
*
DRIVEB HEX 7E1F00140706
DRIVEBOX HEX 001F040A0505
DBOX1 HEX 7E1F040A0505
DBOX2 HEX 881F040A0505
*
LOAD JSR GETNAME
JSR INPROMPT1
LDA #0
STA DISKCMD
*
LDX #1
JSR OPEN
*
LDA #3
STA FMPL
LDA #4
STA FMPL+1
JSR ZPOSN
LDA #4
STA FMPL+6
LDA #0
STA FMPL+7
LDA #<PBBASE-4
STA FMPL+8
LDA #>PBBASE-4
STA FMPL+9
JSR DOFCMD
*
LDA #2
STA FMPL+1
LDA PBBASE-2
STA FMPL+6
LDA PBBASE-1
STA FMPL+7
LDA #<PBBASE
STA FMPL+8
LDA #>PBBASE
STA FMPL+9
JSR DOFCMD
*
JSR CLOSE
*
JSR INIT
LDY PBDATA
JSR GETOBJ
JSR DECOMPRESS
LDA #0
STA SCANMODE
JSR DRAWDISPLAY
JMP START
*
SAVE JSR GETNAME
JSR INPROMPT1
LDA #1
STA DISKCMD
LDA #$80
STA SCANMODE
JSR DRAWDISPLAY
JSR COMPRESS
*
LDA #<PBBASE
STA PARAM
LDA #>PBBASE
STA PARAM+1
LDA MIDBTM
SEC
SBC #<PBBASE
STA PARAM+2
LDA MIDBTM+1
SBC #>PBBASE
STA PARAM+3
*
JSR BSAVE
*
LDA #0
STA SCANMODE
JSR DRAWDISPLAY
JMP START
*
BSAVE LDX #0
JSR OPEN
*
LDA #4
STA FMPL
STA FMPL+1
JSR ZPOSN
*
LDA PARAM
SEC
SBC #4
STA FMPL+8
STA TEMP
LDA PARAM+1
SBC #0
STA FMPL+9
STA TEMP+1
LDA PARAM+2
CLC
ADC #3 ;LESS 1
STA FMPL+6
LDA PARAM+3
ADC #0
STA FMPL+7
*
LDY #0
LDA PARAM
STA (TEMP),Y
INY
LDA PARAM+1
STA (TEMP),Y
INY
LDA PARAM+2
STA (TEMP),Y
INY
LDA PARAM+3
STA (TEMP),Y
*
JSR DOFCMD
JMP CLOSE
*
ZPOSN LDA #0
STA FMPL+2
STA FMPL+3
STA FMPL+4
STA FMPL+5
RTS
*
CLOSE LDA #2
STA FMPL
LDX #1
JMP DOFCMD
*
OPEN LDA #1 ;OPEN
STA FMPL
JSR ZPOSN
*
LDA DRIVE
STA FMPL+5
LDA SLOT
STA FMPL+6
*
LDA #4 ;BINARY FILE
STA FMPL+7
LDA #<CHARBUF
STA FMPL+8
LDA #>CHARBUF
STA FMPL+9
BNE DOFCMD2
*
DOFCMD LDX #1
DOFCMD2 LDA #<FMWB
STA FMPL+12
LDA #>FMWB
STA FMPL+13
LDA #<TSBUF
STA FMPL+14
LDA #>TSBUF
STA FMPL+15
LDA #<DSBUF
STA FMPL+16
LDA #>DSBUF
STA FMPL+17
JSR FMGR
BCS ERROR
RTS
*
ERROR LDA DISKCMD
CMP #1
BNE ERR2
STA SCANMODE
JSR DRAWDISPLAY
*
ERR2 JSR DODIALOG
LDY #$59
LDX #1
LDA #0
JSR CHARTO
LDY FMPL+10
LDX ERRTBL,Y
ERR4 LDA ERRMSGS,X
STX XTEMP
AND #$7F
CMP #$20
BNE ERR5
LDA CHAR+4
CLC
ADC #4
CMP #7
BCC *+7
SBC #7
INC CHAR+3
STA CHAR+4
JMP ERR6
ERR5 CMP #$41
BCC ERR6
CMP #$5B
BCS ERR6
SBC #$36
JSR PRCHAR
ERR6 LDX XTEMP
LDA ERRMSGS,X
BMI ERR7
INX
BNE ERR4
*
ERR7 LDA $C000
BPL ERR7
STA $C010
*
JSR UNDODIALOG
LDA DISKCMD
CMP #2
BEQ MAKEOUT
JMP START
*
QUIT LDX STACKTEMP
TXS
RTS
*
MAKE JSR GETNAME
LDY CHARINDX
LDA #$A0
STA CHARBUF,Y
STA CHARBUF+1,Y
STA CHARBUF+2,Y
*
LDA #2
STA DISKCMD
JSR CLEARMENU
LDY #191
JSR MAKEHOLE
JSR SWAPUSER
JSR INPROMPT1
*
LDA #$4C ;JMP OP
STA GAMEBTM
LDA #<GAMESTART
STA GAMEBTM+1
LDA #>GAMESTART
STA GAMEBTM+2
*
LDA #<GAMEBTM
STA PARAM
LDA #>GAMEBTM
STA PARAM+1
LDA #<GAMETOP
SEC
SBC #<GAMEBTM
STA PARAM+2
LDA #>GAMETOP
SBC #>GAMEBTM
STA PARAM+3
*
JSR BSAVE
*
MAKEOUT LDA #<GAMEBTM-4
STA TEMP
LDA #>GAMEBTM-4
STA TEMP+1
LDA #$3F ;PATCH TABLE
LDY #6
MAK2 STA (TEMP),Y
SEC
SBC #4
DEY
BPL MAK2
*
QUITMAKE LDA STACKTEMP
JMP RELOAD
*
PLAY JSR CLEARMENU
LDY #191
JSR MAKEHOLE
JSR SWAPUSER
JSR PLAYGAME
JMP QUITMAKE
*
INPROMPT1 JSR DODIALOG
LDY #$59
LDX #1
LDA #0
JSR CHARTO
LDA #<INSERTMSG
LDX #>INSERTMSG
JSR PRINT
*
STA $C010
WAIT1 LDA $C000
BPL WAIT1
STA $C010
JMP UNDODIALOG
*
CLEARMENU JSR XDRAWCRSR
LDY #3
JSR SETMODE
LDA #<MENUBOX
LDX #>MENUBOX
JSR DRAWRECT
LDY #2
JMP SETMODE
*
DODIALOG LDY #1
JSR SETMODE
LDA #<DIALOGBITS
LDX #>DIALOGBITS
JSR DRAWBITS
LDY #3
JSR SETMODE
LDA #<DIALOGBOX
LDX #>DIALOGBOX
JSR DRAWRECT
LDY #2
JSR SETMODE
JMP FRAMERECT+3
*
UNDODIALOG LDY #0
JSR SETMODE
LDA #<DIALOGBITS
LDX #>DIALOGBITS
JSR DRAWBITS
LDY #0
TYA
UNDODLG2 STA $400,Y
STA $500,Y
STA $600,Y
INY
BNE UNDODLG2
LDY #2
JMP SETMODE
*
GETNAME JSR CLEARMENU
JSR DODIALOG
LDY #29
LDA #$A0
GETN2 STA CHARBUF,Y
DEY
BPL GETN2
*
LDY #$59
LDX #$01
LDA #0
STX BOXCURSOR+3
STA BOXCURSOR+4
STA BOXCURSORON
STA CHARINDX
JSR CHARTO
*
GETN3 JSR CHECKCURSOR
LDA $C000
BPL GETN3
STA $C010
STA CHARASCII
CMP #$9B
BEQ GETN4
CMP #$8D
BEQ GETN5 ;C=1
JSR CURSOROFF
LDA CHARASCII
JSR DOKBD
JSR CURSOROFF
JMP GETN3
*
GETN4 CLC
GETN5 PHP
JSR CURSOROFF
*
JSR UNDODIALOG
LDY CHARINDX
LDA #$AE
STA CHARBUF,Y
LDA #$D0
STA CHARBUF+1,Y
LDA #$C2
STA CHARBUF+2,Y
PLP
BCS GETN6
LDX STACKTEMP
TXS
JMP START
GETN6 RTS
*
DIALOGBITS DA $A000
HEX 5700000B28
*
DIALOGBOX HEX 5700000A2705
*
DOKBD LDY CHARINDX
CMP #$88
BEQ DOKB7
*
CPY #27
BCS DOKB5
*
CMP #$A0
BNE DOKB2
*
STA CHARBUF,Y
LDA CHAR+3
STA LINELEN,Y
TAX
LDA CHAR+4
STA LINELEN+27,Y
CLC
ADC #4
CMP #7
BCC *+5
SBC #7
INX
STX CHAR+3
STX BOXCURSOR+3
STA CHAR+4
STA BOXCURSOR+4
JMP DOKB4
*
DOKB2 CMP #$B0
BCC DOKB5
CMP #$BA
BCS DOKB6
SBC #$AF ;C=0, -B0
*
DOKB3 TAX
LDA CHARASCII
STA CHARBUF,Y
LDA CHAR+3
STA LINELEN,Y
LDA CHAR+4
STA LINELEN+27,Y
TXA
JSR PRCHAR
LDA CHAR+3
STA BOXCURSOR+3
LDA CHAR+4
STA BOXCURSOR+4
DOKB4 INC CHARINDX
DOKB5 RTS
*
DOKB6 CMP #$C1
BCC DOKB5
CMP #$DB
BCS DOKB5
SBC #$B6 ;C=0 -B7
BNE DOKB3
*
DOKB7 DEY
BMI DOKB5
STY CHARINDX
LDA LINELEN,Y
STA CHAR+3
STA CLRRECT+1
STA BOXCURSOR+3
LDA LINELEN+27,Y
STA CHAR+4
STA CLRRECT+2
STA BOXCURSOR+4
LDA #$A0
STA CHARBUF,Y
LDY #3
JSR SETMODE
LDA #<CLRRECT
LDX #>CLRRECT
JSR DRAWRECT
LDY #2
JMP SETMODE
*
CLRRECT HEX 590000070006
*
CURSOROFF LDA BOXCURSORON
BNE DOCURSOR
RTS
*
CHECKCURSOR INC DTIMER1
BNE DOCR2
INC DTIMER2
LDA DTIMER2
AND #$1F
BNE DOCR2
LDA BOXCURSORON
EOR #$FF
STA BOXCURSORON
*
DOCURSOR LDA #<BOXCURSOR
LDX #>BOXCURSOR
JMP XOFFDRAW
*
DOCR2 RTS
*
BOXCURSOR DA *+7
HEX 5900000701
HEX 3F3F3F3F3F3F3F
*
COMPRESS LDA #<HIRES1
STA BASE1
LDA #>HIRES1
STA BASE1+1
LDA HTOP
PHA
LDA #$FF
STA HTOP-1
STA HTOP
*
FINDZ LDY #0
FINDZ2 LDA (BASE1),Y
BNE FINDZ3
INY
BNE FINDZ2
*
LDA #1
STA (MIDBTM),Y
TYA
INY
STA (MIDBTM),Y ;1/256 RECORD
*
INC BASE1+1 ;BASE+256
LDA MIDBTM ;MIDBTM+2
CLC
ADC #2
STA MIDBTM
BCC *+4
INC MIDBTM+1
JMP FINDZ
*
FINDZ3 LDA BASE1+1
CMP #>HTOP
BCS FINDZ4
CPY #2
BCC FINDNZ
FINDZ4 STY TEMP
LDA #1
LDY #0
STA (MIDBTM),Y
INY
LDA TEMP
STA (MIDBTM),Y ;1/RUNLEN REC
*
CLC
ADC BASE1 ;BASE+RUNLEN
STA BASE1
BCC *+4
INC BASE1+1
LDA MIDBTM ;MIDBTM+2
CLC
ADC #2
STA MIDBTM
BCC *+4
INC MIDBTM+1
*
LDA BASE1+1
CMP #>HTOP
BCC FINDZ
LDY #0
LDA #1
STA (MIDBTM),Y
INY
STA (MIDBTM),Y ;1/1 REC
*
LDA MIDBTM
CLC
ADC #2
STA MIDBTM
BCC *+4
INC MIDBTM+1
*
PLA
STA HTOP
RTS
*
FINDNZ INY
FINDNZ2 LDA (BASE1),Y
BEQ FINDNZ5
INY
BNE FINDNZ2
*
FINDNZ3 TYA
STA (MIDBTM),Y
INC MIDBTM
BNE *+4
INC MIDBTM+1
*
FINDNZ4 LDA (BASE1),Y
STA (MIDBTM),Y
INY
BNE FINDNZ4 ;256/BYTES REC
*
INC BASE1+1
INC MIDBTM+1
JMP FINDZ
*
FINDNZ5 INY
BEQ FINDNZ3
LDA (BASE1),Y
BNE FINDNZ2
STY TEMP
TYA
LDY #0
STA (MIDBTM),Y
INC MIDBTM
BNE *+4
INC MIDBTM+1
*
FINDNZ6 LDA (BASE1),Y
STA (MIDBTM),Y
INY
BNE FINDNZ6 ;RUN LEN/BYTES REC
*
LDA TEMP
CLC
ADC BASE1
STA BASE1
BCC *+4
INC BASE1+1
LDA TEMP
CLC
ADC MIDBTM
STA MIDBTM
BCC *+4
INC MIDBTM+1
JMP FINDZ
*
DECOMPRESS LDA #<HIRES1
STA BASE1
LDA #>HIRES1
STA BASE1+1
LDA HTOP
PHA
*
DCMP2 LDY #0
LDA (OBJ),Y
CMP #1
BNE DCMP6
*
INY
LDA (OBJ),Y
CMP #1
BEQ DCMP5
STA TEMP
TAY
DEY
*
LDA #0
DCMP3 STA (BASE1),Y
DEY
BNE DCMP3
STA (BASE1),Y
*
LDA TEMP
BEQ DCMP4
CLC
ADC BASE1
STA BASE1
BCC *+4
DCMP4 INC BASE1+1
LDA OBJ
CLC
ADC #2
STA OBJ
BCC *+4
INC OBJ+1
JMP DCMP2
*
DCMP5 PLA
STA HTOP
RTS
*
DCMP6 STA TEMP
INC OBJ
BNE *+4
INC OBJ+1
TAY
DEY
*
DCMP7 LDA (OBJ),Y
STA (BASE1),Y
DEY
BNE DCMP7
LDA (OBJ),Y
STA (BASE1),Y
*
LDA TEMP
BEQ DCMP8
CLC
ADC BASE1
STA BASE1
BCC *+4
DCMP8 INC BASE1+1
LDA TEMP
BEQ DCMP9
CLC
ADC OBJ
STA OBJ
BCC *+4
DCMP9 INC OBJ+1
JMP DCMP2