1081 lines
13 KiB
ArmAsm
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
|