mirror of
https://github.com/nathanriggs/AppleIIAsm-Collection.git
synced 2024-06-08 16:29:35 +00:00
Rev 0.4 updates
Massive updates that changes the way most subroutines are handled. Major bugfixes, various utilities added, started higher-level libraries.
This commit is contained in:
parent
b3eda59f4f
commit
c8cac53c5e
BIN
bin/Merlin-Pro v2.43 Disk 1.dsk
Normal file
BIN
bin/Merlin-Pro v2.43 Disk 1.dsk
Normal file
Binary file not shown.
Binary file not shown.
BIN
bin/d11_serial_prn.dsk
Normal file
BIN
bin/d11_serial_prn.dsk
Normal file
Binary file not shown.
BIN
bin/d12_sortsearch.dsk
Normal file
BIN
bin/d12_sortsearch.dsk
Normal file
Binary file not shown.
BIN
bin/d13_tmenus_twindows.dsk
Normal file
BIN
bin/d13_tmenus_twindows.dsk
Normal file
Binary file not shown.
BIN
bin/d14_80col.dsk
Normal file
BIN
bin/d14_80col.dsk
Normal file
Binary file not shown.
BIN
bin/d15_mockingboard.dsk
Normal file
BIN
bin/d15_mockingboard.dsk
Normal file
Binary file not shown.
BIN
bin/d16_dbl_lores.dsk
Normal file
BIN
bin/d16_dbl_lores.dsk
Normal file
Binary file not shown.
Binary file not shown.
BIN
bin/d17_dbl_hires.dsk
Normal file
BIN
bin/d17_dbl_hires.dsk
Normal file
Binary file not shown.
BIN
bin/d18_demos_utilities_disk_1.dsk
Normal file
BIN
bin/d18_demos_utilities_disk_1.dsk
Normal file
Binary file not shown.
BIN
bin/d19_demo_builds_1.dsk
Normal file
BIN
bin/d19_demo_builds_1.dsk
Normal file
Binary file not shown.
BIN
bin/d1_stdio.dsk
BIN
bin/d1_stdio.dsk
Binary file not shown.
BIN
bin/d20_demo_builds_2.dsk
Normal file
BIN
bin/d20_demo_builds_2.dsk
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bin/d4_math.dsk
BIN
bin/d4_math.dsk
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bin/d7_convert.dsk
Normal file
BIN
bin/d7_convert.dsk
Normal file
Binary file not shown.
BIN
bin/d8_lores.dsk
Normal file
BIN
bin/d8_lores.dsk
Normal file
Binary file not shown.
BIN
bin/d9_speaker.dsk
Normal file
BIN
bin/d9_speaker.dsk
Normal file
Binary file not shown.
|
@ -1,8 +0,0 @@
|
|||
10 HOME
|
||||
20 PRINT "BUILDING EXEC FILE..."
|
||||
30 PRINT CHR$ (4);"OPEN RUNDEMO.EXEC"
|
||||
40 PRINT CHR$ (4);"WRITE RUNDEMO.EXEC"
|
||||
50 PRINT "BLOAD FILEIO.DEMO"
|
||||
60 PRINT "CALL -151"
|
||||
70 PRINT "6000G"
|
||||
80 PRINT CHR$ (4);"CLOSE RUNDEMO.EXEC"
|
|
@ -1,30 +0,0 @@
|
|||
5 HOME
|
||||
8 ONERR GOTO 1000
|
||||
10 PRINT "ASSEMBLY CODE MINIFIER"
|
||||
20 PRINT "-=-=-=-=-=-=-=-=-=-=-="
|
||||
30 PRINT
|
||||
35 DIM FC$(1500):C = 0
|
||||
40 INPUT "ENTER THE SOURCE FILE NAME: ";FF$
|
||||
50 INPUT "ENTER THE DESTINATION FILE NAME: ";DD$
|
||||
55 PRINT "WORKING.."
|
||||
60 PRINT CHR$ (4);"OPEN ";FF$
|
||||
70 PRINT CHR$ (4);"READ ";FF$
|
||||
80 GET AA$
|
||||
85 REM ? CHR$ (34);".";
|
||||
90 IF AA$ = CHR$ (13) THEN GOTO 200
|
||||
95 S$ = S$ + AA$
|
||||
110 GOTO 80
|
||||
200 IF LEFT$ (S$,1) = "*" OR LEFT$ (S$,1) = ";" THEN S$ = ""
|
||||
500 FC$(C) = S$
|
||||
510 S$ = ""
|
||||
520 C = C + 1
|
||||
990 GOTO 80
|
||||
1000 PRINT : PRINT CHR$ (4);"CLOSE ";FF$
|
||||
1010 PRINT CHR$ (4);"OPEN ";DD$
|
||||
1020 PRINT CHR$ (4);"WRITE ";DD$
|
||||
1030 FOR Z = 0 TO C
|
||||
1040 IF FC$(Z) < > "" THEN PRINT FC$(Z)
|
||||
1050 NEXT Z
|
||||
1060 PRINT CHR$ (4);"CLOSE ";DD$
|
||||
1070 PRINT "DONE!": PRINT : PRINT : PRINT
|
||||
1080 PRINT CHR$ (7): PRINT CHR$ (7): PRINT CHR$ (7)
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,153 +0,0 @@
|
|||
AGET82
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :YIDX
|
||||
PLA
|
||||
STA :XIDX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
DEC :XIDX
|
||||
DEC :YIDX
|
||||
LDY #2
|
||||
LDA (ADDR1),Y ; ELEMENT LENGTH
|
||||
STA :MCAND ; ELEMENT LENGTH
|
||||
STA :ELEN
|
||||
DEY
|
||||
LDA (ADDR1),Y ; Y LENGTH
|
||||
STA :YLEN
|
||||
DEY
|
||||
LDA (ADDR1),Y ; X LENGTH
|
||||
STA :XLEN
|
||||
LDA #0
|
||||
STA :MCAND+1
|
||||
LDA ERRCTRL
|
||||
CMP #1
|
||||
BEQ :CHKERR
|
||||
JMP :ERREND
|
||||
:CHKERR
|
||||
LDA :XIDX ; IF X > MAX LEN
|
||||
CMP :XLEN
|
||||
BCS :XOVF
|
||||
JMP :ERRCONT1
|
||||
:XOVF
|
||||
_ERR :E_SID;:E_XOVF;:E_DUMP;:XIDX;#15
|
||||
:ERRCONT1
|
||||
LDA :YIDX ; IF Y > MAX LEN
|
||||
CMP :YLEN
|
||||
BCS :YOVF
|
||||
JMP :ERRCONT2
|
||||
:YOVF
|
||||
_ERR :E_SID;:E_YOVF;:E_DUMP;:XIDX;#15
|
||||
:ERRCONT2
|
||||
LDA :XIDX ; IF INDEX IS 0, ERR
|
||||
CMP #255
|
||||
BEQ :XOVF
|
||||
:ERRCONT3
|
||||
LDA :YIDX
|
||||
CMP #255
|
||||
BEQ :YOVF
|
||||
:ERREND
|
||||
LDA #0
|
||||
TAY
|
||||
STY SCRATCH
|
||||
BEQ :ENTLP
|
||||
:DOADD
|
||||
CLC
|
||||
ADC :YIDX
|
||||
TAX
|
||||
TYA
|
||||
ADC SCRATCH
|
||||
TAY
|
||||
TXA
|
||||
:LP
|
||||
ASL :YIDX
|
||||
ROL SCRATCH
|
||||
:ENTLP
|
||||
LSR :YLEN
|
||||
BCS :DOADD
|
||||
BNE :LP
|
||||
STX :MLIER
|
||||
STY :MLIER+1
|
||||
CLC
|
||||
LDA :MLIER
|
||||
ADC :XIDX
|
||||
STA :MLIER
|
||||
BCC :CONTADD
|
||||
LDA :MLIER+1
|
||||
ADC #1
|
||||
STA :MLIER+1
|
||||
:CONTADD
|
||||
LDA #0
|
||||
STA :PROD+2
|
||||
STA :PROD+3
|
||||
LDX #$10
|
||||
:SHIFTR LSR :MLIER+1
|
||||
ROR :MLIER
|
||||
BCC :ROTR
|
||||
LDA :PROD+2
|
||||
CLC
|
||||
ADC :MCAND
|
||||
STA :PROD+2
|
||||
LDA :PROD+3
|
||||
ADC :MCAND+1
|
||||
:ROTR
|
||||
ROR
|
||||
STA :PROD+3
|
||||
ROR :PROD+2
|
||||
ROR :PROD+1
|
||||
ROR :PROD
|
||||
DEX
|
||||
BNE :SHIFTR
|
||||
CLC
|
||||
INC :PROD ; INCREASE BY 3
|
||||
INC :PROD
|
||||
INC :PROD
|
||||
BCC :NOCAR
|
||||
INC :PROD+1
|
||||
:NOCAR
|
||||
CLC
|
||||
LDA :PROD
|
||||
ADC ADDR1
|
||||
STA :PROD
|
||||
LDA :PROD+1
|
||||
ADC ADDR1+1
|
||||
STA :PROD+1
|
||||
LDY :PROD
|
||||
LDX :PROD+1
|
||||
STY ADDR1
|
||||
STX ADDR1+1
|
||||
LDY #0
|
||||
:RLP
|
||||
LDA (ADDR1),Y
|
||||
STA RETURN,Y
|
||||
INY
|
||||
CPY :ELEN
|
||||
BNE :RLP
|
||||
LDA :ELEN
|
||||
STA RETLEN
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDA RETLEN
|
||||
LDY ADDR1
|
||||
LDX ADDR1+1
|
||||
RTS
|
||||
:XIDX DS 2
|
||||
:YIDX DS 2
|
||||
:XLEN DS 1
|
||||
:YLEN DS 1
|
||||
:PROD DS 4
|
||||
:MLIER DS 2
|
||||
:MCAND DS 2
|
||||
:ELEN DS 1
|
||||
:E_SID ASC "AGET82 (GET82 MACRO)",00
|
||||
:E_DUMP ASC ":XIDX(2) :YIDX(2) :XLEN(1) :YLEN(1)"
|
||||
ASC ":PROD(4) :MLIER(2) :MCAND(2) :ELEN(1)",00
|
||||
:E_XOVF ASC "OUT OF BOUNDS! X > MAX OR IS 0.",00
|
||||
:E_YOVF ASC "OUT OF BOUNDS! Y > MAX OR IS 0.",00
|
|
@ -1,158 +0,0 @@
|
|||
APUT82
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :YIDX ; Y INDEX
|
||||
DEC :YIDX
|
||||
PLA
|
||||
STA :XIDX ; X INDEX
|
||||
DEC :XIDX
|
||||
PLA
|
||||
STA ADDR4 ; ADDRESS OF ARRAY
|
||||
PLA
|
||||
STA ADDR4+1
|
||||
PLA
|
||||
STA ADDR3 ; ADDRESS OF DATA
|
||||
PLA ; TO BE COPIED
|
||||
STA ADDR3+1
|
||||
LDY #2
|
||||
LDA (ADDR4),Y
|
||||
STA :ESIZE
|
||||
STA :MCAND
|
||||
LDA #0
|
||||
STA :MCAND+1
|
||||
LDY #0
|
||||
LDA (ADDR4),Y
|
||||
STA :XLEN
|
||||
INY
|
||||
LDA (ADDR4),Y
|
||||
STA :YLEN
|
||||
LDY #0
|
||||
LDA ERRCTRL
|
||||
CMP #1
|
||||
BEQ :CHKERR
|
||||
JMP :ERREND
|
||||
:CHKERR
|
||||
LDA :XIDX ; IF X > MAX LEN
|
||||
CMP :XLEN
|
||||
BCS :XOVF
|
||||
JMP :ERRCONT1
|
||||
:XOVF
|
||||
_ERR :E_SID;:E_XOVF;:E_DUMP;:XIDX;#15
|
||||
:ERRCONT1
|
||||
LDA :YIDX ; IF Y > MAX LEN
|
||||
CMP :YLEN
|
||||
BCS :YOVF
|
||||
JMP :ERRCONT2
|
||||
:YOVF
|
||||
_ERR :E_SID;:E_YOVF;:E_DUMP;:XIDX;#15
|
||||
:ERRCONT2
|
||||
LDA :XIDX ; IF INDEX IS 0, ERR
|
||||
CMP #255
|
||||
BEQ :XOVF
|
||||
:ERRCONT3
|
||||
LDA :YIDX
|
||||
CMP #255
|
||||
BEQ :YOVF
|
||||
:ERREND
|
||||
LDA #0
|
||||
TAY
|
||||
STY SCRATCH
|
||||
BEQ :ENTLP
|
||||
:DOADD
|
||||
CLC
|
||||
ADC :YIDX
|
||||
TAX
|
||||
TYA
|
||||
ADC SCRATCH
|
||||
TAY
|
||||
TXA
|
||||
:LP
|
||||
ASL :YIDX
|
||||
ROL SCRATCH
|
||||
:ENTLP
|
||||
LSR :YLEN
|
||||
BCS :DOADD
|
||||
BNE :LP
|
||||
STX :MLIER
|
||||
STY :MLIER+1
|
||||
CLC
|
||||
LDA :MLIER
|
||||
ADC :XIDX
|
||||
STA :MLIER
|
||||
BCC :CONTADD
|
||||
LDA :MLIER+1
|
||||
ADC #1
|
||||
STA :MLIER+1
|
||||
:CONTADD
|
||||
LDA #0
|
||||
STA :PROD+2
|
||||
STA :PROD+3
|
||||
LDX #$10
|
||||
:SHIFTR LSR :MLIER+1
|
||||
ROR :MLIER
|
||||
BCC :ROTR
|
||||
LDA :PROD+2
|
||||
CLC
|
||||
ADC :MCAND
|
||||
STA :PROD+2
|
||||
LDA :PROD+3
|
||||
ADC :MCAND+1
|
||||
:ROTR
|
||||
ROR
|
||||
STA :PROD+3
|
||||
ROR :PROD+2
|
||||
ROR :PROD+1
|
||||
ROR :PROD
|
||||
DEX
|
||||
BNE :SHIFTR
|
||||
CLC
|
||||
INC :PROD ; INCREASE BY 3
|
||||
INC :PROD
|
||||
INC :PROD
|
||||
BCC :NOCAR
|
||||
INC :PROD+1
|
||||
:NOCAR
|
||||
CLC
|
||||
LDA :PROD
|
||||
ADC ADDR4
|
||||
STA :PROD
|
||||
LDA :PROD+1
|
||||
ADC ADDR4+1
|
||||
STA :PROD+1
|
||||
LDA :PROD
|
||||
LDY :PROD
|
||||
LDX :PROD+1
|
||||
STY ADDR2
|
||||
STX ADDR2+1
|
||||
LDY #0
|
||||
LDX #0
|
||||
:CLP
|
||||
LDA (ADDR3),Y
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
CPY :ESIZE
|
||||
BNE :CLP
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDX ADDR2+1
|
||||
LDY ADDR2
|
||||
LDA :ESIZE
|
||||
RTS
|
||||
:ESIZE DS 1
|
||||
:XIDX DS 1
|
||||
:YIDX DS 1
|
||||
:MCAND DS 2
|
||||
:MLIER DS 2
|
||||
:PROD DS 4
|
||||
:XLEN DS 1
|
||||
:YLEN DS 1
|
||||
:E_SID ASC "APUT82 (PUT82 MACRO)",00
|
||||
:E_DUMP ASC ":XIDX(1) :YIDX(1) :MCAND(2) :MLIER(2)"
|
||||
ASC ":PROD(4) :XLEN(1) :YLEN(1)",00
|
||||
:E_XOVF ASC "OUT OF BOUNDS! X > MAXIMUM OR IS 0.",00
|
||||
:E_YOVF ASC "OUT OF BOUNDS! Y > MAX OR IS 0.",00
|
|
@ -1,76 +0,0 @@
|
|||
DIM81 MAC
|
||||
LDA #>]1 ; ARRAY ADDR
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA ]2 ; ARRAY LENGTH
|
||||
PHA
|
||||
LDA ]3 ; ELEMENT LENGTH
|
||||
PHA
|
||||
LDA ]4
|
||||
PHA ; FILL VAL
|
||||
JSR ADIM81
|
||||
<<<
|
||||
GET81 MAC
|
||||
LDA #>]1 ; ARRAY ADDR
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA ]2 ; ELEM INDEX
|
||||
PHA
|
||||
JSR AGET81
|
||||
<<<
|
||||
PUT81 MAC
|
||||
LDA #>]1
|
||||
PHA ; SRC ADDR
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA #>]2 ; DEST ARRAY
|
||||
PHA
|
||||
LDA #<]2
|
||||
PHA
|
||||
LDA ]3 ; DEST INDEX
|
||||
PHA
|
||||
JSR APUT81
|
||||
<<<
|
||||
DIM82 MAC
|
||||
LDA #>]1 ; ARRAY ADDR
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA ]2 ; X DIM
|
||||
PHA
|
||||
LDA ]3 ; Y DIM
|
||||
PHA
|
||||
LDA ]4 ; ELEMENT LENGTH
|
||||
PHA
|
||||
LDA ]5 ; FILL VAL
|
||||
PHA
|
||||
JSR ADIM82
|
||||
<<<
|
||||
GET82 MAC
|
||||
LDA #>]1 ; ARRAY ADDR
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA ]2 ; X INDEX
|
||||
PHA
|
||||
LDA ]3 ; Y INDEX
|
||||
PHA
|
||||
JSR AGET82
|
||||
<<<
|
||||
PUT82 MAC
|
||||
LDA #>]1 ; SRC ADDR
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA #>]2 ; ARRAY ADDR
|
||||
PHA
|
||||
LDA #<]2
|
||||
PHA
|
||||
LDA ]3 ; X INDEX
|
||||
PHA
|
||||
LDA ]4 ; Y INDEX
|
||||
PHA
|
||||
JSR APUT82
|
||||
<<<
|
|
@ -1,37 +0,0 @@
|
|||
COMP16
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :SUBT ; SUBTRAHEND
|
||||
PLA
|
||||
STA :SUBT+1
|
||||
PLA
|
||||
STA :MINU ; MINUEND
|
||||
PLA
|
||||
STA :MINU+1
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDA :MINU
|
||||
CMP :SUBT ; COMPARE LOW BYTES
|
||||
BEQ :EQUAL
|
||||
LDA :MINU+1
|
||||
SBC :SUBT+1 ; COMPARE HIGH BYTES
|
||||
ORA #1 ; MAKE Z=0, SINCE LOW
|
||||
; BYTES ARE NOT EQUAL
|
||||
BVS :OVFLOW ; MUST HANDLE OVERFLOW
|
||||
RTS ; EXIT
|
||||
:EQUAL
|
||||
LDA :MINU+1
|
||||
SBC :SUBT+1 ; UPPER BYTES
|
||||
BVS :OVFLOW
|
||||
RTS ; RETURN W FLAGS SET
|
||||
:OVFLOW
|
||||
EOR #$80 ; COMPLEMENT N FLAG
|
||||
ORA #1 ; IF OVERFLOW THEN THE
|
||||
RTS
|
||||
:MINU DS 2
|
||||
:SUBT DS 2
|
|
@ -1,29 +0,0 @@
|
|||
DELAYMS
|
||||
MSCNT EQU $0CA ; 202 TIMES THROUGH DELAY1
|
||||
; SPECIFIC TO 1.23 MHZ
|
||||
; SPEED OF APPLE II
|
||||
:DELAY
|
||||
CPY #0 ; 2 CYCLES
|
||||
BEQ :EXIT ; 2C (EXIT IF DEL=0)
|
||||
NOP ; 2 CYCLES (MAKE OVERHEAD=25C)
|
||||
CPY #1 ; 2 CYCLES
|
||||
BNE :DELAYA ; 3C IF TAKEN, ELSE 2C
|
||||
JMP :LAST1 ; 3C
|
||||
:DELAYA
|
||||
DEY ; 2C (PREDEC Y)
|
||||
:DELAY0
|
||||
LDX #MSCNT ; 2C
|
||||
:DELAY1
|
||||
DEX ; 2C
|
||||
BNE :DELAY1 ; 3C
|
||||
NOP ; 2C
|
||||
NOP ; 2C
|
||||
DEY ; 2C
|
||||
BNE :DELAY0 ; 3C
|
||||
:LAST1
|
||||
LDX #MSCNT-3 ; 2C
|
||||
:DELAY2
|
||||
DEX ; 2C
|
||||
BNE :DELAY2 ; 3C
|
||||
:EXIT
|
||||
RTS ; 6C
|
|
@ -1,33 +0,0 @@
|
|||
DIVD8
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :DVEND
|
||||
PLA
|
||||
STA :DVSOR
|
||||
LDA #$00
|
||||
LDY #8
|
||||
ASL :DVSOR
|
||||
:L1 ROL
|
||||
CMP :DVEND
|
||||
BCC :L2
|
||||
SBC :DVEND
|
||||
:L2 ROL :DVSOR
|
||||
DEY
|
||||
BNE :L1
|
||||
STA :REM
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY :REM ; REMAINDER TO Y
|
||||
LDA #1
|
||||
STA RETLEN
|
||||
LDA :DVSOR
|
||||
STA RETURN
|
||||
RTS
|
||||
:REM DS 1
|
||||
:DVEND DS 1
|
||||
:DVSOR DS 1
|
|
@ -1,31 +0,0 @@
|
|||
DOSCMD
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
LDA #$8D
|
||||
JSR FCOUT
|
||||
LDA #$84 ; CTRL-D
|
||||
JSR FCOUT
|
||||
LDA #1
|
||||
STA $AAB6 ; DOS LANG FLAG
|
||||
STA $75+1 ; NOT DIRECT MODE
|
||||
STA $33 ; NOT DIRECT MODE
|
||||
LDY #$01 ; POINT TO NEXT INSTR
|
||||
:LP
|
||||
LDA (RETADR),Y
|
||||
BEQ :DONE
|
||||
JSR FCOUT
|
||||
INY
|
||||
BNE :LP
|
||||
:DONE
|
||||
CLC ; RESTORE INSTR POINTER
|
||||
TYA
|
||||
ADC RETADR
|
||||
STA RETADR
|
||||
LDA RETADR+1
|
||||
ADC #$00
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
|
@ -1,420 +0,0 @@
|
|||
********************************
|
||||
* *
|
||||
* MAZE GENERATOR *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
** ASSEMBLER DIRECTIVES
|
||||
*
|
||||
CYC AVE
|
||||
EXP OFF
|
||||
DSK MAKEMAZE
|
||||
TR ON
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
PUT REQUIRED.VARS
|
||||
USE REQUIRED.MAC.MIN
|
||||
USE ARRAYS.MAC.MIN
|
||||
USE MATH.MAC.MIN
|
||||
USE STDIO.MAC.MIN
|
||||
PUT REQUIRED.HOOKS.MIN
|
||||
PUT STDIO.HOOKS
|
||||
PUT MATH.HOOKS
|
||||
PUT ARRAYS.HOOKS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* CONSTANT DECLARATIONS *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
BAS EQU $2000 ; BASE ADDRESS FOR ARRAYS
|
||||
*
|
||||
** NOTE THAT XLEN AND YLEN CANNOT EXCEED 13, AS THIS
|
||||
** WOULD MAKE THE ARRAY SIZES >256, WHICH ISN'T
|
||||
** WHAT 8-BIT ARRAYS ARE PREPARED TO HANDLE.
|
||||
*
|
||||
** THE NEXT UPDATE WILL UTILIZE 16-BIT ARRAYS
|
||||
** TO ADDRESS THIS PROBLEM.
|
||||
*
|
||||
XLEN KBD "ENTER MAZE SIZE (<14)"
|
||||
YLEN EQU XLEN ; CURRENT ALGO ONLY DOES SQUARE
|
||||
XMAX EQU XLEN+2 ; ADD EXTRA COLUMN
|
||||
YMAX EQU YLEN+2 ; ADD EXTRA ROW
|
||||
XNUM EQU 2*XLEN+2
|
||||
ASZ EQU XMAX*YMAX+4 ; ARRAY SIZE+INFO BYTES
|
||||
XSTAKS EQU ASZ ; COLUMN STACK SIZE; X * Y + 1
|
||||
YSTAKS EQU ASZ ; ROW STACK SIZE; X * Y + 1
|
||||
*
|
||||
SOUTHW EQU BAS ; SOUTH WALLS ARRAY
|
||||
WESTW EQU ASZ+BAS ; WEST WALLS ARRAY
|
||||
VISITED EQU 2*ASZ+BAS ; CELLS VISITED
|
||||
XSTACK EQU 3*ASZ+BAS ; STACK FOR COLUMNS
|
||||
YSTACK EQU 4*ASZ+BAS ; STACK FOR ROWS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* MAIN PROGRAM LOOP *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
INIT
|
||||
*
|
||||
*LDA #0
|
||||
*STA ERRCTRL ; TURN OFF ERRORS
|
||||
JSR HOME
|
||||
PRN "INITIALIZING...",8D
|
||||
*
|
||||
JSR :SETVARS
|
||||
JSR :OUTWALLS
|
||||
*
|
||||
** GET RANDOM STARTING POINT
|
||||
*
|
||||
RNDB #2;#XLEN
|
||||
STA XX
|
||||
RNDB #2;#YLEN
|
||||
STA YY
|
||||
*
|
||||
JMP BUILD
|
||||
*
|
||||
********************************
|
||||
*
|
||||
:SETVARS
|
||||
*
|
||||
** DIM ARRAYS AND FILL
|
||||
*
|
||||
DIM82 SOUTHW;#XMAX;#YMAX;#1;#1
|
||||
DIM82 WESTW;#XMAX;#YMAX;#1;#1
|
||||
DIM82 VISITED;#XMAX;#YMAX;#1;#0
|
||||
DIM81 XSTACK;#XSTAKS;#1;#0
|
||||
DIM81 YSTACK;#YSTAKS;#1;#0
|
||||
*
|
||||
** NOW ASSIGN VARIABLE VALUES
|
||||
*
|
||||
LDA #0
|
||||
STA SPTR
|
||||
STA V0
|
||||
LDA #1
|
||||
STA V1
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
*
|
||||
:OUTWALLS
|
||||
*
|
||||
** MAKE COLUMN MIN AND MAX TO BE ALL
|
||||
** WALL (CODE: 1).
|
||||
*
|
||||
LDA #0 ; SO X,Y WILL INC TO 1
|
||||
STA XX
|
||||
STA YY
|
||||
*
|
||||
:COLEDGE
|
||||
INC XX
|
||||
PUT82 V1;VISITED;XX;#1
|
||||
PUT82 V1;VISITED;XX;#YMAX
|
||||
LDA XX
|
||||
CMP #XMAX
|
||||
BNE :COLEDGE
|
||||
*
|
||||
** MAKE MIN AND MAX ROWS TO BE ALL WALL
|
||||
*
|
||||
:ROWEDGE
|
||||
INC YY
|
||||
PUT82 V1;VISITED;#1;YY
|
||||
PUT82 V1;VISITED;#XMAX;YY
|
||||
LDA YY
|
||||
CMP #YMAX
|
||||
BNE :ROWEDGE
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* BUILD THE MAZE *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
BUILD
|
||||
*
|
||||
PRN "BUILDING MAZE...",8D8D
|
||||
*
|
||||
********************************
|
||||
*
|
||||
STAKPUSH
|
||||
*
|
||||
INC SPTR
|
||||
PUT81 XX;XSTACK;SPTR ; PUT COL ON STACK
|
||||
PUT81 YY;YSTACK;SPTR ; PUT ROW ON STACK
|
||||
PUT82 V1;VISITED;XX;YY ; MARK BLOCK AS VISITED
|
||||
*
|
||||
********************************
|
||||
*
|
||||
CHECKALL
|
||||
*
|
||||
** CHECKS ALL ADJACENT BLOCKS FOR A WALL. IF
|
||||
** COMPLETELY SURROUNDED, POP THE STACK AND
|
||||
** AND START OVER UNTIL.
|
||||
*
|
||||
LDA YY ; STORE VALUES FOR
|
||||
STA YP1 ; CURRENT ROW MINUS ONE
|
||||
STA YM1 ; AND CURRENT ROW PLUS
|
||||
LDA XX ; ONE, THEN DO THE SAME
|
||||
STA XP1 ; FOR COLUMNS
|
||||
STA XM1
|
||||
*
|
||||
INC YP1
|
||||
INC XP1
|
||||
DEC XM1
|
||||
DEC YM1
|
||||
*
|
||||
:_IF1 ; IF VISITED(XX,Y+1) == 1
|
||||
GET82 VISITED;XX;YP1
|
||||
LDA RETURN
|
||||
CMP #1
|
||||
BEQ :_IF2 ; IF CELL BELOW IS A WALL
|
||||
; CONTINUE TESTING OTHER
|
||||
; ADJACENT CELLS
|
||||
JMP DOMOVE ; OTHERWISE, EXIT CONDITIONAL
|
||||
:_IF2 ; AND VISITED(X+1,Y) == 1
|
||||
*
|
||||
GET82 VISITED;XP1;YY
|
||||
LDA RETURN
|
||||
CMP #1 ; TEST RIGHT CELL
|
||||
BEQ :_IF3
|
||||
JMP DOMOVE
|
||||
*
|
||||
:_IF3 ; AND IF VISITED(X,Y-1) == 1
|
||||
LDA YM1
|
||||
CMP #0 ; TEST FOR Y=0 TO OVOID
|
||||
BNE :IF3C ; OUT OF BOUNDS ERROR
|
||||
JMP :_IF4
|
||||
:IF3C
|
||||
GET82 VISITED;XX;YM1
|
||||
LDA RETURN
|
||||
CMP #1 ; TEST CELL ABOVE
|
||||
BEQ :_IF4
|
||||
JMP DOMOVE
|
||||
*
|
||||
:_IF4 ; AND IF VISITED(X-1,Y) == 1
|
||||
GET82 VISITED;XM1;YY
|
||||
LDA RETURN
|
||||
CMP #1 ; THEN POP STACKS UNTIL DONE
|
||||
BEQ :POP
|
||||
*
|
||||
JMP DOMOVE ; OTHERWISE, EXIT ROUTINE
|
||||
*
|
||||
********************************
|
||||
*
|
||||
:POP
|
||||
*
|
||||
GET81 XSTACK;SPTR
|
||||
LDA RETURN
|
||||
STA XX
|
||||
GET81 YSTACK;SPTR
|
||||
LDA RETURN
|
||||
STA YY
|
||||
DEC SPTR ; POP
|
||||
LDA SPTR
|
||||
CMP #1 ; IF STILL MORE ON STACK
|
||||
BCS :DOREPEAT
|
||||
JMP DISPMAZE ; OTHERWISE, FINISHED!
|
||||
*
|
||||
:DOREPEAT
|
||||
JMP CHECKALL
|
||||
*
|
||||
********************************
|
||||
*
|
||||
DOMOVE
|
||||
*
|
||||
** MOVE IN A RANDOM DIRECTION
|
||||
*
|
||||
JSR RAND8
|
||||
CMP #64 ; IF RND < 64
|
||||
BCC :MVDOWN
|
||||
CMP #128 ; ELSE IF RND < 128
|
||||
BCC :MVRIGHT
|
||||
CMP #192 ; ELSE IF RND < 192
|
||||
BCC :MVUP
|
||||
JMP :MVLEFT ; ELSE RND IS > 191
|
||||
*
|
||||
:MVDOWN
|
||||
GET82 VISITED;XX;YP1
|
||||
LDA RETURN
|
||||
CMP #0 ; IF NOT A WALL
|
||||
BEQ :DOWNGO
|
||||
JMP DOMOVE
|
||||
:DOWNGO ; THEN MOVE THERE
|
||||
PUT82 V0;SOUTHW;XX;YY
|
||||
INC YY
|
||||
JMP STAKPUSH
|
||||
:MVRIGHT
|
||||
GET82 VISITED;XP1;YY
|
||||
LDA RETURN
|
||||
CMP #0
|
||||
BEQ :RIGHTGO
|
||||
JMP DOMOVE
|
||||
:RIGHTGO
|
||||
PUT82 V0;WESTW;XP1;YY
|
||||
INC XX
|
||||
JMP STAKPUSH
|
||||
*
|
||||
:MVUP
|
||||
LDA YM1
|
||||
CMP #0
|
||||
BEQ :UPNO
|
||||
GET82 VISITED;XX;YM1
|
||||
LDA RETURN
|
||||
CMP #0
|
||||
BEQ :UPGO
|
||||
:UPNO
|
||||
JMP DOMOVE
|
||||
:UPGO
|
||||
PUT82 V0;SOUTHW;XX;YM1
|
||||
DEC YY
|
||||
JMP STAKPUSH
|
||||
*
|
||||
:MVLEFT
|
||||
GET82 VISITED;XM1;YY
|
||||
LDA RETURN
|
||||
CMP #0
|
||||
BEQ :LEFTGO
|
||||
JMP DOMOVE
|
||||
:LEFTGO
|
||||
PUT82 V0;WESTW;XX;YY
|
||||
DEC XX
|
||||
JMP STAKPUSH
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* DISPLAY THE MAZE *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
DISPMAZE
|
||||
*
|
||||
** SEND MAZE TO DISPLAY OUTPUT, FORMATTED
|
||||
*
|
||||
PRN "PRINTING...",8D
|
||||
PRN " ",8D
|
||||
LDA #1
|
||||
STA XX
|
||||
:XLOOP
|
||||
INC XX
|
||||
PRN "X"
|
||||
LDA XX
|
||||
CMP #XNUM
|
||||
BNE :XLOOP
|
||||
PRN " ",8D
|
||||
*
|
||||
LDA #2
|
||||
STA XX
|
||||
STA YY
|
||||
WLP
|
||||
*
|
||||
** IF WESTW(X,Y) == 0
|
||||
*
|
||||
GET82 WESTW;XX;YY
|
||||
LDA RETURN
|
||||
CMP #0
|
||||
BEQ NOWALLW ; THEN PRINT ...
|
||||
YESWALLW ; ELSE PRINT X..
|
||||
PRN "X "
|
||||
JMP CONTWLP
|
||||
NOWALLW
|
||||
PRN " "
|
||||
*
|
||||
CONTWLP
|
||||
INC XX
|
||||
LDA XX
|
||||
CMP #XMAX
|
||||
BEQ :ENDWLP
|
||||
JMP WLP
|
||||
*
|
||||
:ENDWLP
|
||||
PRN "X",8D ; NEXT LINE
|
||||
*
|
||||
LDA #2
|
||||
STA XX ; RECYCLING
|
||||
*
|
||||
** IF SOUTHW(X,Y) == 0
|
||||
*
|
||||
SLP
|
||||
GET82 SOUTHW;XX;YY
|
||||
LDA RETURN
|
||||
CMP #0
|
||||
BEQ NOSOUTH ; THEN PRINT X..
|
||||
YSOUTH ; ELSE PRINT XXX
|
||||
PRN "XX"
|
||||
JMP CONTSLP
|
||||
NOSOUTH
|
||||
PRN "X "
|
||||
CONTSLP
|
||||
INC XX
|
||||
LDA XX
|
||||
CMP #XMAX
|
||||
BEQ :ENDSLP
|
||||
JMP SLP
|
||||
:ENDSLP
|
||||
*
|
||||
PRN "X",8D
|
||||
*
|
||||
LDA #2
|
||||
STA XX
|
||||
INC YY
|
||||
LDA YY
|
||||
CMP #YMAX
|
||||
BEQ DISPEXIT
|
||||
JMP WLP
|
||||
*
|
||||
DISPEXIT
|
||||
*
|
||||
_WAIT
|
||||
JMP REENTRY
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* VARIABLES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
V0 DS 1 ; USED BECAUSE OF CURRENT
|
||||
V1 DS 1 ; ARRAY DIM LIMITATIONS
|
||||
*
|
||||
XX DS 1 ; CURRENT COLUMN
|
||||
YY DS 1 ; CURRENT ROW
|
||||
SPTR DS 1 ; ARRAY STACK POINTER
|
||||
XP1 DS 1 ; X PLUS ONE
|
||||
XM1 DS 1 ; X MINUS ONE
|
||||
YP1 DS 1 ; Y PLUS ONE
|
||||
YM1 DS 1 ; Y MINUS ONE
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* LOW-LEVEL ROUTINES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
PUT REQUIRED.LIB.MIN
|
||||
*
|
||||
** INDIVIDUAL SUBROUTINES
|
||||
*
|
||||
** ARRAYS
|
||||
*
|
||||
PUT ADIM81.SUB.MIN
|
||||
PUT ADIM82.SUB.MIN
|
||||
PUT AGET81.SUB.MIN
|
||||
PUT AGET82.SUB.MIN
|
||||
PUT APUT81.SUB.MIN
|
||||
PUT APUT82.SUB.MIN
|
||||
*
|
||||
** MATH
|
||||
*
|
||||
PUT RAND8.SUB.MIN
|
||||
PUT RANDB.SUB.MIN
|
||||
*
|
||||
** STDIO
|
||||
*
|
||||
PUT DPRINT.SUB.MIN
|
||||
PUT XPRINT.SUB.MIN
|
||||
*
|
|
@ -1,43 +0,0 @@
|
|||
MEMFILL
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :VALUE
|
||||
PLA
|
||||
STA :ARYSZ
|
||||
PLA
|
||||
STA :ARYSZ+1
|
||||
PLA
|
||||
STA ADDR1 ; ZERO PAGE POINTER
|
||||
PLA ; DEFINED IN
|
||||
STA ADDR1+1 ; DECS
|
||||
LDA :VALUE ; GET VAL FOR FILL
|
||||
LDX :ARYSZ+1 ; X=# OF PAGES TO DO
|
||||
BEQ :PARTPG ; BRANCH IF HIGHBYTE OF SZ = 0
|
||||
LDY #0
|
||||
:FULLPG
|
||||
STA (ADDR1),Y
|
||||
INY ; INC TO NEXT BYTE
|
||||
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGE
|
||||
INC ADDR1+1 ; ADVANCE TO NEXT PAGE
|
||||
DEX
|
||||
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGES
|
||||
:PARTPG
|
||||
LDX :ARYSZ ;GET # OF BYTES IN FINAL PAGE
|
||||
BEQ :EXIT ; BRANCH IF LOW BYTE = 0
|
||||
LDY #0
|
||||
:PARTLP
|
||||
STA (ADDR1),Y ; STORE VAL
|
||||
INY ; INCREMENT INDEX
|
||||
DEX ; DECREMENT COUNTER
|
||||
BNE :PARTLP ; BRANCH IF NOT DONE
|
||||
:EXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
:VALUE DS 1 ; FILL VALUE
|
||||
:ARYSZ DS 2 ; ARRAY SIZE
|
|
@ -1,101 +0,0 @@
|
|||
MEMMOVE
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :MVELEN
|
||||
PLA
|
||||
STA :MVELEN+1
|
||||
PLA
|
||||
STA ADDR2 ; ZERO PAGE POINTER
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA ADDR2 ;CALC DEST-SRC
|
||||
SEC
|
||||
SBC ADDR1
|
||||
TAX
|
||||
LDA ADDR2+1
|
||||
SBC ADDR1+1 ; MOD 64K AUTOMATIC
|
||||
; -- DISCARD CARRY
|
||||
TAY
|
||||
TXA ; CMP WITH # OF BYTES TO MOVE
|
||||
CMP :MVELEN
|
||||
TYA
|
||||
SBC :MVELEN+1
|
||||
BCS :DOLEFT ; BRANCH IF NO OVERLAP
|
||||
JSR :MVERHT
|
||||
JMP :EXIT
|
||||
:DOLEFT
|
||||
JSR :MVELEFT
|
||||
:EXIT
|
||||
JMP :MREXIT
|
||||
:MVELEFT
|
||||
LDY #0 ; ZERO INDEX
|
||||
LDX :MVELEN+1 ; X=# OF FULL PP TO MOVE
|
||||
BEQ :MLPART ; IF X=0, DO PARTIAL PAGE
|
||||
:MLPAGE
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y ;MOVE ONE BYTE
|
||||
INY ; NEXT BYTE
|
||||
BNE :MLPAGE ; CONT UNTIL 256B MOVED
|
||||
INC ADDR1+1 ; ADV TO NEXT SRC PAGE
|
||||
INC ADDR2+1 ; ADV NEXT DEST PAGE
|
||||
DEX ; DEC PAGE COUNT
|
||||
BNE :MLPAGE ; CONT UNTIL ALL FULL
|
||||
; PAGES ARE MOVED
|
||||
:MLPART
|
||||
LDX :MVELEN ; GET LENGTH OF LAST PAGE
|
||||
BEQ :MLEXIT ; BR IF LENGTH OF LAST
|
||||
; PAGE = 0
|
||||
; REG Y IS 0
|
||||
:MLLAST
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y ; MOVE BYTE
|
||||
INY ; NEXT BYTE
|
||||
DEX ; DEC COUNTER
|
||||
BNE :MLLAST ; CONT UNTIL LAST P DONE
|
||||
:MLEXIT
|
||||
JMP :MREXIT
|
||||
:MVERHT
|
||||
LDA :MVELEN+1
|
||||
CLC
|
||||
ADC ADDR1+1
|
||||
STA ADDR1+1 ;POINT TO LAST P OF SRC
|
||||
LDA :MVELEN+1
|
||||
CLC
|
||||
ADC ADDR2+1
|
||||
STA ADDR2+1 ; POINT TO LAST P OF DEST
|
||||
LDY :MVELEN ;GET LENGTH OF LAST PAGE
|
||||
BEQ :MRPAGE ; IF Y=0 DO THE FULL PAGES
|
||||
:MR0
|
||||
DEY ; BACK UP Y TO NEXT BYTE
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y ; MOVE BYTE
|
||||
CPY #0
|
||||
BNE :MR0 ; BR IF NOT DONE W LAST P
|
||||
:MRPAGE
|
||||
LDX :MVELEN+1 ; GET BYTE OF COUNT AS P CT
|
||||
BEQ :MREXIT ; BR IF HYBYTE = 0 (NO FULL P)
|
||||
:MR1
|
||||
DEC ADDR1+1 ; BACK UP TO PREV SRC PAGE
|
||||
DEC ADDR2+1 ; AND DEST
|
||||
:MR2
|
||||
DEY ; BACK UP Y TO NEXT BYTE
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y ; MOVE BYTE
|
||||
CPY #0
|
||||
BNE :MR2 ; BR IF NOT DONE W THIS PAGE
|
||||
DEX
|
||||
BNE :MR1 ; BR IF NOT ALL PAGES MOVED
|
||||
:MREXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
:MVELEN DS 2
|
|
@ -1,86 +0,0 @@
|
|||
MEMSWAP
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :LENGTH
|
||||
PLA
|
||||
STA ADDR1
|
||||
STA :A1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
STA :A1+1
|
||||
PLA
|
||||
STA ADDR2
|
||||
STA :A2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
STA :A2+1
|
||||
LDA ERRCTRL
|
||||
CMP #1
|
||||
BEQ :CHKERR
|
||||
JMP :ERREND
|
||||
:CHKERR
|
||||
LDA ADDR2+1 ; IF #>A2 => #>A1
|
||||
CMP ADDR1+1
|
||||
BCS :CHKLO ; CHECK LOW BYTES
|
||||
JMP :A1GTA2 ; ELSE, A1 > A2
|
||||
:CHKLO
|
||||
LDA ADDR2
|
||||
CMP ADDR1
|
||||
BCS :A2GTA1
|
||||
JMP :A1GTA2
|
||||
:A2GTA1
|
||||
LDA ADDR2 ;CALC DEST-SRC
|
||||
SEC
|
||||
SBC ADDR1
|
||||
TAX
|
||||
LDA ADDR2+1
|
||||
SBC ADDR1+1 ; MOD 64K AUTOMATIC
|
||||
; -- DISCARD CARRY
|
||||
TAY
|
||||
TXA ; CMP WITH # OF BYTES TO MOVE
|
||||
CMP :LENGTH
|
||||
TYA
|
||||
SBC :LENGTH+1
|
||||
BCS :ERREND ; BRANCH IF NO OVERLAP
|
||||
JMP :OVF
|
||||
:A1GTA2
|
||||
LDA ADDR1
|
||||
SEC
|
||||
SBC ADDR2
|
||||
TAX
|
||||
LDA ADDR1+1
|
||||
SBC ADDR2+1
|
||||
TAY
|
||||
TXA
|
||||
CMP :LENGTH
|
||||
TYA
|
||||
SBC :LENGTH+1
|
||||
BCS :ERREND
|
||||
:OVF
|
||||
_ERR :E_SID;:E_OVF;:E_DUMP;:LENGTH;#6
|
||||
:ERREND
|
||||
LDY #255 ; COUNTER
|
||||
:LP
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
TAX ; X CONTAINS ADDR1 VAL
|
||||
LDA (ADDR2),Y ; A CONTAINS ADDR2 VAL
|
||||
STA (ADDR1),Y
|
||||
TXA
|
||||
STA (ADDR2),Y
|
||||
CPY :LENGTH
|
||||
BNE :LP
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
:LENGTH DS 2
|
||||
:A1 DS 2
|
||||
:A2 DS 2
|
||||
:E_SID ASC "MEMSWAP (MSWAP MACRO)",00
|
||||
:E_DUMP ASC "DUMPING LENGTH (2) A1(2) A2(2)",00
|
||||
:E_OVF ASC "OVERFLOW! ADDRESSES OVERLAP.",00
|
|
@ -1,59 +0,0 @@
|
|||
MULT16
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :MLIER
|
||||
PLA
|
||||
STA :MLIER+1
|
||||
PLA
|
||||
STA :MCAND
|
||||
PLA
|
||||
STA :MCAND+1
|
||||
LDA #0
|
||||
STA :HPROD ; ZERO HIGH WORD
|
||||
STA :HPROD+1
|
||||
LDX #17 ; # OF BITS IN MPLIER
|
||||
; PLUS 1. EXTRA LOOP IS
|
||||
; TO MOVE LAST CARRY INTO
|
||||
; THE PRODUCT.
|
||||
CLC ; CLEAR CARRY FOR 1ST TIME
|
||||
; THROUGH LOOP.
|
||||
:MULLP
|
||||
ROR :HPROD+1
|
||||
ROR :HPROD
|
||||
ROR :MLIER+1
|
||||
ROR :MLIER
|
||||
BCC :DECCNT ; BR IF NEXT BIT OF
|
||||
CLC ; NEXT BIT=1 SO ADD MCAND
|
||||
LDA :MCAND
|
||||
ADC :HPROD
|
||||
STA :HPROD
|
||||
LDA :MCAND+1
|
||||
ADC :HPROD+1
|
||||
STA :HPROD+1 ; CARRY = OVERFLOW
|
||||
:DECCNT
|
||||
DEX
|
||||
BNE :MULLP ; CONTINUE UNTIL DONE
|
||||
LDY :HPROD ; LOW BYTE OF HIGH WORD
|
||||
LDX :HPROD+1 ; HIGH BYTE OF HIGH WORD
|
||||
LDA :MLIER+1
|
||||
TAX
|
||||
STX RETURN+1
|
||||
LDA :MLIER
|
||||
TAY
|
||||
STY RETURN
|
||||
LDA :HPROD
|
||||
STA RETURN+2
|
||||
LDA #2
|
||||
STA RETLEN
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDA :HPROD ;24BIT
|
||||
RTS
|
||||
:MCAND DS 3
|
||||
:MLIER DS 3
|
||||
:HPROD DS 2
|
|
@ -1,97 +0,0 @@
|
|||
NUM2STR
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :VALSTR
|
||||
PLA
|
||||
STA :VALSTR+1
|
||||
STA :NGFLAG
|
||||
BPL :GETBP ; BR IF VAL IS POS
|
||||
LDA #0
|
||||
SEC
|
||||
SBC :VALSTR
|
||||
STA :VALSTR
|
||||
LDA #0
|
||||
SBC :VALSTR+1
|
||||
STA :VALSTR+1
|
||||
:GETBP
|
||||
LDA #<RETURN
|
||||
STA ADDR1 ; ADDRESS TO STORE STRING
|
||||
LDA #>RETURN+1
|
||||
STA ADDR1+1
|
||||
LDA #0 ; SET BUFFER TO EMPTY
|
||||
LDY #0
|
||||
STA (ADDR1),Y ; BUFFER(0) = 0
|
||||
:CNVERT
|
||||
LDA #0
|
||||
STA :MOD10
|
||||
STA :MOD10+1
|
||||
LDX #16
|
||||
CLC ; CLEAR CARRY
|
||||
:DVLOOP
|
||||
ROL :VALSTR ; SHIFT CARRY INTO DIVBIT 0
|
||||
ROL :VALSTR+1 ; WHICH WILL BE THE QUOTIENT
|
||||
ROL :MOD10 ; + SHIFT DIV AT SAME TIME
|
||||
ROL :MOD10+1
|
||||
SEC
|
||||
LDA :MOD10
|
||||
SBC #10
|
||||
TAY ; SAVE LOWB IN REG Y
|
||||
LDA :MOD10+1
|
||||
SBC #0 ; SUBTRACT CARRY
|
||||
BCC :DECCNT ; BR IF DEND < DIVISOR
|
||||
STY :MOD10 ; ELSE
|
||||
STA :MOD10+1 ; NXT BIT OF Q IS A ONE AND SET
|
||||
; DIVIDEND = DEND - DIVISOR
|
||||
:DECCNT
|
||||
DEX
|
||||
BNE :DVLOOP
|
||||
ROL :VALSTR ; SHIFT IN LAST CARRY FOR Q
|
||||
ROL :VALSTR+1
|
||||
:CONCH
|
||||
LDA :MOD10
|
||||
CLC
|
||||
ADC #$B0
|
||||
JSR :CONCAT
|
||||
LDA :VALSTR
|
||||
ORA :VALSTR+1
|
||||
BNE :CNVERT ; BR IF VALUE != 0
|
||||
:EXIT
|
||||
LDA :NGFLAG
|
||||
BPL :POS ; BR IF ORIG VAL POS
|
||||
LDA #173 ; ELSE
|
||||
JSR :CONCAT ; PUT A MINUS SIGN IN FRONT
|
||||
:POS
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS ; RETURN
|
||||
:CONCAT
|
||||
PHA ; SAVE CHAR ON STACK
|
||||
LDY #0
|
||||
LDA (ADDR1),Y ; GET CURRENT LENGTH
|
||||
TAY
|
||||
BEQ :EXITMR ; BR IF LENGTH=0
|
||||
:MVELP
|
||||
LDA (ADDR1),Y ; GET NEXT CHAR
|
||||
INY
|
||||
STA (ADDR1),Y ; STORE IT
|
||||
DEY
|
||||
DEY
|
||||
BNE :MVELP ; CONT UNTIL DONE
|
||||
:EXITMR
|
||||
PLA ; GET CHAR BACK FROM STACK
|
||||
LDY #1
|
||||
STA (ADDR1),Y ; STORE THE CHAR
|
||||
LDY #0
|
||||
LDA (ADDR1),Y ; GET LENGTH BYTE
|
||||
CLC
|
||||
ADC #1 ; INC LENGTH BY ONE
|
||||
STA (ADDR1),Y ; UPDATE LENGTH
|
||||
RTS
|
||||
:NGFLAG DS 1
|
||||
:VALSTR DS 2
|
||||
:MOD10 DS 2
|
|
@ -1,34 +0,0 @@
|
|||
RAND16
|
||||
LDA RNDL
|
||||
STA :SEED
|
||||
LDA RNDH
|
||||
STA :SEED+1
|
||||
LDA :SEED
|
||||
BEQ :LOW0
|
||||
ASL :SEED
|
||||
LDA :SEED+1
|
||||
ROL
|
||||
BCC :NOEOR
|
||||
:DOEOR ; HIGH BYTE IN A
|
||||
EOR #>$0369
|
||||
STA :SEED+1
|
||||
LDA :SEED
|
||||
EOR #<$0369
|
||||
STA :SEED
|
||||
JMP :EXIT
|
||||
:LOW0
|
||||
LDA :SEED+1
|
||||
BEQ :DOEOR
|
||||
ASL
|
||||
BEQ :NOEOR
|
||||
BCS :DOEOR
|
||||
:NOEOR
|
||||
STA :SEED+1
|
||||
:EXIT LDX :SEED+1
|
||||
LDY :SEED
|
||||
STY RETURN
|
||||
STX RETURN+1
|
||||
LDA #2
|
||||
STA RETLEN
|
||||
RTS
|
||||
:SEED DS 2
|
|
@ -1,94 +0,0 @@
|
|||
_ISLIT MAC
|
||||
IF #=]1 ; IF ]1 IS A LITERAL
|
||||
LDA ]1/$100 ; GET HI
|
||||
PHA
|
||||
LDA ]1 ; GET LO
|
||||
PHA
|
||||
ELSE ; ]1 IS ADDRESS
|
||||
LDA ]1+1 ; SO GET HIGH VAL FROM ADDR
|
||||
PHA
|
||||
LDA ]1 ; THEN LO VAL
|
||||
PHA
|
||||
FIN
|
||||
<<<
|
||||
_ISSTR MAC
|
||||
IF "=]1 ; IF ]1 IS A STRING
|
||||
JMP STRCONT
|
||||
]STRTMP STR ]1
|
||||
STRCONT
|
||||
LDY #0
|
||||
LDA ]STRTMP
|
||||
STA PARLEN
|
||||
STA PARAM
|
||||
]STRLP1
|
||||
INY
|
||||
LDA ]STRTMP,Y
|
||||
STA PARAM,Y
|
||||
CPY PARLEN
|
||||
BNE ]STRLP1
|
||||
LDA #>PARAM ; GET HI
|
||||
PHA
|
||||
LDA #<PARAM ; GET LO
|
||||
PHA
|
||||
ELSE ; ]1 IS ADDRESS
|
||||
LDA #>]1 ; SO GET HIBYTE OF ADDR
|
||||
PHA
|
||||
LDA #<]1 ; THEN LOBYTE
|
||||
PHA
|
||||
FIN
|
||||
<<<
|
||||
_GRET MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
JSR __GETRET
|
||||
<<<
|
||||
_SPAR MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
JSR __SETPARM
|
||||
<<<
|
||||
_DUMP MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA ]2
|
||||
PHA
|
||||
JSR __DUMP
|
||||
<<<
|
||||
_PRNT MAC
|
||||
JSR __P
|
||||
ASC ]1
|
||||
HEX 00
|
||||
<<<
|
||||
_WAIT MAC
|
||||
JSR __W
|
||||
<<<
|
||||
_RDUMP MAC
|
||||
JSR __RDMP
|
||||
<<<
|
||||
_ERR MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA #>]2
|
||||
PHA
|
||||
LDA #<]2
|
||||
PHA
|
||||
LDA #>]3
|
||||
PHA
|
||||
LDA #<]3
|
||||
PHA
|
||||
LDA #>]4
|
||||
PHA
|
||||
LDA #<]4
|
||||
PHA
|
||||
LDA ]5
|
||||
PHA
|
||||
JSR __ERR
|
||||
<<<
|
|
@ -1,27 +0,0 @@
|
|||
SINPUT
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
LDX #$00
|
||||
JSR GETLN
|
||||
STX :STRLEN ; STORE STR LENGTH
|
||||
CPX #0
|
||||
BEQ :EXIT
|
||||
:INP_CLR
|
||||
LDY #0
|
||||
LDA :STRLEN ; LENGTH OF STRING
|
||||
STA RETLEN,Y ; PUT LENGTH
|
||||
:LOOP
|
||||
LDA KEYBUFF,Y ; PUT STR INTO NEW LOC
|
||||
STA RETURN,Y
|
||||
INY
|
||||
CPY :STRLEN ; IF Y < STR LENGTH
|
||||
BNE :LOOP ; LOOP; ELSE, CONTINUE
|
||||
:EXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
:STRLEN DS 1
|
|
@ -1,118 +0,0 @@
|
|||
STR2NUM
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA ADDR1 ; ADRESS OF STRING
|
||||
PLA ; TO CNVERT
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
TAX ; GET LENGITH; TO REGX
|
||||
LDA #1
|
||||
STA :NINDEX ; INDEX = 1
|
||||
LDA #0
|
||||
STA :NACCUM ; ACCUM = 0
|
||||
STA :NACCUM+1
|
||||
STA :SNGFLAG ; SIGN IS POSITIVE
|
||||
TXA
|
||||
BNE :INIT1 ; EXIT WITH ACCUM = 0
|
||||
; IF BUFFER IS EMPTY
|
||||
JMP :EREXIT ; ERROR EXIT IF NOTHING
|
||||
; IN BUFFER
|
||||
:INIT1
|
||||
LDY :NINDEX
|
||||
LDA (ADDR1),Y
|
||||
CMP #173
|
||||
BNE :PLUS ; BR IF NOT -
|
||||
LDA #$0FF
|
||||
STA :SNGFLAG ; ELSE SIGN IS NEGATIVE
|
||||
INC :NINDEX
|
||||
DEX ; DECREMENT COUNT
|
||||
BEQ :EREXIT ; ERROR EXIT IF ONLY
|
||||
; - IN BUFFER
|
||||
JMP :CNVERT
|
||||
:PLUS
|
||||
CMP #'+'
|
||||
BNE :CHKDIG ; START CONVERSION IF 1ST
|
||||
INC :NINDEX
|
||||
DEX ; DEC COUNT; IGNORE + SIGN
|
||||
BEQ :EREXIT ; ERROR EXIT IF ONLY
|
||||
; + IN THE BUFFER
|
||||
:CNVERT
|
||||
LDY :NINDEX
|
||||
LDA (ADDR1),Y
|
||||
; GET NEXT CHAR
|
||||
:CHKDIG
|
||||
CMP #$B0 ; "0"
|
||||
BMI :EREXIT ; ERROR IF NOT A NUMERAL
|
||||
CMP #$BA ; '9'+1; TECHNICALLY :
|
||||
BPL :EREXIT ; ERR IF > 9 (NOT NUMERAL)
|
||||
PHA ; PUSH DIGIT TO STACK
|
||||
ASL :NACCUM
|
||||
ROL :NACCUM+1 ; TIMES 2
|
||||
LDA :NACCUM
|
||||
LDY :NACCUM+1 ; SAVE ACCUM * 2
|
||||
ASL :NACCUM
|
||||
ROL :NACCUM+1
|
||||
ASL :NACCUM
|
||||
ROL :NACCUM+1 ; TIMES 8
|
||||
CLC
|
||||
ADC :NACCUM ; SUM WITH * 2
|
||||
STA :NACCUM
|
||||
TYA
|
||||
ADC :NACCUM+1
|
||||
STA :NACCUM+1 ; ACCUM=ACCUM * 10
|
||||
PLA ; GET THE DIGIT NACK
|
||||
SEC
|
||||
SBC #$B0
|
||||
CLC ; CONVERT STR TO BIN
|
||||
ADC :NACCUM
|
||||
STA :NACCUM
|
||||
BCC :D2B1 ; BRANCH IF NO CARRY TO HBYTE
|
||||
INC :NACCUM+1 ; ELSE INC HIGH BYTE
|
||||
:D2B1
|
||||
INC :NINDEX ;INC TO NEXT CHARACTER
|
||||
DEX
|
||||
BNE :CNVERT ; CONTINUE CONVERSION
|
||||
LDA :SNGFLAG
|
||||
BPL :OKEXIT ; BR IF VAL IS POSITIVE
|
||||
LDA #0 ; ELSE REPLACE WITH -RESULT
|
||||
SEC
|
||||
SBC :NACCUM
|
||||
STA :NACCUM
|
||||
LDA #0
|
||||
SBC :NACCUM+1
|
||||
STA :NACCUM+1
|
||||
:OKEXIT
|
||||
CLC
|
||||
BCC :EXIT
|
||||
:EREXIT
|
||||
SEC
|
||||
LDA ERRCTRL
|
||||
CMP #1
|
||||
BEQ :CHKERR
|
||||
JMP :ERREND
|
||||
:CHKERR
|
||||
_ERR :E_SID;:E_MSG;:E_DUMP;:NACCUM;#4
|
||||
:ERREND
|
||||
:EXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDX :NACCUM+1
|
||||
LDY :NACCUM
|
||||
STY RETURN
|
||||
STX RETURN+1
|
||||
LDA #2
|
||||
STA RETLEN
|
||||
LDA :NINDEX
|
||||
RTS
|
||||
:NACCUM DS 2
|
||||
:SNGFLAG DS 1
|
||||
:NINDEX DS 1
|
||||
:E_SID ASC "STR2NUM (S2N MACRO)",00
|
||||
:E_MSG ASC "ERR! NO DATA, OR NOT A NUMERAL VALUE",00
|
||||
:E_DUMP ASC "DUMPING :NACCUM(2) :SNGFLAG(1) :NINDEX(1)",00
|
|
@ -1,94 +0,0 @@
|
|||
STRCAT
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :MLEN ; MAXIMUM CONCAT LENGTH
|
||||
PLA
|
||||
STA ADDR2 ; STRING 1 ADDRESS
|
||||
PLA ; IN ZERO PAGE
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1 ; STRING 2 ADDRESS
|
||||
PLA ; IN ZERO PAGE
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y ; GET CUR LGTH OF S1, STORE
|
||||
STA :S1LEN
|
||||
STA :S1IND
|
||||
INC :S1IND ; START CONCAT AT END OF S1
|
||||
LDA (ADDR2),Y ; GET LENGTH OF S2, STORE
|
||||
STA :S2LEN
|
||||
LDA #1
|
||||
STA :S2IND ; START CONCAT AT BEGIN OF S2
|
||||
LDA :S2LEN ; GET S2 LENGTH
|
||||
CLC
|
||||
ADC :S1LEN ; ADD TO LENGTH OF S1
|
||||
STA :S3LEN ; STORE CONCAT LENGTH
|
||||
BCS :TOOLONG ; BR IF LENGTH > 255
|
||||
CMP :MLEN ; CHECK AGAINST MAX LENGTH
|
||||
BEQ :LENOK ; BR IF LENGTH < MAX
|
||||
BCC :LENOK
|
||||
:TOOLONG
|
||||
LDA #$0FF
|
||||
STA :SOVF ; INDICATE OVERFLOW
|
||||
LDA :MLEN
|
||||
SEC
|
||||
SBC :S1LEN
|
||||
BCC :EXIT
|
||||
STA :SCNT ; ORIG STR WAS TOO LONG
|
||||
LDA :MLEN
|
||||
STA :S1LEN ; SET STR1 LENGTH TO MAX
|
||||
JMP :DOCAT
|
||||
:LENOK
|
||||
STA :S1LEN
|
||||
LDA #0 ; SAVE SUM OF 2 LENGTHS
|
||||
STA :SOVF ; INDICATE NO OVERFLOW
|
||||
LDA :S2LEN
|
||||
STA :SCNT ; COUNT = LENGTH OF STRING 2
|
||||
:DOCAT
|
||||
LDA :SCNT
|
||||
BEQ :EXIT ; EXIT IF NO BYTES LEFT
|
||||
:CATLP
|
||||
LDY :S2IND
|
||||
LDA (ADDR2),Y ; GET NEXT BYTE FROM S2
|
||||
LDY :S1IND
|
||||
STA (ADDR1),Y ; MOVE IT TO END OF STR 1
|
||||
INC :S1IND ;INC STRING 1 INDEX
|
||||
INC :S2IND ; INC STRING 2 INDEX
|
||||
DEC :SCNT ; DECREMENT COUNTER
|
||||
BNE :CATLP ; CONT UNTIL __SCNT = 0
|
||||
:EXIT
|
||||
LDA :S1LEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
LDA :SOVF
|
||||
ROR A
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY #0
|
||||
LDA (ADDR1),Y ; LENGTH OF STRING
|
||||
STA RETLEN
|
||||
LDA #1
|
||||
:RLP
|
||||
LDA (ADDR1),Y
|
||||
STA RETURN,Y
|
||||
CPY RETLEN
|
||||
INY
|
||||
BNE :RLP
|
||||
LDA RETLEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
LDX :S3LEN ; RETURN FINAL LENGTH
|
||||
RTS
|
||||
:S3LEN DS 1
|
||||
:S1LEN DS 1
|
||||
:S1IND DS 1
|
||||
:S2LEN DS 1
|
||||
:S2IND DS 1
|
||||
:MLEN DS 1
|
||||
:SCNT DS 1
|
||||
:SOVF DS 1
|
|
@ -1,47 +0,0 @@
|
|||
STRCMP
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y ; GET LENGTH OF STRING 1
|
||||
CMP (ADDR2),Y
|
||||
BCC :BEGCMP ; IF STRING 2 IS SHORTER THEN
|
||||
LDA (ADDR2),Y ; USE ITS LENGTH INSTEAD
|
||||
:BEGCMP
|
||||
TAX ; X IS LENGTH OF SHORTER STRING
|
||||
BEQ :TSTLEN ; BR IF LENGTH IS 0
|
||||
LDY #1 ; POINT AT FIRST CHAR OF STRINGS
|
||||
:CMPLP
|
||||
LDA (ADDR1),Y
|
||||
CMP (ADDR2),Y
|
||||
BNE :EXIT ; BR IF CHARS NOT EQUAL
|
||||
; Z,C WILL BE PROPERLY SET
|
||||
; OR CLEARED
|
||||
; ELSE
|
||||
INY ; NEXT CHAR
|
||||
DEX ; DECREMENT COUNTER
|
||||
BNE :CMPLP ; CONTINUE UNTIL ALL BYTES PAIRED
|
||||
:TSTLEN
|
||||
LDY #0 ; COMPARE LENGTHS
|
||||
LDA (ADDR1),Y
|
||||
CMP (ADDR2),Y ; SET OR CLEAR THE FLAGS
|
||||
:EXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY #0
|
||||
LDA (ADDR1),Y ; GET STR1 LENGTH
|
||||
TAX ; RETURN IN X
|
||||
LDA (ADDR2),Y ; STR2 LENGTH
|
||||
TAY ; RETURN IN Y
|
||||
RTS
|
|
@ -1,65 +0,0 @@
|
|||
SCMP MAC
|
||||
_ISSTR ]1
|
||||
_ISSTR ]2
|
||||
JSR STRCMP
|
||||
<<<
|
||||
SCAT MAC
|
||||
_ISSTR ]1
|
||||
_ISSTR ]2
|
||||
LDA ]3 ; MAX SIZE; BYTE
|
||||
PHA
|
||||
JSR STRCAT
|
||||
<<<
|
||||
SPRN MAC
|
||||
LDA #>]1 ; ADDRESS OF STRING
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
JSR PRNSTR
|
||||
<<<
|
||||
TOSTR MAC
|
||||
_ISLIT ]1
|
||||
JSR NUM2STR
|
||||
<<<
|
||||
TONUM MAC
|
||||
_ISSTR ]1
|
||||
JSR STR2NUM
|
||||
<<<
|
||||
SPOS MAC
|
||||
_ISSTR ]1
|
||||
_ISSTR ]2
|
||||
JSR SUBPOS
|
||||
<<<
|
||||
SCPY MAC
|
||||
_ISSTR ]1
|
||||
LDA ]2 ; STARTING INDEX
|
||||
PHA
|
||||
LDA ]3 ; SUBSTRING LENGTH
|
||||
PHA
|
||||
LDA ]4 ; MAX LENGTH OF SUBSTR
|
||||
PHA
|
||||
JSR SUBCOPY
|
||||
<<<
|
||||
SDEL MAC
|
||||
LDA #>]1 ; STRING ADDRESS
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA ]2 ; INDEX BYTE
|
||||
PHA
|
||||
LDA ]3 ; LENGTH
|
||||
PHA
|
||||
JSR SUBDEL
|
||||
<<<
|
||||
SINS MAC
|
||||
LDA #>]1 ; PARENT STRING
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA ]2 ; INDEX
|
||||
PHA
|
||||
LDA ]3 ; MAXIMUM LENGTH
|
||||
PHA
|
||||
_ISSTR ]4
|
||||
JSR SUBINS
|
||||
<<<
|
|
@ -1,99 +0,0 @@
|
|||
SUBCOPY
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :MLEN
|
||||
PLA
|
||||
STA :SCNT
|
||||
STA RETLEN
|
||||
PLA
|
||||
STA :SINDEX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA #<RETURN
|
||||
STA ADDR2
|
||||
LDA #>RETURN
|
||||
STA ADDR2+1
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDA #0
|
||||
STA :S2LEN ; DESTINATION LENGTH = 0
|
||||
STA :SCERR ; ASSUME NO ERRORS
|
||||
LDA :SCNT
|
||||
BEQ :OKEXIT ; BR IF 0 BYTES TO COPY,
|
||||
LDA :MLEN
|
||||
BEQ :EREXIT ; ERROR EXIT IF SUBSTR HAS
|
||||
LDA :SINDEX
|
||||
BEQ :EREXIT ; ERROR EXIT IF START IDX = 0
|
||||
LDY #0
|
||||
LDA (ADDR1),Y ;
|
||||
STA :S1LEN ; GET LENGTH OF SOURCE STRING
|
||||
CMP :SINDEX ; COMPARE TO STARTING INDEX
|
||||
BCC :EREXIT ; ERROR EXIT IF INDEX TOO BIG
|
||||
LDA :SINDEX
|
||||
CLC
|
||||
ADC :SCNT
|
||||
BCS :RECALC
|
||||
TAX ; BR IF INDEX + COUNT > 255
|
||||
DEX
|
||||
CPX :S1LEN
|
||||
BCC :CNT10K ; BR IF IND + CNT - 1 < S1LEN
|
||||
BEQ :CNT10K ; OR EQUAL
|
||||
:RECALC
|
||||
LDA :S1LEN ; RECALCULATE COUNT
|
||||
SEC
|
||||
SBC :SINDEX
|
||||
STA :SCNT
|
||||
INC :SCNT ; CNT = S1LEN - IND + 1
|
||||
LDA #$0FF
|
||||
STA :SCERR ; INDICATE TRUNCATION
|
||||
:CNT10K
|
||||
LDA :SCNT
|
||||
CMP :MLEN ; IF CNT > M SUBSTR LEN ?
|
||||
BCC :CNT20K ; BR IF CNT < MAXLEN
|
||||
BEQ :CNT20K ; BR IF CNT = MAXLEN
|
||||
LDA :MLEN
|
||||
STA :SCNT ; ELSE CNT = MAXLEN
|
||||
LDA #$0FF
|
||||
STA :SCERR ; INDICATE DEST STR OVERFLOW
|
||||
:CNT20K
|
||||
LDX :SCNT ; REG X WILL BE COUNTER
|
||||
BEQ :EREXIT ; ERR IF 0
|
||||
LDA #1 ; START WITH 1ST CHAR IN DEST
|
||||
STA :S2LEN ; RUNNING DEST INDEX
|
||||
; __SINDEX IS SRC INDEX
|
||||
:MVLP
|
||||
LDY :SINDEX
|
||||
LDA (ADDR1),Y ; GET NEXT SRC CHAR
|
||||
LDY :S2LEN
|
||||
STA (ADDR2),Y ; MOVE NEXT CHAR TO DEST
|
||||
INC :SINDEX ; INC SRC INDEX
|
||||
INC :S2LEN ; INC DEST INDEX
|
||||
DEX ; DECREMENT COUNTER
|
||||
BNE :MVLP ; CONT UNTIL CNT = 0
|
||||
DEC :S2LEN ; SUBSTR LEN=FINAL DEST IND-1
|
||||
LDA :SCERR ; CHECK FOR ANY ERRORS
|
||||
BNE :EREXIT ; BR IF STR TRUNCATED OR OVERFLOW
|
||||
:OKEXIT
|
||||
CLC
|
||||
BCC :EXIT
|
||||
:EREXIT
|
||||
SEC
|
||||
:EXIT
|
||||
LDA :S2LEN
|
||||
LDY #0
|
||||
STA (ADDR2),Y
|
||||
STA RETLEN
|
||||
RTS
|
||||
:S1LEN DS 1
|
||||
:S2LEN DS 1
|
||||
:MLEN DS 1
|
||||
:SCNT DS 1
|
||||
:SINDEX DS 1
|
||||
:SCERR DS 1
|
|
@ -1,120 +0,0 @@
|
|||
SUBINS
|
||||
PLA
|
||||
TAY
|
||||
PLA
|
||||
TAX
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA :MLEN
|
||||
PLA
|
||||
STA :SINDEX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
TXA
|
||||
PHA
|
||||
TYA
|
||||
PHA
|
||||
LDA #0
|
||||
STA :SCERR ; ASSUME NO ERR WILL BE FOUND
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA :S1LEN ; GET LENGTH OF STRING
|
||||
LDA (ADDR2),Y
|
||||
STA :S2LEN ; GET LENGTH OF SUB
|
||||
BNE :IDX0
|
||||
JMP :OKEXIT ; EXIT OF NO INSERT/ERR
|
||||
:IDX0
|
||||
LDA :SINDEX
|
||||
BNE :CHKLEN ; BR OF INDEX NOT 0
|
||||
JMP :EREXIT ; ELSE ERROR EXIT
|
||||
:CHKLEN
|
||||
LDA :S2LEN ; GET SUBSTR LENGTH
|
||||
CLC
|
||||
ADC :S1LEN
|
||||
BCS :TRUNC ;TRUN IF S1+S2 LENGTH > 255
|
||||
CMP :MLEN ;
|
||||
BCC :IDXLEN ; BR IF S1+S2 LEN < MAX LENGTH
|
||||
BEQ :IDXLEN ; BR IF EQUAL
|
||||
:TRUNC
|
||||
LDA :MLEN ; SUBSTR LEN = MLEN - STR LEN
|
||||
SEC
|
||||
SBC :S1LEN
|
||||
BCC :EREXIT
|
||||
BEQ :EREXIT ; ERR IF MLEN < STR LEN OR 0
|
||||
STA :S2LEN
|
||||
LDA #$0FF
|
||||
STA :SCERR ; INDICATE SUBSTR WAS TRUNCATED
|
||||
:IDXLEN
|
||||
LDA :S1LEN
|
||||
CMP :SINDEX ;
|
||||
BCS :LENOK ; BR IF INDEX WITHIN STR
|
||||
LDX :S1LEN ; ELSE CONCAT SUB AT END OF STR
|
||||
INX
|
||||
STX :SINDEX ; START RIGHT AFTER END OF STR
|
||||
LDA #$0FF
|
||||
STA :SCERR ; INDICATE ERR IN INSERT
|
||||
LDA :S1LEN
|
||||
CLC
|
||||
ADC :S2LEN
|
||||
STA :S1LEN ; ADD LENGTHS TOGETHER
|
||||
JMP :MVESUB ; PERFORM MOVE, NOTHING ELSE TODO
|
||||
:LENOK
|
||||
LDA :S1LEN
|
||||
SEC
|
||||
SBC :SINDEX
|
||||
TAX
|
||||
INX ; X= NUM OF CHARS TO MOV
|
||||
LDA :S1LEN
|
||||
STA :SIDX ; SRC ENDS AT ORIG STR END
|
||||
CLC
|
||||
ADC :S2LEN
|
||||
STA :SBIDX ; DEST ENDS FURTHER BY SUB LEN
|
||||
STA :S1LEN ; SET NEW LENGTH TO THIS ALSO
|
||||
:OPNLP
|
||||
LDY :SIDX
|
||||
LDA (ADDR1),Y
|
||||
LDY :SBIDX
|
||||
STA (ADDR1),Y ; MOVE IT UP IN MEM
|
||||
DEC :SIDX
|
||||
DEC :SBIDX ; DE DEST IDX, COUNTER
|
||||
DEX
|
||||
BNE :OPNLP ; CONT UNTIL COUNTER = 0
|
||||
:MVESUB
|
||||
LDA #1
|
||||
STA :SIDX
|
||||
; START AT INDEX IN THE STRING
|
||||
LDX :S2LEN ; X = NUM OF CHARS TO MOVE
|
||||
:MVELP
|
||||
LDY :SIDX
|
||||
LDA (ADDR2),Y ; GET NEXT CHAR
|
||||
LDY :SINDEX
|
||||
STA (ADDR1),Y
|
||||
INC :SIDX ; INC SUBSTR INDEX
|
||||
INC :SINDEX ; INC STR INDEX
|
||||
DEX ; DEC COUNTER
|
||||
BNE :MVELP ; CONT UNTIL COUNTER = 0
|
||||
LDA :SCERR ; GET ERROR FLAG
|
||||
BNE :EREXIT ; BR IF SUBSTR WAS TRUNCED
|
||||
:OKEXIT
|
||||
CLC
|
||||
BCC :EXIT
|
||||
:EREXIT
|
||||
SEC ; ERROR EXIT
|
||||
:EXIT
|
||||
LDA :S1LEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
RTS
|
||||
:S1LEN DS 1
|
||||
:S2LEN DS 1
|
||||
:SUBLEN DS 1
|
||||
:MLEN DS 1
|
||||
:SINDEX DS 1
|
||||
:SIDX DS 1
|
||||
:SBIDX DS 1
|
||||
:SCERR DS 1
|
|
@ -1,78 +0,0 @@
|
|||
SUBPOS
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
:POS
|
||||
LDY #0
|
||||
LDA (ADDR1),Y ; GET LENGTH OF STRING
|
||||
BEQ :NOTFND ; EXIT IF LENGTH = 0
|
||||
STA :SLEN
|
||||
LDA (ADDR2),Y ; GET SUBSTR LENGTH
|
||||
BEQ :NOTFND ; EXIT IF SUB LENGTH = 0
|
||||
STA :SUBLEN
|
||||
LDA :SUBLEN
|
||||
CMP :SLEN
|
||||
BEQ :LENOK
|
||||
BCS :NOTFND ; CANNOT FIND SUBSTR IF
|
||||
:LENOK
|
||||
LDA #1
|
||||
STA :SINDEX ; START LOOKING AT FIRST
|
||||
; CHARACTER OF STRING
|
||||
LDA :SLEN ; CONT UNTIL REMAINING STR
|
||||
; TOO SHORT
|
||||
SEC ; COUNT=STR LEN - SUB LEN+1
|
||||
SBC :SUBLEN
|
||||
STA :SCOUNT
|
||||
INC :SCOUNT
|
||||
:SLP1
|
||||
LDA :SINDEX
|
||||
STA :SIDX ; START STR AT INDEX
|
||||
LDA #1
|
||||
STA :SUBIDX ; START SUB IND AT 1
|
||||
:CMPLP
|
||||
LDY :SIDX
|
||||
LDA (ADDR1),Y ; GET NEXT CHAR FROM STR
|
||||
LDY :SUBIDX
|
||||
CMP (ADDR2),Y ; COMPARE TO NEXT SUB CHAR
|
||||
BNE :SLP2 ; BR IF SUB NOT HERE
|
||||
LDY :SUBIDX
|
||||
CPY :SUBLEN ; TEST IF WE ARE DONE
|
||||
BEQ :FOUND ; BR IF ALL CHARS WERE EQUAL
|
||||
INY ; ELSE INC TO NEXT CHAR
|
||||
STY :SUBIDX
|
||||
INC :SIDX
|
||||
JMP :CMPLP ; CONTINUE
|
||||
:SLP2
|
||||
INC :SINDEX ; INCREMENT INDEX
|
||||
DEC :SCOUNT ; DEC COUNT
|
||||
BNE :SLP1 ; BR IF NOT DONE
|
||||
BEQ :NOTFND ; ELSE EXIT TO NOT FOUND
|
||||
:FOUND
|
||||
LDA :SINDEX ; FOUND, A = STARTING IDX
|
||||
JMP :EXIT
|
||||
:NOTFND
|
||||
LDA #0 ; SUB NOT FOUND, A=0
|
||||
:EXIT
|
||||
STA RETURN
|
||||
LDY #1
|
||||
STY RETLEN
|
||||
RTS
|
||||
:SLEN DS 1
|
||||
:SUBLEN DS 1
|
||||
:SINDEX DS 1
|
||||
:SUBIDX DS 1
|
||||
:SCOUNT DS 1
|
||||
:SIDX DS 1
|
|
@ -1,70 +0,0 @@
|
|||
ZMLOAD
|
||||
PLA
|
||||
STA :RETADR
|
||||
PLA
|
||||
STA :RETADR+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #2 ; START 2 AHEAD
|
||||
LDA (ADDR1),Y ; AND PUT ADDR1
|
||||
STA $08 ; AREA LAST
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $09
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $19
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $1E
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $E3
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EB
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EC
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $ED
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EE
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EF
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FA
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FB
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FC
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FD
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FE
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FF
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
TAX
|
||||
LDA (ADDR1+1),Y
|
||||
TAY
|
||||
STX ADDR1
|
||||
STY ADDR1+1
|
||||
LDA :RETADR+1
|
||||
PHA
|
||||
LDA :RETADR
|
||||
PHA
|
||||
RTS
|
||||
:RETADR DS 2
|
3
source/disk18_demos_utils/GO.MAKEEXEC
Normal file
3
source/disk18_demos_utils/GO.MAKEEXEC
Normal file
|
@ -0,0 +1,3 @@
|
|||
BLOAD MAKEEXEC
|
||||
CALL -151
|
||||
6000G
|
3
source/disk18_demos_utils/GO.MAKEEXEC1
Normal file
3
source/disk18_demos_utils/GO.MAKEEXEC1
Normal file
|
@ -0,0 +1,3 @@
|
|||
BLOAD MAKEEXEC
|
||||
CALL -151
|
||||
6000G
|
3
source/disk18_demos_utils/GO.MINIFY
Normal file
3
source/disk18_demos_utils/GO.MINIFY
Normal file
|
@ -0,0 +1,3 @@
|
|||
BLOAD MINIFY
|
||||
CALL -151
|
||||
7000G
|
3
source/disk18_demos_utils/GO.RDF
Normal file
3
source/disk18_demos_utils/GO.RDF
Normal file
|
@ -0,0 +1,3 @@
|
|||
BLOAD RDF
|
||||
CALL -151
|
||||
7000G
|
1964
source/disk18_demos_utils/MAKEEXEC
Normal file
1964
source/disk18_demos_utils/MAKEEXEC
Normal file
File diff suppressed because it is too large
Load Diff
1907
source/disk18_demos_utils/MAKEEXEC1
Normal file
1907
source/disk18_demos_utils/MAKEEXEC1
Normal file
File diff suppressed because it is too large
Load Diff
3429
source/disk18_demos_utils/MAKEMAZE
Normal file
3429
source/disk18_demos_utils/MAKEMAZE
Normal file
File diff suppressed because it is too large
Load Diff
2424
source/disk18_demos_utils/MINIFY
Normal file
2424
source/disk18_demos_utils/MINIFY
Normal file
File diff suppressed because it is too large
Load Diff
2766
source/disk18_demos_utils/RDF
Normal file
2766
source/disk18_demos_utils/RDF
Normal file
File diff suppressed because it is too large
Load Diff
151
source/disk18_demos_utils/T.MAKEEXEC
Normal file
151
source/disk18_demos_utils/T.MAKEEXEC
Normal file
|
@ -0,0 +1,151 @@
|
|||
********************************
|
||||
* *
|
||||
* MAKEEXEC *
|
||||
* *
|
||||
* CREATES AN EXEC FILE THAT *
|
||||
* RUNS A BINARY. NECESSARY FOR *
|
||||
* ANY FILE OPERATIONS. *
|
||||
* *
|
||||
* NOTE THAT IRONICALLY, THIS *
|
||||
* PROGRAM ITSELF HAS TO BE RUN *
|
||||
* THROUGH AN EXEC FILE... *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
** ASSEMBLER DIRECTIVES
|
||||
*
|
||||
CYC AVE
|
||||
EXP ONLY ; TURN OFF LATER
|
||||
DSK MAKEEXEC
|
||||
TR ON
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* HEADER, HOOKS AND MACROS *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
PUT MIN.VARS.REQUIRED
|
||||
USE MIN.MAC.STRINGS
|
||||
USE MIN.MAC.REQUIRED
|
||||
USE MIN.MAC.FILEIO
|
||||
USE MIN.MAC.STDIO
|
||||
PUT MIN.HOOKS.REQUIRED
|
||||
PUT MIN.HOOKS.STDIO
|
||||
PUT MIN.HOOKS.FILEIO
|
||||
PUT MIN.HOOKS.STRINGS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* CONSTANT DECLARATIONS *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* MAIN PROGRAM LOOP *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
JSR HOME
|
||||
PRN "************************",8D
|
||||
PRN "* *",8D
|
||||
PRN "* EXEC FILE MAKER FOR *",8D
|
||||
PRN "* BINARY PROGRAMS THAT *",8D
|
||||
PRN "* USE APPLESOFT. *",8D
|
||||
PRN "* * ",8D
|
||||
PRN "************************",8D8D8D
|
||||
*
|
||||
PRN "BIN FILENAME: "
|
||||
INP
|
||||
LDA RETLEN
|
||||
GRET BNAME ; TRANSFER RETURN TO BNAME
|
||||
*
|
||||
PRN "BIN STARTING ADDRESS: "
|
||||
INP
|
||||
LDA RETLEN
|
||||
GRET BLOC
|
||||
*
|
||||
SCAT "GO.";BNAME;#20 ; PREFIX NAME WITH GO.
|
||||
*
|
||||
GRET TNAME ; STORE RESULTING STRING IN TNAME
|
||||
*
|
||||
PRN " ",8D
|
||||
PRN "BUILDING FILE: "
|
||||
SPRN TNAME
|
||||
PRN " ",8D8D
|
||||
*
|
||||
** OPEN FILE FOR WRITING
|
||||
*
|
||||
SCAT "OPEN ";TNAME;#255
|
||||
CMD RETURN
|
||||
SCAT "WRITE ";TNAME;#255
|
||||
CMD RETURN
|
||||
*
|
||||
** PRINT TO FILE
|
||||
*
|
||||
SCAT "BLOAD ";BNAME;#255
|
||||
FPRN RETURN
|
||||
LDA #$8D
|
||||
JSR FCOUT
|
||||
FPRN "CALL -151"
|
||||
SCAT BLOC;"G";#255
|
||||
FPRN RETURN
|
||||
*
|
||||
** CLOSE FILE
|
||||
*
|
||||
SCAT "CLOSE ";TNAME;#255
|
||||
CMD RETURN
|
||||
*
|
||||
PRN "DONE!",8D8D
|
||||
JMP REENTRY
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* VARIABLES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
BNAME DS 20
|
||||
TNAME DS 20
|
||||
BLOC DS 10
|
||||
LINE DS 40
|
||||
HEAD ASC "REM ** THIS FILES BLOADS",8D
|
||||
ASC "REM ** A BINARY PROGRAM INTO",8D
|
||||
ASC "REM ** MEMORY THEN EXECUTES IT",8D
|
||||
ASC "REM ** VIA THE MONITOR. THIS IS",8D
|
||||
ASC "REM ** NECESSARY FOR CERTAIN ",8D
|
||||
ASC "REM ** EXECUTABLES THAT USE APPLESOFT",8D
|
||||
ASC "REM ** ROUTINES.",8D
|
||||
ASC "REM **",8D00
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* LOW-LEVEL ROUTINES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
PUT MIN.LIB.REQUIRED
|
||||
*
|
||||
** INDIVIDUAL SUBROUTINES
|
||||
*
|
||||
*** FILEIO
|
||||
*
|
||||
PUT MIN.SUB.FPRINT
|
||||
PUT MIN.SUB.DOSCMD
|
||||
PUT MIN.SUB.FPSTR
|
||||
*
|
||||
*** STDIO
|
||||
*
|
||||
PUT MIN.SUB.DPRINT
|
||||
PUT MIN.SUB.XPRINT
|
||||
PUT MIN.SUB.SINPUT
|
||||
*
|
||||
*** STRINGS
|
||||
*
|
||||
PUT MIN.SUB.STRCAT
|
||||
PUT MIN.SUB.PRNSTR
|
||||
*
|
599
source/disk18_demos_utils/T.MAKEMAZE
Normal file
599
source/disk18_demos_utils/T.MAKEMAZE
Normal file
|
@ -0,0 +1,599 @@
|
|||
********************************
|
||||
* *
|
||||
* PERFECT MAZE GENERATOR *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
** ASSEMBLER DIRECTIVES
|
||||
*
|
||||
CYC AVE
|
||||
EXP ONLY ; TURN OFF LATER
|
||||
DSK MAKEMAZE
|
||||
TR ON
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
PUT VARS.REQUIRED
|
||||
USE MIN.MAC.REQUIRED
|
||||
USE MIN.MAC.ARRAYS
|
||||
USE MIN.MAC.MATH
|
||||
USE MIN.MAC.STDIO
|
||||
PUT MIN.HOOKS.REQUIRED
|
||||
PUT HOOKS.STDIO
|
||||
PUT HOOKS.MATH
|
||||
PUT HOOKS.ARRAYS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* CONSTANT DECLARATIONS *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
XLEN KBD "ENTER MAZE SIZE"
|
||||
XNUM EQU 2*XLEN
|
||||
BAS EQU $2000 ; BASE ADDRESS FOR ARRAYS
|
||||
YLEN EQU XLEN ; CURRENT ALGO ONLY DOES SQUARE
|
||||
XMAX EQU XLEN+1 ; ADD EXTRA COLUMN
|
||||
YMAX EQU YLEN+1 ; ADD EXTRA ROW
|
||||
ASZ EQU XMAX*YMAX+10 ; ARRAY SIZE+INFO BYTES
|
||||
XSTAKS EQU ASZ*2+1 ; COLUMN STACK SIZE; X * Y + 1
|
||||
YSTAKS EQU ASZ*2+1 ; ROW STACK SIZE; X * Y + 1
|
||||
*
|
||||
SOUTHW EQU BAS ; SOUTH WALLS ARRAY
|
||||
WESTW EQU ASZ+BAS ; WEST WALLS ARRAY
|
||||
VISITED EQU 2*ASZ+BAS ; CELLS VISITED
|
||||
XSTACK EQU 3*ASZ+BAS ; STACK FOR COLUMNS
|
||||
YSTACK EQU 3*ASZ+BAS+XSTAKS ; STACK FOR ROWS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* MAIN PROGRAM LOOP *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
INIT
|
||||
*
|
||||
JSR HOME
|
||||
PRN "INITIALIZING...",8D
|
||||
*
|
||||
JSR :SETVARS
|
||||
JSR :OUTWALLS
|
||||
*
|
||||
** GET RANDOM STARTING POINT
|
||||
*
|
||||
RNDB #2;#<XLEN ; RANDOM STARTING POINT
|
||||
STA XX ; BETWEEN 2 AND XLEN LOBYTE
|
||||
RNDB #2;#<YLEN ; RANDOM STARTING POINT
|
||||
STA YY ; BETWEEN 2 AND YLEN LOBYTE
|
||||
LDA #>XLEN ; IF XLEN HIBYTE IS 0,
|
||||
CMP #0 ; THEN SKIP SETTING XX HIBYTE
|
||||
BEQ :SKIPHI
|
||||
LDA #>YLEN ; IF YLEN HIBYTE IS 0,
|
||||
CMP #0 ; THEN SKIP SETTING YY HIBYTE
|
||||
BEQ :SKIPHI
|
||||
RNDB #1;#>XLEN ; RANDOMLY SET XX HIBYTE
|
||||
STA XX+1
|
||||
RNDB #1;#>YLEN ; RANDOMLY SET YY HIBYTE
|
||||
STA YY+1
|
||||
JMP BUILD
|
||||
:SKIPHI ; JUST SET HIBYTES TO 0
|
||||
LDA #0
|
||||
STA XX+1
|
||||
STA YY+1
|
||||
*
|
||||
JMP BUILD
|
||||
*
|
||||
********************************
|
||||
*
|
||||
:SETVARS
|
||||
*
|
||||
** DIM ARRAYS AND FILL
|
||||
*
|
||||
DIM162 SOUTHW;#XMAX;#YMAX;#1;#1
|
||||
DIM162 WESTW;#XMAX;#YMAX;#1;#1
|
||||
DIM162 VISITED;#XMAX;#YMAX;#1;#0
|
||||
DIM161 XSTACK;#XSTAKS;#2;#0
|
||||
DIM161 YSTACK;#YSTAKS;#2;#0
|
||||
*
|
||||
** NOW ASSIGN VARIABLE VALUES
|
||||
*
|
||||
LDA #0
|
||||
STA SPTR ; INIT STACK POINTER
|
||||
STA V0
|
||||
LDA #1
|
||||
STA V1
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
*
|
||||
:OUTWALLS
|
||||
*
|
||||
** MAKE COLUMN MIN AND MAX TO BE ALL
|
||||
** WALL (CODE: 1).
|
||||
*
|
||||
LDA #0 ; CLEAR ALL TO 0 FIRST
|
||||
STA XX
|
||||
STA YY
|
||||
STA XX+1
|
||||
STA YY+1
|
||||
JMP :COLCONT ; SKIP FIRST INCREMENT
|
||||
*
|
||||
:COLEDGE
|
||||
LDA XX
|
||||
CLC
|
||||
ADC #1
|
||||
STA XX
|
||||
BCC :COLCONT ; IF CARRY SET, THEN INC HIBYTE
|
||||
INC XX+1
|
||||
:COLCONT
|
||||
PUT162 V1;VISITED;XX;#0
|
||||
PUT162 V1;VISITED;XX;#YMAX-1
|
||||
LDA XX
|
||||
CMP #<XMAX-1 ; IF XX LO < MAX SIZE, REPEAT
|
||||
BNE :COLEDGE
|
||||
LDA XX+1 ; TEST HI BIT
|
||||
CMP #>XMAX ; IF XX HI < MAX HI, REPEAT
|
||||
BNE :COLEDGE
|
||||
*
|
||||
** MAKE MIN AND MAX ROWS TO BE ALL WALL
|
||||
*
|
||||
JMP :ROWCONT ; SKIP FIRST INCREMENT
|
||||
*
|
||||
:ROWEDGE
|
||||
LDA YY
|
||||
CLC
|
||||
ADC #1
|
||||
STA YY
|
||||
BCC :ROWCONT ; IF CARRY SET, INC HIBYTE
|
||||
INC YY+1
|
||||
:ROWCONT
|
||||
PUT162 V1;VISITED;#0;YY
|
||||
PUT162 V1;VISITED;#XMAX-1;YY
|
||||
LDA YY
|
||||
CMP #<YMAX-1 ; IF YY LO < YMAX LO, REPEAT
|
||||
BNE :ROWEDGE
|
||||
LDA YY+1
|
||||
CMP #>YMAX ; IF YY HI < YMAX HI, REPEAT
|
||||
BNE :ROWEDGE
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* BUILD THE MAZE *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
BUILD
|
||||
*
|
||||
PRN "BUILDING MAZE...",8D8D
|
||||
JMP CONTSPTR ; SKIP FIRST INC
|
||||
*
|
||||
********************************
|
||||
*
|
||||
STAKPUSH
|
||||
*
|
||||
LDA SPTR ; INCREMENT STACK POINTER
|
||||
CLC
|
||||
ADC #1
|
||||
STA SPTR
|
||||
BCC CONTSPTR ; IF CARRY SET, INC POINTER HI
|
||||
INC SPTR+1
|
||||
CONTSPTR
|
||||
PUT161 XX;XSTACK;SPTR ; PUT COL ON STACK
|
||||
PUT161 YY;YSTACK;SPTR ; PUT ROW ON STACK
|
||||
PUT162 V1;VISITED;XX;YY ; MARK BLOCK AS VISITED
|
||||
*
|
||||
********************************
|
||||
*
|
||||
CHECKALL
|
||||
*
|
||||
** CHECKS ALL ADJACENT BLOCKS FOR A WALL. IF
|
||||
** COMPLETELY SURROUNDED, POP THE STACK AND
|
||||
** AND START OVER UNTIL.
|
||||
*
|
||||
LDA YY+1 ; COPY HI BYTES OF XX,YY FIRST
|
||||
STA YP1+1
|
||||
STA YM1+1
|
||||
LDA XX+1
|
||||
STA XP1+1
|
||||
STA XM1+1
|
||||
*
|
||||
LDA YY ; CALC AND STORE YY+1
|
||||
CLC
|
||||
ADC #1
|
||||
STA YP1
|
||||
BCC :YP1CNT ; IF CARRY SET, INC YYP1 HI
|
||||
INC YP1+1
|
||||
:YP1CNT
|
||||
LDA XX ; CALC AND STORE XX+1
|
||||
CLC
|
||||
ADC #1
|
||||
STA XP1
|
||||
BCC :XP1CNT ; IF CARRY SET, INC XP1 HI
|
||||
INC XP1+1
|
||||
:XP1CNT
|
||||
LDA YY ; CALC AND STORE YY-1
|
||||
SEC
|
||||
SBC #1
|
||||
STA YM1
|
||||
BCS :YM1CNT ; IF CARRY CLEAR, DEC YM1 HI
|
||||
DEC YM1+1
|
||||
:YM1CNT
|
||||
LDA XX ; CALC AND STORE XX-1
|
||||
SEC
|
||||
SBC #1
|
||||
STA XM1
|
||||
BCS :XM1CNT ; IF CARRY CLEAR, DEC XM1 HI
|
||||
DEC XM1+1
|
||||
:XM1CNT
|
||||
*JSR CELLPOS
|
||||
*
|
||||
** NOW CHECK ADJACENT CELLS FOR WALLS
|
||||
*
|
||||
:IF1 ; IF VISITED(XX,YY+1) = 1
|
||||
LDA YY+1 ; IF YY HI BYTE = YMAX HI BYTE,
|
||||
CMP #>YMAX ; THEN TEST YY LOW BYTE
|
||||
BNE :IF1TEST
|
||||
LDA YY
|
||||
CMP #<YMAX ; IF YY LOBYTE = YMAX LOBYTE, THEN
|
||||
BEQ :IF2 ; AUTOMATICALLY ASSUME ITS A WALL
|
||||
*
|
||||
:IF1TEST
|
||||
GET162 VISITED;XX;YP1
|
||||
LDA RETURN
|
||||
CMP #1
|
||||
BEQ :IF2 ; IF CELL BELOW IS A WALL
|
||||
; CONTINUE TESTING OTHER
|
||||
; ADJACENT CELLS
|
||||
JMP DOMOVE ; OTHERWISE, EXIT CONDITIONAL
|
||||
*
|
||||
:IF2 ; IF VISITED(X+1,Y) = 1
|
||||
*
|
||||
LDA XX+1 ; IF XX HI BYTE = XMAX HIBYTE
|
||||
CMP #>XMAX ; THEN TEST LOBYTE
|
||||
BNE :IF2TEST
|
||||
LDA XX ; IF XX LOBYTE = XMAX LOBYTE
|
||||
CMP #<XMAX-1 ; THEN ASSUME RIGHT CELL = WALL
|
||||
BEQ :IF3
|
||||
:IF2TEST
|
||||
GET162 VISITED;XP1;YY ; IF CELL TO RIGHT
|
||||
LDA RETURN ; IS A WALL, THEN
|
||||
CMP #1 ; CONTINUE CELL TESTING;
|
||||
BEQ :IF3 ; ELSE, REPEAT MOVE
|
||||
JMP DOMOVE
|
||||
*
|
||||
:IF3 ; IF VISITED(XX,YY-1) = 1
|
||||
LDA YY+1 ; IF YY HIBYTE = 0 THEN TEST
|
||||
CMP #0 ; LOBYTE
|
||||
BNE :IF3TEST
|
||||
LDA YY ; IF YY LOBYTE = 0 THEN
|
||||
CMP #0 ; ASSUME UPPER CELL = WALL
|
||||
BEQ :IF4 ; AND CONTINUE TESTING
|
||||
:IF3TEST
|
||||
GET162 VISITED;XX;YM1
|
||||
LDA RETURN ; IF CELL ABOVE IS WALL THEN
|
||||
CMP #1 ; CONTINUE TESTING CELLS;
|
||||
BEQ :IF4 ; ELSE, REPEAT MOVE
|
||||
JMP DOMOVE
|
||||
*
|
||||
:IF4 ; IF VISITED(XX-1,YY) = 1
|
||||
LDA XX+1 ; IF XX HIBYTE = 0
|
||||
CMP #0 ; THEN TEST LOBYTES
|
||||
BNE :IF4TEST
|
||||
LDA XX ; IF XX LOBYTE = 0
|
||||
CMP #0 ; THEN ASSUME LEFT CELL = WALL
|
||||
BEQ :POP ; AND POP THE STACK
|
||||
:IF4TEST
|
||||
GET162 VISITED;XM1;YY
|
||||
LDA RETURN ; IF LEFT CELL = 1
|
||||
CMP #1 ; THEN ALL ADJACENT CELLS ARE WALLS
|
||||
BEQ :POP ; SO POP THE STACK
|
||||
*
|
||||
JMP DOMOVE ; OTHERWISE, REPEAT MOVING
|
||||
*
|
||||
********************************
|
||||
*
|
||||
:POP
|
||||
*
|
||||
GET161 XSTACK;SPTR ; GET NEW XX POSITION
|
||||
LDA RETURN
|
||||
STA XX ; STORE LO BYTE
|
||||
LDA RETURN+1
|
||||
STA XX+1 ; STORE HI BYTE
|
||||
GET161 YSTACK;SPTR
|
||||
LDA RETURN ; GET NEW Y POSITION
|
||||
STA YY
|
||||
LDA RETURN+1
|
||||
STA YY+1
|
||||
LDA SPTR ; POP STACK
|
||||
SEC
|
||||
SBC #1
|
||||
STA SPTR
|
||||
BCS :SPCNT2 ; IF CARRY NOT SET, DEC HIBYTE
|
||||
DEC SPTR+1
|
||||
:SPCNT2
|
||||
LDA SPTR+1 ; IF POINTER HIBYTE > 0
|
||||
CMP #0 ; THEN REPEAT MOVEMENT
|
||||
BNE :DOREPEAT
|
||||
LDA SPTR ; OTHERWISE, TEST LOBYTE
|
||||
CMP #1 ; IF STILL MORE ON STACK
|
||||
BEQ :DOREPEAT
|
||||
BCS :DOREPEAT ; THEN REPEAT MOVEMENT
|
||||
JMP DISPMAZE ; OTHERWISE, FINISHED!
|
||||
*
|
||||
:DOREPEAT
|
||||
JMP CHECKALL
|
||||
*
|
||||
********************************
|
||||
*
|
||||
DOMOVE
|
||||
*
|
||||
** MOVE IN A RANDOM DIRECTION
|
||||
*
|
||||
JSR RAND8
|
||||
CMP #64 ; IF RND < 64
|
||||
BCC :MVDJ
|
||||
CMP #128 ; ELSE IF RND < 128
|
||||
BCC :MVRJ
|
||||
CMP #192 ; ELSE IF RND < 192
|
||||
BCC :MVUPJ
|
||||
JMP :MVLEFT ; ELSE RND IS > 191
|
||||
:MVUPJ JMP :MVUP
|
||||
:MVRJ JMP :MVRIGHT
|
||||
:MVDJ JMP :MVDOWN
|
||||
*
|
||||
:MVDOWN
|
||||
LDA YY+1 ; IF YY HIBYTE = YMAX HIBYTE
|
||||
CMP #>YMAX ; THEN TEST LOBYTES
|
||||
BNE :DTEST ; OTHERWISE, TEST CELL BELOW
|
||||
LDA YY
|
||||
CMP #<YMAX ; IF YY LOBYTE = YMAX LOBYTE
|
||||
BEQ :DNO ; THEN ASSUME CELL BELOW = WALL
|
||||
:DTEST
|
||||
GET162 VISITED;XX;YP1
|
||||
LDA RETURN
|
||||
CMP #0 ; IF CELL BELOW NOT A WALL
|
||||
BEQ :DOWNGO ; THEN MOVE DOWN
|
||||
:DNO
|
||||
JMP DOMOVE ; ELSE, TRY MOVING ELSEWHERE
|
||||
:DOWNGO
|
||||
PUT162 V0;SOUTHW;XX;YY ; PUT 0 AT CURRENT POSITION
|
||||
LDA YP1 ; INCREASE YY POSITION (MOVE DOWN)
|
||||
STA YY
|
||||
LDA YP1+1
|
||||
STA YY+1
|
||||
:DOWNC
|
||||
JMP STAKPUSH ; PUSH POSITION TO STACK, REPEAT
|
||||
*
|
||||
:MVRIGHT
|
||||
LDA XX+1 ; IF XX HIBYTE = XMAX HIBYTE
|
||||
CMP #>XMAX ; THEN TEST LOW BYTE
|
||||
BNE :RTEST ; ELSE CONTINUE CELL CHECK
|
||||
LDA XX
|
||||
CMP #<XMAX-1 ; IF XX LOBYTE = XMAX LOBYTE
|
||||
BEQ :RNO ; THEN ASSUME WALL TO RIGHT
|
||||
; AND SKIP THE CHECK
|
||||
:RTEST
|
||||
GET162 VISITED;XP1;YY
|
||||
LDA RETURN ; IF CELL TO RIGHT IS NOT WALL
|
||||
CMP #0 ; THEN MOVE THERE
|
||||
BEQ :RIGHTGO
|
||||
:RNO
|
||||
JMP DOMOVE ; OTHERWISE, TRY MOVING ELSEWHERE
|
||||
:RIGHTGO
|
||||
PUT162 V0;WESTW;XP1;YY ; MARK RIGHT CELL AS EMPTY
|
||||
LDA XP1 ; MOVE TO RIGHT CELL
|
||||
STA XX
|
||||
LDA XP1+1
|
||||
STA XX+1
|
||||
:RIGHTC
|
||||
JMP STAKPUSH
|
||||
*
|
||||
:MVUP
|
||||
LDA YY+1 ; IF YY HIBYTE != 0 THEN
|
||||
CMP #0 ; SKIP LOBYTE TEST
|
||||
BNE :UTEST
|
||||
LDA YY ; IF YY LOBYTE = 0 THEN
|
||||
CMP #0 ; ASSUME UP CELL IS WALL
|
||||
BEQ :UNO ; AND MOVE ELSEWHERE
|
||||
:UTEST
|
||||
GET162 VISITED;XX;YM1
|
||||
LDA RETURN ; IF VISITED(XX,YY) = 0
|
||||
CMP #0 ; (NO WALL) THEN
|
||||
BEQ :UPGO ; MOVE ON UP THERE
|
||||
:UNO
|
||||
JMP DOMOVE
|
||||
:UPGO
|
||||
PUT162 V0;SOUTHW;XX;YM1
|
||||
LDA YM1 ; MOVE UP ONE CELL
|
||||
STA YY
|
||||
LDA YM1+1
|
||||
STA YY+1
|
||||
:UPC
|
||||
JMP STAKPUSH
|
||||
*
|
||||
:MVLEFT
|
||||
LDA XX+1 ; IF XX HIBYTE != 0 THEN
|
||||
CMP #0 ; SKIP LOBYTE TEST
|
||||
BNE :LTEST
|
||||
LDA XX ; IF XX LOBYTE = 0
|
||||
CMP #0 ; THEN ASSME LEFT CELL IS WALL
|
||||
BEQ :LNO ; AND TRY TO MOVE ELSEWHERE
|
||||
:LTEST
|
||||
GET162 VISITED;XM1;YY
|
||||
LDA RETURN ; IF LEFT CELL IS NOT A WALL
|
||||
CMP #0 ; THEN LET'S MOVE THERE
|
||||
BEQ :LEFTGO
|
||||
:LNO
|
||||
JMP DOMOVE
|
||||
:LEFTGO
|
||||
PUT162 V0;WESTW;XX;YY
|
||||
LDA XM1 ; MOVE ONE CELL LEFT
|
||||
STA XX
|
||||
LDA XM1+1
|
||||
STA XX+1
|
||||
:LEFTC
|
||||
JMP STAKPUSH
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* DISPLAY THE MAZE *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
DISPMAZE
|
||||
*
|
||||
** SEND MAZE TO DISPLAY OUTPUT, FORMATTED
|
||||
*
|
||||
PRN "PRINTING...",8D8D
|
||||
LDA #0
|
||||
STA XX
|
||||
:XLOOP ; PRINT FIRST LINE OF WALLS
|
||||
INC XX
|
||||
PRN "X"
|
||||
LDA XX
|
||||
CMP #XNUM-1
|
||||
BNE :XLOOP
|
||||
PRN " ",8D
|
||||
*
|
||||
LDA #0 ; RESET XX,YY
|
||||
STA XX+1
|
||||
STA YY+1
|
||||
LDA #1
|
||||
STA XX
|
||||
STA YY
|
||||
WLP
|
||||
*
|
||||
** IF WESTW(X,Y) == 0
|
||||
*
|
||||
GET162 WESTW;XX;YY
|
||||
LDA RETURN
|
||||
CMP #0
|
||||
BEQ NOWALLW ; THEN PRINT ...
|
||||
YESWALLW ; ELSE PRINT X..
|
||||
PRN "X "
|
||||
JMP CONTWLP
|
||||
NOWALLW
|
||||
PRN " "
|
||||
*
|
||||
CONTWLP
|
||||
LDA XX ; INCREASE XX
|
||||
CLC
|
||||
ADC #1 ; LOBYTE FIRST
|
||||
STA XX
|
||||
BCC :SKIPHI ; IF HI = 0, SKIP INC
|
||||
INC XX+1
|
||||
:SKIPHI
|
||||
LDA XX+1 ; IF HIBYTE != XMAX HI
|
||||
CMP #>XMAX
|
||||
BNE WLP ; THEN REPEAT
|
||||
LDA XX ; OTHERWISE, TEST LOWS
|
||||
CMP #<XMAX-1 ; IF LOBYTE != XMAX-1
|
||||
BNE WLP ; REPEAT
|
||||
*
|
||||
PRN "X",8D ; OTHERWISE, GO TO NEXT LINE
|
||||
*
|
||||
LDA #1 ; RESET XX COUNTER
|
||||
STA XX
|
||||
LDA #0
|
||||
STA XX+1
|
||||
*
|
||||
** IF SOUTHW(X,Y) == 0
|
||||
*
|
||||
SLP
|
||||
GET162 SOUTHW;XX;YY
|
||||
LDA RETURN
|
||||
CMP #0
|
||||
BEQ NOSOUTH ; THEN PRINT X..
|
||||
YSOUTH ; ELSE PRINT XXX
|
||||
PRN "XX"
|
||||
JMP CONTSLP
|
||||
NOSOUTH
|
||||
PRN "X "
|
||||
CONTSLP
|
||||
LDA XX ; INCREASE XX BY 1
|
||||
CLC
|
||||
ADC #1
|
||||
STA XX
|
||||
BCC :SKIPHI2 ; SKIP HI INC IF NO CARRY
|
||||
INC XX+1
|
||||
:SKIPHI2
|
||||
LDA XX+1 ; TEST HIBYTE OF XX
|
||||
CMP #>XMAX ; IF HI != XMAX HI
|
||||
BNE SLP ; REPEAT
|
||||
LDA XX ; ELSE, TEST LOBYTE
|
||||
CMP #<XMAX-1 ; IF XX LO != XMAX LO - 1
|
||||
BNE SLP ; REPEAT
|
||||
*
|
||||
PRN "X",8D ; OTHERWISE, NEW LINE
|
||||
*
|
||||
LDA #0 ; RESET XX
|
||||
STA XX+1
|
||||
LDA #1
|
||||
STA XX
|
||||
LDA YY ; INCREASE YY BY 1
|
||||
CLC
|
||||
ADC #1
|
||||
STA YY
|
||||
BCC :SKIP ; IF NO CARRY, SKIP HI INC
|
||||
INC YY+1
|
||||
:SKIP
|
||||
LDA YY+1 ; IF YY HI != YMAX HI
|
||||
CMP #>YMAX ; THEN NOT DONE; REPEAT LOOPS
|
||||
BNE REPT
|
||||
LDA YY ; ELSE IF YY LO != YMAX LO
|
||||
CMP #<YMAX-1 ; THEN NOT DONE; REPEAT LOOPS
|
||||
BEQ DISPEXIT ; OTHERWISE, DONE!
|
||||
REPT JMP WLP
|
||||
*
|
||||
DISPEXIT
|
||||
*
|
||||
_WAIT
|
||||
JMP REENTRY
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* VARIABLES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
V0 DS 1 ; USED BECAUSE OF CURRENT
|
||||
V1 DS 1 ; ARRAY DIM LIMITATIONS
|
||||
*
|
||||
XX DS 2 ; CURRENT COLUMN
|
||||
YY DS 2 ; CURRENT ROW
|
||||
SPTR DS 2 ; ARRAY STACK POINTER
|
||||
XP1 DS 2 ; X PLUS ONE
|
||||
XM1 DS 2 ; X MINUS ONE
|
||||
YP1 DS 2 ; Y PLUS ONE
|
||||
YM1 DS 2 ; Y MINUS ONE
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* LOW-LEVEL ROUTINES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
PUT MIN.LIB.REQUIRED
|
||||
*
|
||||
** INDIVIDUAL SUBROUTINES
|
||||
*
|
||||
** ARRAYS
|
||||
*
|
||||
PUT MIN.SUB.ADIM161
|
||||
PUT MIN.SUB.ADIM162
|
||||
PUT MIN.SUB.AGET161
|
||||
PUT MIN.SUB.AGET162
|
||||
PUT MIN.SUB.APUT161
|
||||
PUT MIN.SUB.APUT162
|
||||
*
|
||||
** MATH
|
||||
*
|
||||
PUT MIN.SUB.RAND8
|
||||
PUT MIN.SUB.RANDB
|
||||
*
|
||||
** STDIO
|
||||
*
|
||||
PUT MIN.SUB.DPRINT
|
||||
PUT MIN.SUB.XPRINT
|
||||
*
|
391
source/disk18_demos_utils/T.MINIFY
Normal file
391
source/disk18_demos_utils/T.MINIFY
Normal file
|
@ -0,0 +1,391 @@
|
|||
********************************
|
||||
* *
|
||||
* ASSEMBLY LISTING MINIFIER *
|
||||
* *
|
||||
* A PROGRAM THAT REMOVES *
|
||||
* COMMENTS FROM ASSEMBLY CODE. *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
** ASSEMBLER DIRECTIVES
|
||||
*
|
||||
CYC AVE
|
||||
EXP OFF
|
||||
DSK MINIFY
|
||||
TR ON
|
||||
OBJ $BFE0
|
||||
ORG $7000
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* HEADER, HOOKS AND MACROS *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
PUT MIN.VARS.REQUIRED
|
||||
USE MIN.MAC.REQUIRED
|
||||
PUT MIN.HOOKS.REQUIRED
|
||||
USE MIN.MAC.STDIO
|
||||
PUT MIN.HOOKS.STDIO
|
||||
USE MIN.MAC.FILEIO
|
||||
PUT MIN.HOOKS.FILEIO
|
||||
USE MIN.MAC.STRINGS
|
||||
PUT MIN.HOOKS.STRINGS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* MAIN PROGRAM LOOP *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
BEGIN
|
||||
*
|
||||
JSR INIT
|
||||
JSR GETNAMES
|
||||
JSR DELMIN
|
||||
JMP FCOPY
|
||||
*
|
||||
JMP REENTRY
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* INIT *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
INIT
|
||||
*
|
||||
** RESET ERROR HANDLING
|
||||
*
|
||||
AMODE
|
||||
LDA #$00
|
||||
STA $D8
|
||||
*
|
||||
LDA #21 ; SEND ^U TO COUT TO
|
||||
JSR COUT ; ENSURE 40COL MODE
|
||||
LDA #00
|
||||
STA ADDT
|
||||
STA WRITEOFF
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* GETNAMES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
GETNAMES
|
||||
*
|
||||
JSR HOME
|
||||
PRN "ASSEMBLY CODE MINIFIER",8D
|
||||
PRN "======================",8D8D
|
||||
PRN "THIS PROGRAM STRIPS A",8D
|
||||
PRN "PROGRAM OF ITS COMMENTS",8D
|
||||
PRN "AND STORES THE RESULTING",8D
|
||||
PRN "FILE WIN A MIN. PREFIX.",8D8D
|
||||
*
|
||||
:QUERY
|
||||
PRN "FILE TO MINIFY ",8D
|
||||
PRN "(RETURN FOR CATALOG): "
|
||||
INP
|
||||
LDA RETLEN
|
||||
CMP #0 ; IF NOT JUST CR, THEN
|
||||
BNE :NAMES ; GO TO NAMES
|
||||
CMD "CATALOG" ; OTHERWISE, CAT
|
||||
PRN " ",8D
|
||||
JMP :QUERY
|
||||
:NAMES
|
||||
GRET SNAME
|
||||
GRET DNAME
|
||||
*
|
||||
** NEED TO CHECK IF STARTING WITH T.; IF SO, INSERT
|
||||
** MIN. AFTER T. OTHERWISE, JUST PREFIX.
|
||||
*
|
||||
SPOS SNAME;"T."
|
||||
LDA RETURN
|
||||
CMP #1 ; IF STRING BEGINS WITH "T."
|
||||
BNE :CONTN ; DELETE T. FROM STRING
|
||||
SDEL DNAME;#1;#2
|
||||
LDA #$FF
|
||||
STA ADDT
|
||||
:CONTN
|
||||
SCAT "MIN.";DNAME;#30
|
||||
LDA RETLEN
|
||||
GRET DNAME ; SCAT PUTS LENGTH BYTE
|
||||
; IN RETURN AS WELL AS RETLEN
|
||||
*
|
||||
** NOW ADD BACK "T." PREFIX IF NEEDED
|
||||
*
|
||||
LDA ADDT
|
||||
CMP #$FF
|
||||
BNE SKIPT
|
||||
SCAT "T.";DNAME;#30
|
||||
GRET DNAME
|
||||
SKIPT
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* DELMIN *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
DELMIN
|
||||
*
|
||||
** HIJACK ERROR HANDLING
|
||||
*
|
||||
LDA #$FF
|
||||
STA $D8
|
||||
*
|
||||
** SET ERROR CONTROL TO CONTINUE
|
||||
** FILE TO DELETE DOESN'T EXIST
|
||||
*
|
||||
LDA #<:DELCONT
|
||||
STA $9D5A
|
||||
LDA #>:DELCONT
|
||||
STA $9D5B
|
||||
*
|
||||
SCAT "DELETE ";DNAME;#50 ; DELETE PREVIOUS IF EXISTS
|
||||
CMD RETURN
|
||||
*
|
||||
:DELCONT
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* MAIN FILE COPY LOOP *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
FCOPY
|
||||
*
|
||||
PRN "MINIFYING...",8D8D
|
||||
*
|
||||
JSR SETFILEERR
|
||||
JSR OPENFILES
|
||||
*
|
||||
** THE FOLLOWING LOOP ENDS WHEN
|
||||
** THE END OF THE SOURCE FILE
|
||||
** IS REACHED, PROMPTING AN ERROR
|
||||
** THAT GETS HANDLED BY FCLOSE
|
||||
*
|
||||
:COPYLOOP
|
||||
JSR READSRC
|
||||
JSR CHKCOMMENT
|
||||
JSR WRITEDEST
|
||||
:LOOPEND JMP :COPYLOOP
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* SETFILEERR *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
SETFILEERR
|
||||
*
|
||||
** SET ERROR CONTROL TO FILE CLOSING ROUTINE
|
||||
*
|
||||
LDA #<FCLOSE
|
||||
STA $9D5A
|
||||
LDA #>FCLOSE
|
||||
STA $9D5B
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* OPENFILES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
OPENFILES
|
||||
*
|
||||
** OPEN SOURCE AND DESTINATION FILES
|
||||
*
|
||||
SCAT "OPEN ";SNAME;#80
|
||||
CMD RETURN
|
||||
SCAT "OPEN ";DNAME;#80
|
||||
CMD RETURN
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* READSRC *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
READSRC
|
||||
*
|
||||
** CLEAR BUFFER POINTER, SET TO READ SOURCE
|
||||
*
|
||||
LDA #1
|
||||
STA CCNT
|
||||
SCAT "READ ";SNAME;#80
|
||||
CMD RETURN
|
||||
:LP
|
||||
GKEY ; ASCII CHAR STORED IN .A
|
||||
LDY CCNT
|
||||
STA LINE,Y
|
||||
CMP #$8D ; IS THIS A CARRIAGE RETURN?
|
||||
BEQ :XLP ; YES, EXIT LOOP
|
||||
INC CCNT ; INCREASE BUFFER POINTER
|
||||
JMP :LP ; KEEP ON READING
|
||||
:XLP
|
||||
LDA CCNT
|
||||
STA LINE
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* CHKCOMMENT *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
CHKCOMMENT
|
||||
*
|
||||
** NOW CHECK IF LINE BEGINS WITH *
|
||||
*
|
||||
LDA LINE+1
|
||||
CMP #170 ; * CHARACTER
|
||||
BNE :SEMITEST
|
||||
LDA #$FF
|
||||
STA WRITEOFF
|
||||
*
|
||||
:SEMITEST
|
||||
*
|
||||
** NOW TEST FOR SUBSTRING " ; "
|
||||
*
|
||||
LDA LINE ; START AT END OF STRING
|
||||
STA CCNT
|
||||
DEC CCNT
|
||||
*
|
||||
:SEMILP
|
||||
LDY CCNT
|
||||
LDA LINE,Y
|
||||
CMP #$BB ; ";" CHARACTER
|
||||
BEQ :SEMIF
|
||||
CPY #0
|
||||
BEQ :XSEMILP
|
||||
DEC CCNT
|
||||
JMP :SEMILP
|
||||
*
|
||||
:SEMIF
|
||||
LDY CCNT
|
||||
INY
|
||||
LDA LINE,Y
|
||||
CMP #$20 ; IS NEXT CHAR A SPACE?
|
||||
BNE :XSEMILP
|
||||
LDA #$8D
|
||||
LDY CCNT
|
||||
STA LINE,Y
|
||||
:XSEMILP
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* WRITEDEST *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
WRITEDEST
|
||||
*
|
||||
LDA WRITEOFF
|
||||
CMP #$FF
|
||||
BEQ :XWLP
|
||||
*
|
||||
** CLEAR COUNTER, SET TO WRITE DEST
|
||||
*
|
||||
LDA #1
|
||||
STA CCNT
|
||||
SCAT "WRITE ";DNAME;#80
|
||||
CMD RETURN
|
||||
*
|
||||
:WLP ; WRITE LOOP
|
||||
LDY CCNT
|
||||
LDA LINE,Y
|
||||
CMP #$8D ; WAS IT A CR?
|
||||
BEQ :XWLP ; YEP, EXIT LOOP
|
||||
JSR FCOUT ; PRINT TO FILE
|
||||
INC CCNT
|
||||
JMP :WLP
|
||||
:XWLP
|
||||
LDA #00
|
||||
STA WRITEOFF
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* FCLOSE *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
FCLOSE
|
||||
*
|
||||
** NOW CLOSE SOURCE AND DESTINATION FILES
|
||||
** AFTER END OF FILE ERROR
|
||||
*
|
||||
SCAT "CLOSE ";SNAME;#80
|
||||
CMD RETURN
|
||||
*
|
||||
SCAT "CLOSE ";DNAME;#80
|
||||
CMD RETURN
|
||||
*
|
||||
PRN "DONE!",8D8D
|
||||
PRN "WOULD YOU LIKE TO MINIFY ANOTHER? "
|
||||
INP
|
||||
LDA RETURN+1
|
||||
CMP #217 ; 'Y' LETTER
|
||||
BNE FIN
|
||||
PLA
|
||||
PLA
|
||||
PLA
|
||||
JMP BEGIN
|
||||
FIN
|
||||
*
|
||||
PLA
|
||||
PLA
|
||||
JMP REENTRY
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* VARIABLES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
SNAME DS 40 ; SOURCE FILE NAME
|
||||
DNAME DS 40 ; DEST FILE NAME
|
||||
CCNT DS 2 ; SECOND COUNTER
|
||||
TEMP DS 2
|
||||
WRITEOFF DS 2
|
||||
ADDT HEX 00
|
||||
LINE DS 200
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* LOW-LEVEL ROUTINES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
PUT MIN.LIB.REQUIRED
|
||||
*
|
||||
** INDIVIDUAL SUBROUTINES
|
||||
*
|
||||
*** STRINGS
|
||||
*
|
||||
PUT MIN.SUB.STRCAT
|
||||
PUT MIN.SUB.SUBPOS
|
||||
PUT MIN.SUB.PRNSTR
|
||||
PUT MIN.SUB.SUBDEL
|
||||
*
|
||||
*** STDIO
|
||||
*
|
||||
PUT MIN.SUB.DPRINT
|
||||
PUT MIN.SUB.XPRINT
|
||||
PUT MIN.SUB.SINPUT
|
||||
*
|
||||
*** FILEIO
|
||||
*
|
||||
PUT MIN.SUB.DOSCMD
|
||||
PUT MIN.SUB.FINPUT
|
||||
PUT MIN.SUB.FPRINT
|
||||
PUT MIN.SUB.FPSTR
|
||||
*
|
383
source/disk18_demos_utils/T.RDF
Normal file
383
source/disk18_demos_utils/T.RDF
Normal file
|
@ -0,0 +1,383 @@
|
|||
********************************
|
||||
* *
|
||||
* TYPE :: OUTPUT FILE CONTENTS *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
** ASSEMBLER DIRECTIVES
|
||||
*
|
||||
CYC AVE
|
||||
EXP ONLY ; TURN OFF LATER
|
||||
DSK RDF
|
||||
TR ON
|
||||
OBJ $BFE0
|
||||
ORG $7000
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* HEADER, HOOKS AND MACROS *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
PUT MIN.VARS.REQUIRED
|
||||
USE MIN.MAC.STRINGS
|
||||
USE MIN.MAC.REQUIRED
|
||||
USE MIN.MAC.FILEIO
|
||||
USE MIN.MAC.STDIO
|
||||
PUT MIN.HOOKS.REQUIRED
|
||||
PUT MIN.HOOKS.STDIO
|
||||
PUT MIN.HOOKS.FILEIO
|
||||
PUT MIN.HOOKS.STRINGS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* MAIN PROGRAM LOOP *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
LISTING EQU $2000
|
||||
BYTES EQU 08
|
||||
*
|
||||
JSR INIT
|
||||
JSR OPENFILE
|
||||
*
|
||||
JMP REENTRY
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* INIT *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
INIT
|
||||
*
|
||||
AMODE
|
||||
LDA #$00
|
||||
STA $D8
|
||||
*
|
||||
LDA #00
|
||||
STA TFOUND
|
||||
RTS
|
||||
*
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* OPENFILE *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
OPENFILE
|
||||
*
|
||||
JSR GETNAME
|
||||
JSR CHKEXIST
|
||||
JSR CHKTYPE
|
||||
JSR OPENIT
|
||||
RTS
|
||||
*
|
||||
*****
|
||||
***** GETNAME
|
||||
*****
|
||||
*
|
||||
GETNAME
|
||||
*
|
||||
PRN " ",8D8D
|
||||
PRN "FILE TO PRINT: "
|
||||
INP
|
||||
GRET FNAME
|
||||
RTS
|
||||
*
|
||||
*****
|
||||
***** CHKEXIST
|
||||
*****
|
||||
*
|
||||
CHKEXIST
|
||||
ERRH :NOEXIST
|
||||
SCAT "VERIFY ";FNAME;#100
|
||||
CMD RETURN
|
||||
RTS
|
||||
*
|
||||
:NOEXIST
|
||||
PRN " ",8D8D
|
||||
LDA #7
|
||||
JSR COUT
|
||||
PRN "ERROR: FILE DOESN'T EXIST",8D8D
|
||||
PLA
|
||||
PLA
|
||||
JMP REENTRY
|
||||
*
|
||||
*****
|
||||
***** CHKTYPE
|
||||
*****
|
||||
*
|
||||
CHKTYPE
|
||||
ERRH :TXTF
|
||||
SCAT "BLOAD ";FNAME;#100
|
||||
GRET BLOAD1
|
||||
SCAT BLOAD1;",A$2000";#100
|
||||
CMD RETURN
|
||||
LDA #$FF
|
||||
STA FTYPE
|
||||
LDA TFOUND
|
||||
CMP #$FF
|
||||
BEQ :TTYPE
|
||||
RTS
|
||||
:TTYPE
|
||||
LDA #0
|
||||
STA FTYPE
|
||||
RTS
|
||||
:TXTF
|
||||
LDA #$FF
|
||||
STA TFOUND
|
||||
LDA #$00
|
||||
STA $D8
|
||||
RTS
|
||||
*
|
||||
*****
|
||||
***** OPENIT
|
||||
*****
|
||||
*
|
||||
OPENIT
|
||||
LDA FTYPE
|
||||
CMP #0
|
||||
BEQ :GOTXT
|
||||
JMP :HEXDISP
|
||||
:GOTXT
|
||||
JMP :TXTDISP
|
||||
:HEXDISP
|
||||
*
|
||||
** CODE WAS ALREADY BLOADED, SO NOW
|
||||
** JUST FIND THE ADDRESS IT'S AT
|
||||
*
|
||||
LDA $AA72 ; LOADING ADDRESS OF FILE
|
||||
STA LDADDR
|
||||
LDA $AA73
|
||||
STA LDADDR+1
|
||||
PRN " ",8D8D
|
||||
*
|
||||
LDA $AA60 ; LOADING LENGTH
|
||||
STA LDLEN
|
||||
LDA $AA61
|
||||
STA LDLEN+1
|
||||
PRN "LENGTH: (LOW BYTE, HIGH BYTE)",8D
|
||||
DUMP LDLEN;#2
|
||||
PRN " ",8D
|
||||
_WAIT
|
||||
*
|
||||
:BEGHEXOUT
|
||||
LDA #0
|
||||
STA CNT1
|
||||
LDA #<LISTING
|
||||
STA LINE
|
||||
LDA #>LISTING
|
||||
STA LINE+1
|
||||
:HEXLP1
|
||||
*
|
||||
*DUMP LINE;#BYTES
|
||||
*
|
||||
*
|
||||
LDA LINE
|
||||
STA ADDR3
|
||||
LDA LINE+1
|
||||
STA ADDR3+1
|
||||
*
|
||||
LDA ADDR3+1
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
TAX
|
||||
LDA HEXTAB,X
|
||||
JSR COUT
|
||||
*
|
||||
LDA ADDR3+1
|
||||
AND #$0F
|
||||
TAX
|
||||
LDA HEXTAB,X
|
||||
JSR COUT
|
||||
*
|
||||
LDA ADDR3
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
TAX
|
||||
LDA HEXTAB,X
|
||||
JSR COUT
|
||||
LDA ADDR3
|
||||
AND #$0F
|
||||
TAX
|
||||
LDA HEXTAB,X
|
||||
JSR COUT
|
||||
*
|
||||
LDA #186 ; ":"
|
||||
JSR COUT
|
||||
LDA #160 " "
|
||||
JSR COUT
|
||||
*
|
||||
LDY #0
|
||||
:DLP
|
||||
LDA (ADDR3),Y
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
STA LEFT
|
||||
LDA (ADDR3),Y
|
||||
AND #$0F
|
||||
STA RIGHT
|
||||
LDX LEFT
|
||||
LDA HEXTAB,X
|
||||
JSR COUT
|
||||
LDX RIGHT
|
||||
LDA HEXTAB,X
|
||||
JSR COUT
|
||||
LDA #160
|
||||
JSR COUT
|
||||
INY
|
||||
CPY #BYTES
|
||||
BNE :DLP
|
||||
*
|
||||
PRN " ",8D
|
||||
*
|
||||
INC CNT1
|
||||
LDA CNT1
|
||||
CMP #20
|
||||
BNE :NOWAIT
|
||||
_WAIT
|
||||
LDA #0
|
||||
STA CNT1
|
||||
:NOWAIT
|
||||
LDA LINE
|
||||
CLC
|
||||
ADC #BYTES
|
||||
BCC :NOADDHI
|
||||
INC LINE+1
|
||||
:NOADDHI
|
||||
*
|
||||
** NOW CHECK IF <= BINARY LENGTH
|
||||
*
|
||||
STA LINE
|
||||
*
|
||||
LDA LISTING
|
||||
ADC LDLEN
|
||||
STA TEMP
|
||||
LDA LISTING+1
|
||||
ADC LDLEN+1
|
||||
STA TEMP+1
|
||||
*
|
||||
LDA LINE+1
|
||||
CMP TEMP+1
|
||||
BNE :RELOOP
|
||||
LDA LINE
|
||||
CMP TEMP
|
||||
BEQ :RELOOP
|
||||
BCS :QUITLP
|
||||
:RELOOP
|
||||
JMP :HEXLP1
|
||||
:QUITLP
|
||||
RTS
|
||||
:TXTDISP
|
||||
ERRH :BASIC
|
||||
SCAT "OPEN ";FNAME;#100
|
||||
CMD RETURN
|
||||
SCAT "READ ";FNAME;#100
|
||||
CMD RETURN
|
||||
ERRH :TXTDONE
|
||||
LDY #0
|
||||
STY CNT2
|
||||
:TLP0
|
||||
LDY #1
|
||||
STY CNT1
|
||||
:TLP1
|
||||
GKEY
|
||||
LDY CNT1
|
||||
*AND #$0F
|
||||
STA LINE,Y
|
||||
CMP #$8D ; IS IT RETURN CHAR?
|
||||
BEQ :TCONT
|
||||
CPY #255
|
||||
BEQ :TCONT
|
||||
INC CNT1
|
||||
JMP :TLP1
|
||||
:TCONT
|
||||
INC CNT2
|
||||
LDY CNT1
|
||||
STY LINE ; STORE LENGTH
|
||||
SPRN LINE
|
||||
LDY CNT2
|
||||
CPY #20
|
||||
BNE :TCON
|
||||
:KW
|
||||
LDA $C000 ; CHECK FOR KEYPRESS
|
||||
BPL :KW ; KEEP WAITING
|
||||
AND #$7F ; TURN OFF BIT 7
|
||||
STA $C010 ; CLEAR KEYBOARD STROBE
|
||||
LDY #0
|
||||
STY CNT2
|
||||
:TCON
|
||||
JMP :TLP0
|
||||
:TXTDONE
|
||||
SCAT "CLOSE ";FNAME;#100
|
||||
CMD RETURN
|
||||
PLA
|
||||
JMP REENTRY
|
||||
*
|
||||
*** BASIC LISTING
|
||||
*
|
||||
:BASIC
|
||||
CMD "CLOSE"
|
||||
PRN "TYPE [LIST] TO READ",8D
|
||||
PRN "THE BASIC LISTING.",8D8D
|
||||
SCAT "LOAD ";FNAME;#100
|
||||
JMP REENTRY
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* VARIABLES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
FTYPE DS 2
|
||||
TFOUND DS 1
|
||||
FNAME DS 50
|
||||
CNT1 DS 2
|
||||
CNT2 DS 1
|
||||
TEMP DS 2
|
||||
LDADDR DS 2
|
||||
LDLEN DS 2
|
||||
LEFT DS 1
|
||||
RIGHT DS 2
|
||||
LINE DS 256
|
||||
BLOAD1 DS 256
|
||||
BLOAD2 DS 256
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* LOW-LEVEL ROUTINES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
PUT MIN.LIB.REQUIRED
|
||||
*
|
||||
** INDIVIDUAL SUBROUTINES
|
||||
*
|
||||
*** FILEIO
|
||||
*
|
||||
PUT MIN.SUB.FPRINT
|
||||
PUT MIN.SUB.DOSCMD
|
||||
PUT MIN.SUB.FPSTR
|
||||
*
|
||||
*** STDIO
|
||||
*
|
||||
PUT MIN.SUB.DPRINT
|
||||
PUT MIN.SUB.XPRINT
|
||||
PUT MIN.SUB.SINPUT
|
||||
*
|
||||
*** STRINGS
|
||||
*
|
||||
PUT MIN.SUB.STRCAT
|
||||
PUT MIN.SUB.PRNSTR
|
||||
*
|
3
source/disk19_demo_builds_1/GO.MAKEEXEC
Normal file
3
source/disk19_demo_builds_1/GO.MAKEEXEC
Normal file
|
@ -0,0 +1,3 @@
|
|||
BLOAD MAKEEXEC
|
||||
CALL -151
|
||||
6000G
|
3
source/disk19_demo_builds_1/GO.MINIFY
Normal file
3
source/disk19_demo_builds_1/GO.MINIFY
Normal file
|
@ -0,0 +1,3 @@
|
|||
BLOAD MINIFY
|
||||
CALL -151
|
||||
7000G
|
3
source/disk19_demo_builds_1/GO.RDF
Normal file
3
source/disk19_demo_builds_1/GO.RDF
Normal file
|
@ -0,0 +1,3 @@
|
|||
BLOAD RDF
|
||||
CALL -151
|
||||
7000G
|
1963
source/disk19_demo_builds_1/MAKEEXEC
Normal file
1963
source/disk19_demo_builds_1/MAKEEXEC
Normal file
File diff suppressed because it is too large
Load Diff
1624
source/disk19_demo_builds_1/MAKEEXEC.S
Normal file
1624
source/disk19_demo_builds_1/MAKEEXEC.S
Normal file
File diff suppressed because it is too large
Load Diff
3424
source/disk19_demo_builds_1/MAKEMAZE
Normal file
3424
source/disk19_demo_builds_1/MAKEMAZE
Normal file
File diff suppressed because it is too large
Load Diff
5986
source/disk19_demo_builds_1/MAKEMAZE.S
Normal file
5986
source/disk19_demo_builds_1/MAKEMAZE.S
Normal file
File diff suppressed because it is too large
Load Diff
2425
source/disk19_demo_builds_1/MINIFY
Normal file
2425
source/disk19_demo_builds_1/MINIFY
Normal file
File diff suppressed because it is too large
Load Diff
3612
source/disk19_demo_builds_1/MINIFY.S
Normal file
3612
source/disk19_demo_builds_1/MINIFY.S
Normal file
File diff suppressed because it is too large
Load Diff
2756
source/disk19_demo_builds_1/RDF
Normal file
2756
source/disk19_demo_builds_1/RDF
Normal file
File diff suppressed because it is too large
Load Diff
2635
source/disk19_demo_builds_1/RDF.S
Normal file
2635
source/disk19_demo_builds_1/RDF.S
Normal file
File diff suppressed because it is too large
Load Diff
BIN
source/disk19_demo_builds_1/T.MAKEEXEC
Normal file
BIN
source/disk19_demo_builds_1/T.MAKEEXEC
Normal file
Binary file not shown.
599
source/disk19_demo_builds_1/T.MAKEMAZE
Normal file
599
source/disk19_demo_builds_1/T.MAKEMAZE
Normal file
|
@ -0,0 +1,599 @@
|
|||
********************************
|
||||
* *
|
||||
* PERFECT MAZE GENERATOR *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
** ASSEMBLER DIRECTIVES
|
||||
*
|
||||
CYC AVE
|
||||
EXP ONLY ; TURN OFF LATER
|
||||
DSK MAKEMAZE
|
||||
TR ON
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
PUT MIN.VARS.REQUIRED
|
||||
USE MIN.MAC.REQUIRED
|
||||
USE MIN.MAC.ARRAYS
|
||||
USE MIN.MAC.MATH
|
||||
USE MIN.MAC.STDIO
|
||||
PUT MIN.HOOKS.REQUIRED
|
||||
PUT MIN.HOOKS.STDIO
|
||||
PUT MIN.HOOKS.MATH
|
||||
PUT MIN.HOOKS.ARRAYS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* CONSTANT DECLARATIONS *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
XLEN KBD "ENTER MAZE SIZE"
|
||||
XNUM EQU 2*XLEN
|
||||
BAS EQU $2000 ; BASE ADDRESS FOR ARRAYS
|
||||
YLEN EQU XLEN ; CURRENT ALGO ONLY DOES SQUARE
|
||||
XMAX EQU XLEN+1 ; ADD EXTRA COLUMN
|
||||
YMAX EQU YLEN+1 ; ADD EXTRA ROW
|
||||
ASZ EQU XMAX*YMAX+10 ; ARRAY SIZE+INFO BYTES
|
||||
XSTAKS EQU ASZ*2+1 ; COLUMN STACK SIZE; X * Y + 1
|
||||
YSTAKS EQU ASZ*2+1 ; ROW STACK SIZE; X * Y + 1
|
||||
*
|
||||
SOUTHW EQU BAS ; SOUTH WALLS ARRAY
|
||||
WESTW EQU ASZ+BAS ; WEST WALLS ARRAY
|
||||
VISITED EQU 2*ASZ+BAS ; CELLS VISITED
|
||||
XSTACK EQU 3*ASZ+BAS ; STACK FOR COLUMNS
|
||||
YSTACK EQU 3*ASZ+BAS+XSTAKS ; STACK FOR ROWS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* MAIN PROGRAM LOOP *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
INIT
|
||||
*
|
||||
JSR HOME
|
||||
PRN "INITIALIZING...",8D
|
||||
*
|
||||
JSR :SETVARS
|
||||
JSR :OUTWALLS
|
||||
*
|
||||
** GET RANDOM STARTING POINT
|
||||
*
|
||||
RNDB #2;#<XLEN ; RANDOM STARTING POINT
|
||||
STA XX ; BETWEEN 2 AND XLEN LOBYTE
|
||||
RNDB #2;#<YLEN ; RANDOM STARTING POINT
|
||||
STA YY ; BETWEEN 2 AND YLEN LOBYTE
|
||||
LDA #>XLEN ; IF XLEN HIBYTE IS 0,
|
||||
CMP #0 ; THEN SKIP SETTING XX HIBYTE
|
||||
BEQ :SKIPHI
|
||||
LDA #>YLEN ; IF YLEN HIBYTE IS 0,
|
||||
CMP #0 ; THEN SKIP SETTING YY HIBYTE
|
||||
BEQ :SKIPHI
|
||||
RNDB #1;#>XLEN ; RANDOMLY SET XX HIBYTE
|
||||
STA XX+1
|
||||
RNDB #1;#>YLEN ; RANDOMLY SET YY HIBYTE
|
||||
STA YY+1
|
||||
JMP BUILD
|
||||
:SKIPHI ; JUST SET HIBYTES TO 0
|
||||
LDA #0
|
||||
STA XX+1
|
||||
STA YY+1
|
||||
*
|
||||
JMP BUILD
|
||||
*
|
||||
********************************
|
||||
*
|
||||
:SETVARS
|
||||
*
|
||||
** DIM ARRAYS AND FILL
|
||||
*
|
||||
DIM162 #SOUTHW;#XMAX;#YMAX;#1;#1
|
||||
DIM162 #WESTW;#XMAX;#YMAX;#1;#1
|
||||
DIM162 #VISITED;#XMAX;#YMAX;#1;#0
|
||||
DIM161 #XSTACK;#XSTAKS;#2;#0
|
||||
DIM161 #YSTACK;#YSTAKS;#2;#0
|
||||
*
|
||||
** NOW ASSIGN VARIABLE VALUES
|
||||
*
|
||||
LDA #0
|
||||
STA SPTR ; INIT STACK POINTER
|
||||
STA V0
|
||||
LDA #1
|
||||
STA V1
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
*
|
||||
:OUTWALLS
|
||||
*
|
||||
** MAKE COLUMN MIN AND MAX TO BE ALL
|
||||
** WALL (CODE: 1).
|
||||
*
|
||||
LDA #0 ; CLEAR ALL TO 0 FIRST
|
||||
STA XX
|
||||
STA YY
|
||||
STA XX+1
|
||||
STA YY+1
|
||||
JMP :COLCONT ; SKIP FIRST INCREMENT
|
||||
*
|
||||
:COLEDGE
|
||||
LDA XX
|
||||
CLC
|
||||
ADC #1
|
||||
STA XX
|
||||
BCC :COLCONT ; IF CARRY SET, THEN INC HIBYTE
|
||||
INC XX+1
|
||||
:COLCONT
|
||||
PUT162 #V1;#VISITED;XX;#0
|
||||
PUT162 #V1;#VISITED;XX;#YMAX-1
|
||||
LDA XX
|
||||
CMP #<XMAX-1 ; IF XX LO < MAX SIZE, REPEAT
|
||||
BNE :COLEDGE
|
||||
LDA XX+1 ; TEST HI BIT
|
||||
CMP #>XMAX ; IF XX HI < MAX HI, REPEAT
|
||||
BNE :COLEDGE
|
||||
*
|
||||
** MAKE MIN AND MAX ROWS TO BE ALL WALL
|
||||
*
|
||||
JMP :ROWCONT ; SKIP FIRST INCREMENT
|
||||
*
|
||||
:ROWEDGE
|
||||
LDA YY
|
||||
CLC
|
||||
ADC #1
|
||||
STA YY
|
||||
BCC :ROWCONT ; IF CARRY SET, INC HIBYTE
|
||||
INC YY+1
|
||||
:ROWCONT
|
||||
PUT162 #V1;#VISITED;#0;YY
|
||||
PUT162 #V1;#VISITED;#XMAX-1;YY
|
||||
LDA YY
|
||||
CMP #<YMAX-1 ; IF YY LO < YMAX LO, REPEAT
|
||||
BNE :ROWEDGE
|
||||
LDA YY+1
|
||||
CMP #>YMAX ; IF YY HI < YMAX HI, REPEAT
|
||||
BNE :ROWEDGE
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* BUILD THE MAZE *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
BUILD
|
||||
*
|
||||
PRN "BUILDING MAZE...",8D8D
|
||||
JMP CONTSPTR ; SKIP FIRST INC
|
||||
*
|
||||
********************************
|
||||
*
|
||||
STAKPUSH
|
||||
*
|
||||
LDA SPTR ; INCREMENT STACK POINTER
|
||||
CLC
|
||||
ADC #1
|
||||
STA SPTR
|
||||
BCC CONTSPTR ; IF CARRY SET, INC POINTER HI
|
||||
INC SPTR+1
|
||||
CONTSPTR
|
||||
PUT161 #XX;#XSTACK;SPTR ; PUT COL ON STACK
|
||||
PUT161 #YY;#YSTACK;SPTR ; PUT ROW ON STACK
|
||||
PUT162 #V1;#VISITED;XX;YY ; MARK BLOCK AS VISITED
|
||||
*
|
||||
********************************
|
||||
*
|
||||
CHECKALL
|
||||
*
|
||||
** CHECKS ALL ADJACENT BLOCKS FOR A WALL. IF
|
||||
** COMPLETELY SURROUNDED, POP THE STACK AND
|
||||
** AND START OVER UNTIL.
|
||||
*
|
||||
LDA YY+1 ; COPY HI BYTES OF XX,YY FIRST
|
||||
STA YP1+1
|
||||
STA YM1+1
|
||||
LDA XX+1
|
||||
STA XP1+1
|
||||
STA XM1+1
|
||||
*
|
||||
LDA YY ; CALC AND STORE YY+1
|
||||
CLC
|
||||
ADC #1
|
||||
STA YP1
|
||||
BCC :YP1CNT ; IF CARRY SET, INC YYP1 HI
|
||||
INC YP1+1
|
||||
:YP1CNT
|
||||
LDA XX ; CALC AND STORE XX+1
|
||||
CLC
|
||||
ADC #1
|
||||
STA XP1
|
||||
BCC :XP1CNT ; IF CARRY SET, INC XP1 HI
|
||||
INC XP1+1
|
||||
:XP1CNT
|
||||
LDA YY ; CALC AND STORE YY-1
|
||||
SEC
|
||||
SBC #1
|
||||
STA YM1
|
||||
BCS :YM1CNT ; IF CARRY CLEAR, DEC YM1 HI
|
||||
DEC YM1+1
|
||||
:YM1CNT
|
||||
LDA XX ; CALC AND STORE XX-1
|
||||
SEC
|
||||
SBC #1
|
||||
STA XM1
|
||||
BCS :XM1CNT ; IF CARRY CLEAR, DEC XM1 HI
|
||||
DEC XM1+1
|
||||
:XM1CNT
|
||||
*JSR CELLPOS
|
||||
*
|
||||
** NOW CHECK ADJACENT CELLS FOR WALLS
|
||||
*
|
||||
:IF1 ; IF VISITED(XX,YY+1) = 1
|
||||
LDA YY+1 ; IF YY HI BYTE = YMAX HI BYTE,
|
||||
CMP #>YMAX ; THEN TEST YY LOW BYTE
|
||||
BNE :IF1TEST
|
||||
LDA YY
|
||||
CMP #<YMAX ; IF YY LOBYTE = YMAX LOBYTE, THEN
|
||||
BEQ :IF2 ; AUTOMATICALLY ASSUME ITS A WALL
|
||||
*
|
||||
:IF1TEST
|
||||
GET162 #VISITED;XX;YP1
|
||||
LDA RETURN
|
||||
CMP #1
|
||||
BEQ :IF2 ; IF CELL BELOW IS A WALL
|
||||
; CONTINUE TESTING OTHER
|
||||
; ADJACENT CELLS
|
||||
JMP DOMOVE ; OTHERWISE, EXIT CONDITIONAL
|
||||
*
|
||||
:IF2 ; IF VISITED(X+1,Y) = 1
|
||||
*
|
||||
LDA XX+1 ; IF XX HI BYTE = XMAX HIBYTE
|
||||
CMP #>XMAX ; THEN TEST LOBYTE
|
||||
BNE :IF2TEST
|
||||
LDA XX ; IF XX LOBYTE = XMAX LOBYTE
|
||||
CMP #<XMAX-1 ; THEN ASSUME RIGHT CELL = WALL
|
||||
BEQ :IF3
|
||||
:IF2TEST
|
||||
GET162 #VISITED;XP1;YY ; IF CELL TO RIGHT
|
||||
LDA RETURN ; IS A WALL, THEN
|
||||
CMP #1 ; CONTINUE CELL TESTING;
|
||||
BEQ :IF3 ; ELSE, REPEAT MOVE
|
||||
JMP DOMOVE
|
||||
*
|
||||
:IF3 ; IF VISITED(XX,YY-1) = 1
|
||||
LDA YY+1 ; IF YY HIBYTE = 0 THEN TEST
|
||||
CMP #0 ; LOBYTE
|
||||
BNE :IF3TEST
|
||||
LDA YY ; IF YY LOBYTE = 0 THEN
|
||||
CMP #0 ; ASSUME UPPER CELL = WALL
|
||||
BEQ :IF4 ; AND CONTINUE TESTING
|
||||
:IF3TEST
|
||||
GET162 #VISITED;XX;YM1
|
||||
LDA RETURN ; IF CELL ABOVE IS WALL THEN
|
||||
CMP #1 ; CONTINUE TESTING CELLS;
|
||||
BEQ :IF4 ; ELSE, REPEAT MOVE
|
||||
JMP DOMOVE
|
||||
*
|
||||
:IF4 ; IF VISITED(XX-1,YY) = 1
|
||||
LDA XX+1 ; IF XX HIBYTE = 0
|
||||
CMP #0 ; THEN TEST LOBYTES
|
||||
BNE :IF4TEST
|
||||
LDA XX ; IF XX LOBYTE = 0
|
||||
CMP #0 ; THEN ASSUME LEFT CELL = WALL
|
||||
BEQ :POP ; AND POP THE STACK
|
||||
:IF4TEST
|
||||
GET162 #VISITED;XM1;YY
|
||||
LDA RETURN ; IF LEFT CELL = 1
|
||||
CMP #1 ; THEN ALL ADJACENT CELLS ARE WALLS
|
||||
BEQ :POP ; SO POP THE STACK
|
||||
*
|
||||
JMP DOMOVE ; OTHERWISE, REPEAT MOVING
|
||||
*
|
||||
********************************
|
||||
*
|
||||
:POP
|
||||
*
|
||||
GET161 #XSTACK;SPTR ; GET NEW XX POSITION
|
||||
LDA RETURN
|
||||
STA XX ; STORE LO BYTE
|
||||
LDA RETURN+1
|
||||
STA XX+1 ; STORE HI BYTE
|
||||
GET161 #YSTACK;SPTR
|
||||
LDA RETURN ; GET NEW Y POSITION
|
||||
STA YY
|
||||
LDA RETURN+1
|
||||
STA YY+1
|
||||
LDA SPTR ; POP STACK
|
||||
SEC
|
||||
SBC #1
|
||||
STA SPTR
|
||||
BCS :SPCNT2 ; IF CARRY NOT SET, DEC HIBYTE
|
||||
DEC SPTR+1
|
||||
:SPCNT2
|
||||
LDA SPTR+1 ; IF POINTER HIBYTE > 0
|
||||
CMP #0 ; THEN REPEAT MOVEMENT
|
||||
BNE :DOREPEAT
|
||||
LDA SPTR ; OTHERWISE, TEST LOBYTE
|
||||
CMP #1 ; IF STILL MORE ON STACK
|
||||
BEQ :DOREPEAT
|
||||
BCS :DOREPEAT ; THEN REPEAT MOVEMENT
|
||||
JMP DISPMAZE ; OTHERWISE, FINISHED!
|
||||
*
|
||||
:DOREPEAT
|
||||
JMP CHECKALL
|
||||
*
|
||||
********************************
|
||||
*
|
||||
DOMOVE
|
||||
*
|
||||
** MOVE IN A RANDOM DIRECTION
|
||||
*
|
||||
JSR RAND8
|
||||
CMP #64 ; IF RND < 64
|
||||
BCC :MVDJ
|
||||
CMP #128 ; ELSE IF RND < 128
|
||||
BCC :MVRJ
|
||||
CMP #192 ; ELSE IF RND < 192
|
||||
BCC :MVUPJ
|
||||
JMP :MVLEFT ; ELSE RND IS > 191
|
||||
:MVUPJ JMP :MVUP
|
||||
:MVRJ JMP :MVRIGHT
|
||||
:MVDJ JMP :MVDOWN
|
||||
*
|
||||
:MVDOWN
|
||||
LDA YY+1 ; IF YY HIBYTE = YMAX HIBYTE
|
||||
CMP #>YMAX ; THEN TEST LOBYTES
|
||||
BNE :DTEST ; OTHERWISE, TEST CELL BELOW
|
||||
LDA YY
|
||||
CMP #<YMAX ; IF YY LOBYTE = YMAX LOBYTE
|
||||
BEQ :DNO ; THEN ASSUME CELL BELOW = WALL
|
||||
:DTEST
|
||||
GET162 #VISITED;XX;YP1
|
||||
LDA RETURN
|
||||
CMP #0 ; IF CELL BELOW NOT A WALL
|
||||
BEQ :DOWNGO ; THEN MOVE DOWN
|
||||
:DNO
|
||||
JMP DOMOVE ; ELSE, TRY MOVING ELSEWHERE
|
||||
:DOWNGO
|
||||
PUT162 #V0;#SOUTHW;XX;YY ; PUT 0 AT CURRENT POSITION
|
||||
LDA YP1 ; INCREASE YY POSITION (MOVE DOWN)
|
||||
STA YY
|
||||
LDA YP1+1
|
||||
STA YY+1
|
||||
:DOWNC
|
||||
JMP STAKPUSH ; PUSH POSITION TO STACK, REPEAT
|
||||
*
|
||||
:MVRIGHT
|
||||
LDA XX+1 ; IF XX HIBYTE = XMAX HIBYTE
|
||||
CMP #>XMAX ; THEN TEST LOW BYTE
|
||||
BNE :RTEST ; ELSE CONTINUE CELL CHECK
|
||||
LDA XX
|
||||
CMP #<XMAX-1 ; IF XX LOBYTE = XMAX LOBYTE
|
||||
BEQ :RNO ; THEN ASSUME WALL TO RIGHT
|
||||
; AND SKIP THE CHECK
|
||||
:RTEST
|
||||
GET162 #VISITED;XP1;YY
|
||||
LDA RETURN ; IF CELL TO RIGHT IS NOT WALL
|
||||
CMP #0 ; THEN MOVE THERE
|
||||
BEQ :RIGHTGO
|
||||
:RNO
|
||||
JMP DOMOVE ; OTHERWISE, TRY MOVING ELSEWHERE
|
||||
:RIGHTGO
|
||||
PUT162 #V0;#WESTW;XP1;YY ; MARK RIGHT CELL AS EMPTY
|
||||
LDA XP1 ; MOVE TO RIGHT CELL
|
||||
STA XX
|
||||
LDA XP1+1
|
||||
STA XX+1
|
||||
:RIGHTC
|
||||
JMP STAKPUSH
|
||||
*
|
||||
:MVUP
|
||||
LDA YY+1 ; IF YY HIBYTE != 0 THEN
|
||||
CMP #0 ; SKIP LOBYTE TEST
|
||||
BNE :UTEST
|
||||
LDA YY ; IF YY LOBYTE = 0 THEN
|
||||
CMP #0 ; ASSUME UP CELL IS WALL
|
||||
BEQ :UNO ; AND MOVE ELSEWHERE
|
||||
:UTEST
|
||||
GET162 #VISITED;XX;YM1
|
||||
LDA RETURN ; IF VISITED(XX,YY) = 0
|
||||
CMP #0 ; (NO WALL) THEN
|
||||
BEQ :UPGO ; MOVE ON UP THERE
|
||||
:UNO
|
||||
JMP DOMOVE
|
||||
:UPGO
|
||||
PUT162 #V0;#SOUTHW;XX;YM1
|
||||
LDA YM1 ; MOVE UP ONE CELL
|
||||
STA YY
|
||||
LDA YM1+1
|
||||
STA YY+1
|
||||
:UPC
|
||||
JMP STAKPUSH
|
||||
*
|
||||
:MVLEFT
|
||||
LDA XX+1 ; IF XX HIBYTE != 0 THEN
|
||||
CMP #0 ; SKIP LOBYTE TEST
|
||||
BNE :LTEST
|
||||
LDA XX ; IF XX LOBYTE = 0
|
||||
CMP #0 ; THEN ASSME LEFT CELL IS WALL
|
||||
BEQ :LNO ; AND TRY TO MOVE ELSEWHERE
|
||||
:LTEST
|
||||
GET162 #VISITED;XM1;YY
|
||||
LDA RETURN ; IF LEFT CELL IS NOT A WALL
|
||||
CMP #0 ; THEN LET'S MOVE THERE
|
||||
BEQ :LEFTGO
|
||||
:LNO
|
||||
JMP DOMOVE
|
||||
:LEFTGO
|
||||
PUT162 #V0;#WESTW;XX;YY
|
||||
LDA XM1 ; MOVE ONE CELL LEFT
|
||||
STA XX
|
||||
LDA XM1+1
|
||||
STA XX+1
|
||||
:LEFTC
|
||||
JMP STAKPUSH
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* DISPLAY THE MAZE *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
DISPMAZE
|
||||
*
|
||||
** SEND MAZE TO DISPLAY OUTPUT, FORMATTED
|
||||
*
|
||||
PRN "PRINTING...",8D8D
|
||||
LDA #0
|
||||
STA XX
|
||||
:XLOOP ; PRINT FIRST LINE OF WALLS
|
||||
INC XX
|
||||
PRN "X"
|
||||
LDA XX
|
||||
CMP #XNUM-1
|
||||
BNE :XLOOP
|
||||
PRN " ",8D
|
||||
*
|
||||
LDA #0 ; RESET XX,YY
|
||||
STA XX+1
|
||||
STA YY+1
|
||||
LDA #1
|
||||
STA XX
|
||||
STA YY
|
||||
WLP
|
||||
*
|
||||
** IF WESTW(X,Y) == 0
|
||||
*
|
||||
GET162 #WESTW;XX;YY
|
||||
LDA RETURN
|
||||
CMP #0
|
||||
BEQ NOWALLW ; THEN PRINT ...
|
||||
YESWALLW ; ELSE PRINT X..
|
||||
PRN "X "
|
||||
JMP CONTWLP
|
||||
NOWALLW
|
||||
PRN " "
|
||||
*
|
||||
CONTWLP
|
||||
LDA XX ; INCREASE XX
|
||||
CLC
|
||||
ADC #1 ; LOBYTE FIRST
|
||||
STA XX
|
||||
BCC :SKIPHI ; IF HI = 0, SKIP INC
|
||||
INC XX+1
|
||||
:SKIPHI
|
||||
LDA XX+1 ; IF HIBYTE != XMAX HI
|
||||
CMP #>XMAX
|
||||
BNE WLP ; THEN REPEAT
|
||||
LDA XX ; OTHERWISE, TEST LOWS
|
||||
CMP #<XMAX-1 ; IF LOBYTE != XMAX-1
|
||||
BNE WLP ; REPEAT
|
||||
*
|
||||
PRN "X",8D ; OTHERWISE, GO TO NEXT LINE
|
||||
*
|
||||
LDA #1 ; RESET XX COUNTER
|
||||
STA XX
|
||||
LDA #0
|
||||
STA XX+1
|
||||
*
|
||||
** IF SOUTHW(X,Y) == 0
|
||||
*
|
||||
SLP
|
||||
GET162 #SOUTHW;XX;YY
|
||||
LDA RETURN
|
||||
CMP #0
|
||||
BEQ NOSOUTH ; THEN PRINT X..
|
||||
YSOUTH ; ELSE PRINT XXX
|
||||
PRN "XX"
|
||||
JMP CONTSLP
|
||||
NOSOUTH
|
||||
PRN "X "
|
||||
CONTSLP
|
||||
LDA XX ; INCREASE XX BY 1
|
||||
CLC
|
||||
ADC #1
|
||||
STA XX
|
||||
BCC :SKIPHI2 ; SKIP HI INC IF NO CARRY
|
||||
INC XX+1
|
||||
:SKIPHI2
|
||||
LDA XX+1 ; TEST HIBYTE OF XX
|
||||
CMP #>XMAX ; IF HI != XMAX HI
|
||||
BNE SLP ; REPEAT
|
||||
LDA XX ; ELSE, TEST LOBYTE
|
||||
CMP #<XMAX-1 ; IF XX LO != XMAX LO - 1
|
||||
BNE SLP ; REPEAT
|
||||
*
|
||||
PRN "X",8D ; OTHERWISE, NEW LINE
|
||||
*
|
||||
LDA #0 ; RESET XX
|
||||
STA XX+1
|
||||
LDA #1
|
||||
STA XX
|
||||
LDA YY ; INCREASE YY BY 1
|
||||
CLC
|
||||
ADC #1
|
||||
STA YY
|
||||
BCC :SKIP ; IF NO CARRY, SKIP HI INC
|
||||
INC YY+1
|
||||
:SKIP
|
||||
LDA YY+1 ; IF YY HI != YMAX HI
|
||||
CMP #>YMAX ; THEN NOT DONE; REPEAT LOOPS
|
||||
BNE REPT
|
||||
LDA YY ; ELSE IF YY LO != YMAX LO
|
||||
CMP #<YMAX-1 ; THEN NOT DONE; REPEAT LOOPS
|
||||
BEQ DISPEXIT ; OTHERWISE, DONE!
|
||||
REPT JMP WLP
|
||||
*
|
||||
DISPEXIT
|
||||
*
|
||||
_WAIT
|
||||
JMP REENTRY
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* VARIABLES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
V0 DS 1 ; USED BECAUSE OF CURRENT
|
||||
V1 DS 1 ; ARRAY DIM LIMITATIONS
|
||||
*
|
||||
XX DS 2 ; CURRENT COLUMN
|
||||
YY DS 2 ; CURRENT ROW
|
||||
SPTR DS 2 ; ARRAY STACK POINTER
|
||||
XP1 DS 2 ; X PLUS ONE
|
||||
XM1 DS 2 ; X MINUS ONE
|
||||
YP1 DS 2 ; Y PLUS ONE
|
||||
YM1 DS 2 ; Y MINUS ONE
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* LOW-LEVEL ROUTINES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
PUT MIN.LIB.REQUIRED
|
||||
*
|
||||
** INDIVIDUAL SUBROUTINES
|
||||
*
|
||||
** ARRAYS
|
||||
*
|
||||
PUT MIN.SUB.ADIM161
|
||||
PUT MIN.SUB.ADIM162
|
||||
PUT MIN.SUB.AGET161
|
||||
PUT MIN.SUB.AGET162
|
||||
PUT MIN.SUB.APUT161
|
||||
PUT MIN.SUB.APUT162
|
||||
*
|
||||
** MATH
|
||||
*
|
||||
PUT MIN.SUB.RAND8
|
||||
PUT MIN.SUB.RANDB
|
||||
*
|
||||
** STDIO
|
||||
*
|
||||
PUT MIN.SUB.DPRINT
|
||||
PUT MIN.SUB.XPRINT
|
||||
*
|
2
source/disk19_demo_builds_1/T.MIN.HOOKS.ARRAYS
Normal file
2
source/disk19_demo_builds_1/T.MIN.HOOKS.ARRAYS
Normal file
|
@ -0,0 +1,2 @@
|
|||
ARRMAX EQU 8192
|
||||
|
43
source/disk19_demo_builds_1/T.MIN.HOOKS.FILEIO
Normal file
43
source/disk19_demo_builds_1/T.MIN.HOOKS.FILEIO
Normal file
|
@ -0,0 +1,43 @@
|
|||
STEP00 EQU $C080
|
||||
STEP01 EQU $C081
|
||||
STEP10 EQU $C082
|
||||
STEP11 EQU $C083
|
||||
STEP20 EQU $C084
|
||||
STEP21 EQU $C085
|
||||
STEP30 EQU $C086
|
||||
STEP31 EQU $C087
|
||||
MOTON EQU $C088
|
||||
MOTOFF EQU $C089
|
||||
DRV0EN EQU $C08A
|
||||
DRV1EN EQU $C08B
|
||||
Q6CLR EQU $C08C
|
||||
Q6SET EQU $C08D
|
||||
Q7CLR EQU $C08E
|
||||
Q7SET EQU $C08F
|
||||
CWRITE EQU $FECD
|
||||
CREAD EQU $FEFD
|
||||
IOB EQU $B7E8
|
||||
|
||||
IOB_SLOT EQU $B7E9
|
||||
IOB_DRIV EQU $B7EA
|
||||
IOB_EVOL EQU $B7EB
|
||||
IOB_TRAK EQU $B7EC
|
||||
IOB_SECT EQU $B7ED
|
||||
IOB_DCTL EQU $B7EE
|
||||
|
||||
IOB_DCTH EQU $B7EF
|
||||
IOB_BUFL EQU $B7F0
|
||||
IOB_BUFH EQU $B7F1
|
||||
IOB_COMM EQU $B7F4 ; COMMAND CODE
|
||||
IOB_ERR EQU $B7F5
|
||||
IOB_AVOL EQU $B7F6
|
||||
IOB_PRES EQU $B7F7
|
||||
IOB_PRED EQU $B7F8
|
||||
RWTS EQU $3D9
|
||||
FCOUT EQU $FDED
|
||||
LANG EQU $AAB6
|
||||
CURLIN EQU $75
|
||||
PROMPT EQU $33
|
||||
FGET EQU $FD0C
|
||||
FGETLN EQU $FD6F
|
||||
DOSERR EQU $DE
|
22
source/disk19_demo_builds_1/T.MIN.HOOKS.MATH
Normal file
22
source/disk19_demo_builds_1/T.MIN.HOOKS.MATH
Normal file
|
@ -0,0 +1,22 @@
|
|||
GETNUM EQU $FFA7
|
||||
RNDL EQU $4E
|
||||
RNDH EQU $4F
|
||||
FAC EQU $9D
|
||||
FSUB EQU $E7A7
|
||||
FADD EQU $E7BE
|
||||
FMULT EQU $E97F
|
||||
FDIV EQU $EA66
|
||||
FMULTT EQU $E982
|
||||
FDIVT EQU $EA69
|
||||
FADDT EQU $E7C1
|
||||
FSUBT EQU $E7AA
|
||||
MOVFM EQU $EAF9
|
||||
MOVMF EQU $EB2B
|
||||
NORM EQU $E82E
|
||||
CONUPK EQU $E9E3
|
||||
FLOG EQU $E941
|
||||
FSQR EQU $EE8D
|
||||
FCOS EQU $EFEA
|
||||
FSIN EQU $EFF1
|
||||
FTAN EQU $F03A
|
||||
FATN EQU $F09E
|
36
source/disk19_demo_builds_1/T.MIN.HOOKS.STDIO
Normal file
36
source/disk19_demo_builds_1/T.MIN.HOOKS.STDIO
Normal file
|
@ -0,0 +1,36 @@
|
|||
COUT1 EQU $FDF0
|
||||
COUT EQU $FDED
|
||||
HOME EQU $FC58
|
||||
VTAB EQU $FC22
|
||||
CURSH EQU $24
|
||||
CURSV EQU $25
|
||||
WNDLEFT EQU $20
|
||||
WNDWIDTH EQU $21
|
||||
WNDTOP EQU $22
|
||||
WNDBOT EQU $23
|
||||
TEXTP1 EQU $0400
|
||||
TEXTP2 EQU $0800
|
||||
PAGE1 EQU $C054
|
||||
PAGE2 EQU $C055
|
||||
S80COL EQU $C01F ; READ ONLY
|
||||
KEYBUFF EQU $0200
|
||||
GSTROBE EQU $C040
|
||||
TXTSET EQU $C051
|
||||
SETWND EQU $FB4B
|
||||
CURADV EQU $FBF4
|
||||
CURBS EQU $FC10
|
||||
CURUP EQU $FC1A
|
||||
CR EQU $FC62
|
||||
LF EQU $FC66
|
||||
CLEOL EQU $FC9C
|
||||
KYBD EQU $C000
|
||||
STROBE EQU $C010
|
||||
GETLN EQU $FD6F
|
||||
GETKEY EQU $FD0C
|
||||
OPAPP EQU $C061
|
||||
CLAPP EQU $C062
|
||||
PREAD EQU $FB1E
|
||||
PB0 EQU $C061
|
||||
PB1 EQU $C062
|
||||
PB2 EQU $C063
|
||||
PB3 EQU $C060
|
1
source/disk19_demo_builds_1/T.MIN.HOOKS.STRINGS
Normal file
1
source/disk19_demo_builds_1/T.MIN.HOOKS.STRINGS
Normal file
|
@ -0,0 +1 @@
|
|||
SCOUT1 EQU $FDF0
|
|
@ -1,23 +1,32 @@
|
|||
__GETRET
|
||||
LDY #255
|
||||
PLA
|
||||
STA :RET
|
||||
PLA
|
||||
STA :RET+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #255
|
||||
:LP
|
||||
INY
|
||||
LDA RETURN,Y
|
||||
STA (ADDR1),Y
|
||||
CPY RETLEN
|
||||
BNE :LP
|
||||
LDA ADDR1+1
|
||||
LDA :RET+1
|
||||
PHA
|
||||
LDA ADDR1
|
||||
LDA :RET
|
||||
PHA
|
||||
RTS
|
||||
:RET DS 2
|
||||
__SETPARM
|
||||
LDY #255
|
||||
PLA
|
||||
STA :RET
|
||||
PLA
|
||||
STA :RET+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
|
@ -27,11 +36,12 @@ __SETPARM
|
|||
STA PARAM,Y
|
||||
CPY PARLEN
|
||||
BNE :LP
|
||||
LDA ADDR1+1
|
||||
LDA :RET+1
|
||||
PHA
|
||||
LDA ADDR1
|
||||
LDA :RET
|
||||
PHA
|
||||
RTS
|
||||
:RET DS 2
|
||||
__DUMP
|
||||
PLA
|
||||
STA :RET
|
||||
|
@ -73,21 +83,21 @@ __DUMP
|
|||
TAX
|
||||
LDA HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA #186 ; :
|
||||
LDA #186
|
||||
JSR $FDF0
|
||||
LDA #160 ; SPC
|
||||
LDA #160
|
||||
JSR $FDF0
|
||||
LDY #0
|
||||
:LP
|
||||
LDA (ADDR3),Y
|
||||
AND #$F0 ; MASK RIGHT
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
STA :LEFT
|
||||
LDA (ADDR3),Y
|
||||
AND #$0F ; MASK LEFT
|
||||
AND #$0F
|
||||
STA :RIGHT
|
||||
LDX :LEFT
|
||||
LDA HEXTAB,X
|
||||
|
@ -177,14 +187,14 @@ __RDMP
|
|||
_PRNT "=============",8D
|
||||
_PRNT "A: "
|
||||
LDA ERRA
|
||||
AND #$F0 ; MASK RIGHT
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
STA :LEFT
|
||||
LDA ERRA
|
||||
AND #$0F ; MASK LEFT
|
||||
AND #$0F
|
||||
STA :RIGHT
|
||||
LDX :LEFT
|
||||
LDA HEXTAB,X
|
||||
|
@ -195,14 +205,14 @@ __RDMP
|
|||
_PRNT " ",8D
|
||||
_PRNT "X: "
|
||||
LDA ERRX
|
||||
AND #$F0 ; MASK RIGHT
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
STA :LEFT
|
||||
LDA ERRX
|
||||
AND #$0F ; MASK LEFT
|
||||
AND #$0F
|
||||
STA :RIGHT
|
||||
LDX :LEFT
|
||||
LDA HEXTAB,X
|
||||
|
@ -213,14 +223,14 @@ __RDMP
|
|||
_PRNT " ",8D
|
||||
_PRNT "Y: "
|
||||
LDA ERRY
|
||||
AND #$F0 ; MASK RIGHT
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
STA :LEFT
|
||||
LDA ERRY
|
||||
AND #$0F ; MASK LEFT
|
||||
AND #$0F
|
||||
STA :RIGHT
|
||||
LDX :LEFT
|
||||
LDA HEXTAB,X
|
||||
|
@ -274,23 +284,23 @@ __ERR
|
|||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :DUMPLEN ; LENGTH OF DUMP
|
||||
STA :DUMPLEN
|
||||
PLA
|
||||
STA :DUMP ; DUMP ADDRESS LO
|
||||
STA :DUMP
|
||||
PLA
|
||||
STA :DUMP+1 ; DUMP HI
|
||||
STA :DUMP+1
|
||||
PLA
|
||||
STA :DMPMSG
|
||||
PLA
|
||||
STA :DMPMSG+1
|
||||
PLA
|
||||
STA :MESG ; ERROR MESSAGE ADDR LO
|
||||
STA :MESG
|
||||
PLA
|
||||
STA :MESG+1 ; HI
|
||||
STA :MESG+1
|
||||
PLA
|
||||
STA :SRID ; SUBROUTINE ID ADDR LO
|
||||
STA :SRID
|
||||
PLA
|
||||
STA :SRID+1 ; SUB ID HI
|
||||
STA :SRID+1
|
||||
_PRNT " ",87878787878D8D
|
||||
_PRNT "ERROR!",8D8D
|
||||
_PRNT "SUBROUTINE: "
|
||||
|
@ -358,7 +368,7 @@ __ERR
|
|||
:KILL
|
||||
_PRNT " ",8D8D
|
||||
_PRNT "BREAK AT: "
|
||||
_DUMP :RET;#2
|
||||
DUMP #:RET;#2
|
||||
JMP $3D0
|
||||
:DUMPLEN DS 1
|
||||
:DUMP DS 2
|
||||
|
@ -366,3 +376,26 @@ __ERR
|
|||
:MESG DS 2
|
||||
:SRID DS 2
|
||||
:RET DS 2
|
||||
__ERRH
|
||||
PLA
|
||||
STA :RET
|
||||
PLA
|
||||
STA :RET+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA #$FFC
|
||||
STA $D8
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA $9D5A
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $9D5B
|
||||
LDA :RET+1
|
||||
PHA
|
||||
LDA :RET
|
||||
PHA
|
||||
RTS
|
||||
:RET DS 2
|
95
source/disk19_demo_builds_1/T.MIN.MAC.ARRAYS
Normal file
95
source/disk19_demo_builds_1/T.MIN.MAC.ARRAYS
Normal file
|
@ -0,0 +1,95 @@
|
|||
DIM81 MAC
|
||||
_ISLIT ]1
|
||||
LDA ]2
|
||||
PHA
|
||||
LDA ]3
|
||||
PHA
|
||||
LDA ]4
|
||||
PHA
|
||||
JSR ADIM81
|
||||
<<<
|
||||
GET81 MAC
|
||||
_ISLIT ]1
|
||||
LDA ]2
|
||||
PHA
|
||||
JSR AGET81
|
||||
<<<
|
||||
PUT81 MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
LDA ]3
|
||||
PHA
|
||||
JSR APUT81
|
||||
<<<
|
||||
DIM82 MAC
|
||||
_ISLIT ]1
|
||||
LDA ]2
|
||||
PHA
|
||||
LDA ]3
|
||||
PHA
|
||||
LDA ]4
|
||||
PHA
|
||||
LDA ]5
|
||||
PHA
|
||||
JSR ADIM82
|
||||
<<<
|
||||
GET82 MAC
|
||||
_ISLIT ]1
|
||||
LDA ]2
|
||||
PHA
|
||||
LDA ]3
|
||||
PHA
|
||||
JSR AGET82
|
||||
<<<
|
||||
PUT82 MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
LDA ]3
|
||||
PHA
|
||||
LDA ]4
|
||||
PHA
|
||||
JSR APUT82
|
||||
<<<
|
||||
DIM161 MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
LDA ]3
|
||||
PHA
|
||||
LDA ]4
|
||||
PHA
|
||||
JSR ADIM161
|
||||
<<<
|
||||
PUT161 MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
_ISLIT ]3
|
||||
JSR APUT161
|
||||
<<<
|
||||
GET161 MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
JSR AGET161
|
||||
<<<
|
||||
DIM162 MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
_ISLIT ]3
|
||||
LDA ]4
|
||||
PHA
|
||||
LDA ]5
|
||||
PHA
|
||||
JSR ADIM162
|
||||
<<<
|
||||
PUT162 MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
_ISLIT ]3
|
||||
_ISLIT ]4
|
||||
JSR APUT162
|
||||
<<<
|
||||
GET162 MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
_ISLIT ]3
|
||||
JSR AGET162
|
||||
<<<
|
|
@ -8,33 +8,26 @@ BSAVE MAC
|
|||
<<<
|
||||
AMODE MAC
|
||||
LDA #1
|
||||
STA $AAB6 ; DOS LANG FLAG
|
||||
STA $75+1 ; NOT IN DIRECT MODE
|
||||
STA $33 ; NOT IN DIRECT MODE
|
||||
STA $AAB6
|
||||
STA $75+1
|
||||
STA $33
|
||||
<<<
|
||||
CMD MAC
|
||||
_ISSTR ]1
|
||||
JSR DOSCMD
|
||||
ASC ]1
|
||||
HEX 8D00
|
||||
<<<
|
||||
FPRN MAC
|
||||
IF ",]1
|
||||
JSR FPRINT
|
||||
ASC ]1
|
||||
HEX 8D00
|
||||
ELSE ; IF PARAM IS ADDR
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
JSR FPSTR ; PRINT STRING
|
||||
ELSE
|
||||
_ISLIT ]1
|
||||
JSR FPSTR
|
||||
FIN
|
||||
<<<
|
||||
FINP MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
_ISLIT ]1
|
||||
JSR FINPUT
|
||||
<<<
|
||||
SLOT MAC
|
||||
|
@ -43,7 +36,7 @@ SLOT MAC
|
|||
ASL SCRATCH
|
||||
ASL SCRATCH
|
||||
ASL SCRATCH
|
||||
ASL SCRATCH ; MUL BY 16
|
||||
ASL SCRATCH
|
||||
LDA SCRATCH
|
||||
STA IOB_SLOT
|
||||
<<<
|
|
@ -16,25 +16,25 @@ MUL16 MAC
|
|||
DIV16 MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
IF S,]3 ; SIGNED
|
||||
IF S,]3
|
||||
JSR SDIVD16
|
||||
ELSE
|
||||
JSR UDIVD16 ; UNSIGNED
|
||||
JSR UDIVD16
|
||||
FIN
|
||||
<<<
|
||||
REM16 MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
IF S,]3 ; SIGNED
|
||||
IF S,]3
|
||||
JSR SREMD16
|
||||
ELSE
|
||||
JSR UREMD16 ; UNSIGNED
|
||||
JSR UREMD16
|
||||
FIN
|
||||
<<<
|
||||
RNDB MAC
|
||||
LDA ]1 ; LOW
|
||||
LDA ]1
|
||||
PHA
|
||||
LDA ]2 ; HIGH
|
||||
LDA ]2
|
||||
PHA
|
||||
JSR RANDB
|
||||
<<<
|
89
source/disk19_demo_builds_1/T.MIN.MAC.REQUIRED
Normal file
89
source/disk19_demo_builds_1/T.MIN.MAC.REQUIRED
Normal file
|
@ -0,0 +1,89 @@
|
|||
_ISLIT MAC
|
||||
IF #=]1
|
||||
LDA ]1/$100
|
||||
PHA
|
||||
LDA ]1
|
||||
PHA
|
||||
ELSE
|
||||
LDA ]1+1
|
||||
PHA
|
||||
LDA ]1
|
||||
PHA
|
||||
FIN
|
||||
<<<
|
||||
_ISSTR MAC
|
||||
IF "=]1
|
||||
JMP STRCONT
|
||||
]STRTMP STR ]1
|
||||
STRCONT
|
||||
LDY #0
|
||||
LDA ]STRTMP
|
||||
STA PARLEN
|
||||
STA PARAM
|
||||
]STRLP1
|
||||
INY
|
||||
LDA ]STRTMP,Y
|
||||
STA PARAM,Y
|
||||
CPY PARLEN
|
||||
BNE ]STRLP1
|
||||
LDA #>PARAM
|
||||
PHA
|
||||
LDA #<PARAM
|
||||
PHA
|
||||
ELSE
|
||||
_ISLIT ]1
|
||||
FIN
|
||||
<<<
|
||||
GRET MAC
|
||||
_ISLIT ]1
|
||||
JSR __GETRET
|
||||
<<<
|
||||
SPAR MAC
|
||||
_ISLIT ]1
|
||||
JSR __SETPARM
|
||||
<<<
|
||||
DUMP MAC
|
||||
_ISLIT ]1
|
||||
LDA ]2
|
||||
PHA
|
||||
JSR __DUMP
|
||||
<<<
|
||||
_PRNT MAC
|
||||
JSR __P
|
||||
ASC ]1
|
||||
HEX 00
|
||||
<<<
|
||||
_WAIT MAC
|
||||
JSR __W
|
||||
<<<
|
||||
_RDUMP MAC
|
||||
JSR __RDMP
|
||||
<<<
|
||||
_ERR MAC
|
||||
_ISLIT ]1
|
||||
_ISLIT ]2
|
||||
_ISLIT ]3
|
||||
_ISLIT ]4
|
||||
LDA ]5
|
||||
PHA
|
||||
JSR __ERR
|
||||
<<<
|
||||
ERRH MAC
|
||||
LDA #1
|
||||
STA $AAB6
|
||||
STA $75+1
|
||||
STA $33
|
||||
LDA #$FF
|
||||
STA $D8
|
||||
IF #=]1
|
||||
LDA ]1
|
||||
STA $9D5A
|
||||
LDA ]1/$100
|
||||
STA $9D5B
|
||||
ELSE
|
||||
LDA ]1
|
||||
STA $9D5A
|
||||
LDA ]1+1
|
||||
STA $9D5B
|
||||
FIN
|
||||
<<<
|
|
@ -5,17 +5,10 @@ PRN MAC
|
|||
HEX 00 ; STRING TERMINATE
|
||||
ELSE ; ELSE, PARAM IS
|
||||
; MEMORY LOCATION
|
||||
LDA #>]1 ; PUSH HIGH BYTE
|
||||
PHA ; TO STACK
|
||||
LDA #<]1 ; PUSH LOW BYTE
|
||||
PHA
|
||||
_ISLIT ]1
|
||||
JSR DPRINT
|
||||
FIN
|
||||
<<<
|
||||
PCR MAC
|
||||
LDA #$8D
|
||||
JSR COUT1
|
||||
<<<
|
||||
INP MAC
|
||||
JSR SINPUT
|
||||
<<<
|
||||
|
@ -64,14 +57,11 @@ RCPOS MAC
|
|||
LDA ($26),Y ; LOW OF ADDR OF CHAR
|
||||
<<<
|
||||
PDL MAC ; GET PADDLE VALUE
|
||||
LDX #]1 ; READ PADDLE # ]1 (USUALLY 0)
|
||||
LDX ]1
|
||||
JSR PREAD ; PADDLE READING STORED IN Y
|
||||
<<<
|
||||
PBX MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
_ISLIT ]1
|
||||
JSR GPBX
|
||||
<<<
|
||||
TVLIN MAC
|
||||
|
@ -118,3 +108,29 @@ TPUT MAC
|
|||
PHA
|
||||
JSR TXTPUT
|
||||
<<<
|
||||
DIE80 MAC
|
||||
LDA #21
|
||||
JSR COUT
|
||||
<<<
|
||||
COL80 MAC
|
||||
LDA #18
|
||||
JSR COUT
|
||||
<<<
|
||||
COL40 MAC
|
||||
LDA #17
|
||||
JSR COUT
|
||||
<<<
|
||||
MTXT0 MAC
|
||||
LDA #24
|
||||
JSR COUT
|
||||
<<<
|
||||
MTXT1 MAC
|
||||
LDA #27
|
||||
JSR COUT
|
||||
<<<
|
||||
WAIT MAC
|
||||
]WTLP LDA $C000
|
||||
BPL ]WTLP
|
||||
AND #$7F
|
||||
STA $C010
|
||||
<<<
|
48
source/disk19_demo_builds_1/T.MIN.MAC.STRINGS
Normal file
48
source/disk19_demo_builds_1/T.MIN.MAC.STRINGS
Normal file
|
@ -0,0 +1,48 @@
|
|||
SCMP MAC
|
||||
_ISSTR ]1
|
||||
_ISSTR ]2
|
||||
JSR STRCMP
|
||||
<<<
|
||||
SCAT MAC
|
||||
_ISSTR ]1
|
||||
_ISSTR ]2
|
||||
LDA ]3 ; MAX SIZE
|
||||
PHA
|
||||
JSR STRCAT
|
||||
<<<
|
||||
SPRN MAC
|
||||
_ISLIT ]1
|
||||
JSR PRNSTR
|
||||
<<<
|
||||
SPOS MAC
|
||||
_ISSTR ]1
|
||||
_ISSTR ]2
|
||||
JSR SUBPOS
|
||||
<<<
|
||||
SCPY MAC
|
||||
_ISSTR ]1
|
||||
LDA ]2
|
||||
PHA
|
||||
LDA ]3
|
||||
PHA
|
||||
LDA ]4
|
||||
PHA
|
||||
JSR SUBCOPY
|
||||
<<<
|
||||
SDEL MAC
|
||||
_ISLIT ]1
|
||||
LDA ]2
|
||||
PHA
|
||||
LDA ]3
|
||||
PHA
|
||||
JSR SUBDEL
|
||||
<<<
|
||||
SINS MAC
|
||||
_ISLIT ]1
|
||||
LDA ]2
|
||||
PHA
|
||||
LDA ]3
|
||||
PHA
|
||||
_ISSTR ]4
|
||||
JSR SUBINS
|
||||
<<<
|
100
source/disk19_demo_builds_1/T.MIN.SUB.ADIM161
Normal file
100
source/disk19_demo_builds_1/T.MIN.SUB.ADIM161
Normal file
|
@ -0,0 +1,100 @@
|
|||
ADIM161
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :FILL
|
||||
PLA
|
||||
STA :ESIZE
|
||||
STA :ESZBAK
|
||||
PLA
|
||||
STA :ASIZE
|
||||
STA :ASZBAK
|
||||
PLA
|
||||
STA :ASIZE+1
|
||||
STA :ASZBAK+1
|
||||
STA SCRATCH
|
||||
PLA
|
||||
STA ADDR1
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
STA ADDR2+1
|
||||
LDY #0
|
||||
LDA #0
|
||||
BEQ :ENTLP
|
||||
:DOADD
|
||||
CLC
|
||||
ADC :ASIZE
|
||||
TAX
|
||||
TYA
|
||||
ADC SCRATCH
|
||||
TAY
|
||||
TXA
|
||||
:LP
|
||||
ASL :ASIZE
|
||||
ROL SCRATCH
|
||||
:ENTLP
|
||||
LSR :ESIZE
|
||||
BCS :DOADD
|
||||
BNE :LP
|
||||
CLC
|
||||
INX
|
||||
INX
|
||||
|
||||
BCC :NOINY
|
||||
INY
|
||||
:NOINY
|
||||
STX :MSIZE
|
||||
STY :MSIZE+1
|
||||
LDA :FILL
|
||||
LDX :MSIZE+1
|
||||
BEQ :PART
|
||||
LDY #0
|
||||
:FULL
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
BNE :FULL
|
||||
INC ADDR1+1
|
||||
DEX
|
||||
BNE :FULL
|
||||
:PART
|
||||
LDX :MSIZE
|
||||
BEQ :MFEXIT
|
||||
LDY #0
|
||||
:PARTLP
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
DEX
|
||||
BNE :PARTLP
|
||||
:MFEXIT
|
||||
LDY #0
|
||||
LDA :ASZBAK
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
LDA :ASZBAK+1
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
LDA :ESZBAK
|
||||
STA (ADDR2),Y
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY ADDR1
|
||||
LDX ADDR1+1
|
||||
LDA :ASZBAK
|
||||
LDA :MSIZE
|
||||
STA RETURN
|
||||
LDA :MSIZE+1
|
||||
STA RETURN+1
|
||||
LDA #2
|
||||
STA RETLEN
|
||||
RTS
|
||||
:MSIZE DS 2
|
||||
:ASIZE DS 2
|
||||
:ESIZE DS 1
|
||||
:ASZBAK DS 2
|
||||
:ESZBAK DS 1
|
||||
:FILL DS 1
|
185
source/disk19_demo_builds_1/T.MIN.SUB.ADIM162
Normal file
185
source/disk19_demo_builds_1/T.MIN.SUB.ADIM162
Normal file
|
@ -0,0 +1,185 @@
|
|||
ADIM162
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :FILL
|
||||
PLA
|
||||
STA :ELEN
|
||||
PLA
|
||||
STA :AYSIZE
|
||||
STA :AYBAK
|
||||
STA :MCAND
|
||||
PLA
|
||||
STA :AYSIZE+1
|
||||
STA :AYBAK+1
|
||||
STA :MCAND+1
|
||||
PLA
|
||||
STA :AXSIZE
|
||||
STA :AXBAK
|
||||
STA :MLIER
|
||||
PLA
|
||||
STA :AXSIZE+1
|
||||
STA :AXBAK+1
|
||||
STA :MLIER+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
STA ADDR4
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
STA ADDR4+1
|
||||
LDA #0
|
||||
STA :PROD+2
|
||||
STA :PROD+3
|
||||
LDX #$10
|
||||
:SHIFT_R
|
||||
LSR :MLIER+1
|
||||
ROR :MLIER
|
||||
BCC :ROT_R
|
||||
LDA :PROD+2
|
||||
CLC
|
||||
ADC :MCAND
|
||||
STA :PROD+2
|
||||
LDA :PROD+3
|
||||
ADC :MCAND+1
|
||||
:ROT_R
|
||||
ROR
|
||||
STA :PROD+3
|
||||
ROR :PROD+2
|
||||
ROR :PROD+1
|
||||
ROR :PROD
|
||||
DEX
|
||||
BNE :SHIFT_R
|
||||
LDA :ELEN
|
||||
STA :MCAND
|
||||
LDA #0
|
||||
STA :MCAND+1
|
||||
LDA :PROD
|
||||
STA :MLIER
|
||||
LDA :PROD+1
|
||||
STA :MLIER+1
|
||||
LDA #0
|
||||
STA :PROD
|
||||
STA :PROD+1
|
||||
STA :PROD+2
|
||||
STA :PROD+3
|
||||
LDX #$10
|
||||
:SHIFTR LSR :MLIER+1
|
||||
ROR :MLIER
|
||||
BCC :ROTR
|
||||
LDA :PROD+2
|
||||
CLC
|
||||
ADC :MCAND
|
||||
STA :PROD+2
|
||||
LDA :PROD+3
|
||||
ADC :MCAND+1
|
||||
:ROTR
|
||||
ROR
|
||||
STA :PROD+3
|
||||
ROR :PROD+2
|
||||
ROR :PROD+1
|
||||
ROR :PROD
|
||||
DEX
|
||||
BNE :SHIFTR
|
||||
CLC
|
||||
LDA :PROD
|
||||
ADC #5
|
||||
STA :PROD
|
||||
BCC :NOCAR
|
||||
INC :PROD+1
|
||||
:NOCAR
|
||||
LDA ERRCTRL
|
||||
CMP #1
|
||||
BEQ :CHKERR
|
||||
JMP :ERREND
|
||||
:CHKERR
|
||||
LDA :PROD+2
|
||||
CMP #0
|
||||
BNE :EMAX
|
||||
LDA :PROD+1
|
||||
CMP #>ARRMAX
|
||||
BCS :CHKCONT
|
||||
BEQ :CHKCONT
|
||||
JMP :ERREND
|
||||
:CHKCONT
|
||||
LDA :PROD
|
||||
CMP #<ARRMAX
|
||||
BCS :EMAX
|
||||
BEQ :EMAX
|
||||
JMP :ERREND
|
||||
:EMAX
|
||||
_ERR #:E_SID;#:E_MSG;#:E_DMP;#:PROD;#18
|
||||
:ERREND
|
||||
LDA :FILL
|
||||
LDX :PROD+1
|
||||
; GO BEYOND A 16BIT VALUE;
|
||||
|
||||
|
||||
|
||||
|
||||
BEQ :PART
|
||||
LDY #0
|
||||
:FULL
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
BNE :FULL
|
||||
INC ADDR1+1
|
||||
DEX
|
||||
BNE :FULL
|
||||
:PART
|
||||
LDX :PROD
|
||||
BEQ :MFEXIT
|
||||
LDY #0
|
||||
:PARTLP
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
DEX
|
||||
BNE :PARTLP
|
||||
:MFEXIT
|
||||
LDY #0
|
||||
LDA :AXBAK
|
||||
STA (ADDR4),Y
|
||||
INY
|
||||
LDA :AXBAK+1
|
||||
STA (ADDR4),Y
|
||||
INY
|
||||
LDA :AYBAK
|
||||
STA (ADDR4),Y
|
||||
INY
|
||||
LDA :AYBAK+1
|
||||
STA (ADDR4),Y
|
||||
INY
|
||||
LDA :ELEN
|
||||
STA (ADDR4),Y
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY ADDR4
|
||||
LDX ADDR4+1
|
||||
LDA :PROD
|
||||
STA RETURN
|
||||
LDA :PROD+1
|
||||
STA RETURN+1
|
||||
LDA :PROD+2
|
||||
STA RETURN+2
|
||||
LDA :PROD+3
|
||||
STA RETURN+3
|
||||
LDA #4
|
||||
STA RETLEN
|
||||
RTS
|
||||
:PROD DS 4
|
||||
:AXSIZE DS 2
|
||||
:AYSIZE DS 2
|
||||
:AXBAK DS 2
|
||||
:AYBAK DS 2
|
||||
:MLIER DS 2
|
||||
:MCAND DS 2
|
||||
:FILL DS 1
|
||||
:ELEN DS 1
|
||||
:E_SID ASC "ADIM162 (DIM162 MACRO)",00
|
||||
:E_DMP ASC ":PROD(4) :AXSIZE(2) :AYSIZE(2)"
|
||||
ASC ":AXBAK(2) :AYBAK(2) :MLIER(2)"
|
||||
ASC ":MCAND(2) :FILL(1) :ELEN(1)",00
|
||||
:E_MSG ASC "ARRAY TOO LARGE!",00
|
119
source/disk19_demo_builds_1/T.MIN.SUB.AGET161
Normal file
119
source/disk19_demo_builds_1/T.MIN.SUB.AGET161
Normal file
|
@ -0,0 +1,119 @@
|
|||
AGET161
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :AIDX
|
||||
STA :IDX
|
||||
PLA
|
||||
STA :AIDX+1
|
||||
STA SCRATCH
|
||||
PLA
|
||||
STA ADDR4 ; ARRAY ADDRESS
|
||||
|
||||
|
||||
PLA
|
||||
STA ADDR4+1
|
||||
LDY #0
|
||||
LDA (ADDR4),Y
|
||||
STA :ASIZE
|
||||
LDY #1
|
||||
LDA (ADDR4),Y
|
||||
STA :ASIZE+1
|
||||
INY
|
||||
LDA (ADDR4),Y
|
||||
STA :ESIZE
|
||||
STA :ESIZEBAK
|
||||
LDA ERRCTRL
|
||||
CMP #1
|
||||
BEQ :CHKERR
|
||||
JMP :ERREND
|
||||
:CHKERR
|
||||
LDA :IDX+1
|
||||
CMP :ASIZE+1
|
||||
BCS :OVFHI
|
||||
JMP :ERREND
|
||||
:OVFHI
|
||||
LDA :IDX
|
||||
CMP :ASIZE
|
||||
BCS :OVF
|
||||
JMP :ERREND
|
||||
:OVF
|
||||
_ERR #:E_SID;#:E_OVF1;#:E_DUMP;#:ESIZE;#9
|
||||
:ERREND
|
||||
LDY #0
|
||||
LDA #0
|
||||
BEQ :ENTLPA
|
||||
:DOADD
|
||||
CLC
|
||||
ADC :AIDX
|
||||
TAX
|
||||
TYA
|
||||
ADC SCRATCH
|
||||
TAY
|
||||
TXA
|
||||
:LPA
|
||||
ASL :AIDX
|
||||
ROL SCRATCH
|
||||
:ENTLPA
|
||||
LSR :ESIZE
|
||||
BCS :DOADD
|
||||
BNE :LPA
|
||||
STX :IDX
|
||||
STY :IDX+1
|
||||
CLC
|
||||
LDA #3
|
||||
ADC :IDX
|
||||
STA :RES
|
||||
BCS :ADDHI
|
||||
JMP :XADD
|
||||
:ADDHI
|
||||
LDA #1
|
||||
ADC :IDX+1
|
||||
STA :IDX+1
|
||||
:XADD
|
||||
LDA :IDX+1
|
||||
STA :RES+1
|
||||
CLC
|
||||
LDA :RES
|
||||
ADC ADDR4
|
||||
STA :RES
|
||||
BCS :ADD1HI
|
||||
JMP :XADD2
|
||||
:ADD1HI
|
||||
INC :RES+1
|
||||
:XADD2
|
||||
LDA :RES+1
|
||||
ADC ADDR4+1
|
||||
STA :RES+1
|
||||
STA ADDR2+1
|
||||
LDA :RES
|
||||
STA ADDR2
|
||||
LDY #0
|
||||
:LP
|
||||
LDA (ADDR2),Y
|
||||
STA RETURN,Y
|
||||
INY
|
||||
CPY :ESIZEBAK
|
||||
BNE :LP
|
||||
LDA :ESIZEBAK
|
||||
STA RETLEN
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDX ADDR2+1
|
||||
LDY ADDR2
|
||||
LDA :ESIZE
|
||||
RTS
|
||||
:ESIZE DS 1
|
||||
:ESIZEBAK DS 1
|
||||
:ASIZE DS 2
|
||||
:AIDX DS 2
|
||||
:IDX DS 2
|
||||
:RES DS 2
|
||||
:E_SID ASC "AGET161 (GET161 MACRO),",00
|
||||
:E_DUMP ASC "DUMPING :ESIZE(1) :ESIZEBAK(1) :ASIZE(2)"
|
||||
ASC ":AIDX(2) :IDX(2) :RES(2)",00
|
||||
:E_OVF1 ASC "OUT OF BOUNDS! INDEX > ARRAY LENGTH",00
|
179
source/disk19_demo_builds_1/T.MIN.SUB.AGET162
Normal file
179
source/disk19_demo_builds_1/T.MIN.SUB.AGET162
Normal file
|
@ -0,0 +1,179 @@
|
|||
AGET162
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :YIDX
|
||||
PLA
|
||||
STA :YIDX+1
|
||||
PLA
|
||||
STA :XIDX
|
||||
PLA
|
||||
STA :XIDX+1
|
||||
PLA
|
||||
STA ADDR4
|
||||
PLA
|
||||
STA ADDR4+1
|
||||
LDY #4
|
||||
LDA (ADDR4),Y
|
||||
STA :ESIZE
|
||||
LDY #0
|
||||
LDA (ADDR4),Y
|
||||
STA :XLEN
|
||||
LDY #1
|
||||
LDA (ADDR4),Y
|
||||
STA :XLEN+1
|
||||
LDY #2
|
||||
LDA (ADDR4),Y
|
||||
STA :YLEN
|
||||
LDY #3
|
||||
LDA (ADDR4),Y
|
||||
STA :YLEN+1
|
||||
LDY #0
|
||||
LDA ERRCTRL
|
||||
CMP #1
|
||||
BEQ :CHKERR
|
||||
JMP :ERREND
|
||||
:CHKERR
|
||||
LDA :XIDX
|
||||
CMP :XLEN
|
||||
BCC :ECONT1
|
||||
LDA :XIDX+1
|
||||
CMP :XLEN+1
|
||||
BEQ :ECONT1
|
||||
BCC :ECONT1
|
||||
_ERR #:E_SID;#:E_XOVF;#:E_DUMP;#:ESIZE;#20
|
||||
:ECONT1
|
||||
LDA :YIDX
|
||||
CMP :YLEN
|
||||
BCC :ECONT2
|
||||
LDA :YIDX+1
|
||||
CMP :YLEN+1
|
||||
BEQ :ECONT2
|
||||
BCC :ECONT2
|
||||
_ERR #:E_SID;#:E_YOVF;#:E_DUMP;#:ESIZE;#20
|
||||
:ECONT2
|
||||
:ERREND
|
||||
LDA :YIDX
|
||||
STA :MLIER
|
||||
LDA :YIDX+1
|
||||
STA :MLIER+1
|
||||
LDA :YLEN
|
||||
STA :MCAND
|
||||
LDA :YLEN+1
|
||||
STA :MCAND+1
|
||||
LDA #00
|
||||
STA :PROD
|
||||
STA :PROD+1
|
||||
STA :PROD+2
|
||||
STA :PROD+3
|
||||
LDX #$10
|
||||
:SHIFT_R
|
||||
LSR :MLIER+1
|
||||
ROR :MLIER
|
||||
BCC :ROT_R
|
||||
LDA :PROD+2
|
||||
CLC
|
||||
ADC :MCAND
|
||||
STA :PROD+2
|
||||
LDA :PROD+3
|
||||
ADC :MCAND+1
|
||||
:ROT_R
|
||||
ROR
|
||||
STA :PROD+3
|
||||
ROR :PROD+2
|
||||
ROR :PROD+1
|
||||
ROR :PROD
|
||||
DEX
|
||||
BNE :SHIFT_R
|
||||
LDA :PROD
|
||||
STA :PBAK
|
||||
LDA :PROD+1
|
||||
STA :PBAK+1
|
||||
LDA :XIDX
|
||||
STA :MLIER
|
||||
LDA :XIDX+1
|
||||
STA :MLIER+1
|
||||
LDA :ESIZE
|
||||
STA :MCAND
|
||||
LDA #0
|
||||
STA :MCAND+1
|
||||
STA :PROD
|
||||
STA :PROD+1
|
||||
STA :PROD+2
|
||||
STA :PROD+3
|
||||
LDX #$10
|
||||
:SHIFTR LSR :MLIER+1
|
||||
ROR :MLIER
|
||||
BCC :ROTR
|
||||
LDA :PROD+2
|
||||
CLC
|
||||
ADC :MCAND
|
||||
STA :PROD+2
|
||||
LDA :PROD+3
|
||||
ADC :MCAND+1
|
||||
:ROTR
|
||||
ROR
|
||||
STA :PROD+3
|
||||
ROR :PROD+2
|
||||
ROR :PROD+1
|
||||
ROR :PROD
|
||||
DEX
|
||||
BNE :SHIFTR
|
||||
CLC
|
||||
LDA :PROD
|
||||
ADC :PBAK
|
||||
STA :PROD
|
||||
LDA :PROD+1
|
||||
ADC :PBAK+1
|
||||
STA :PROD+1
|
||||
CLC
|
||||
LDA :PROD
|
||||
ADC #5
|
||||
STA :PROD
|
||||
BCC :ADD3D
|
||||
INC :PROD+1
|
||||
:ADD3D
|
||||
CLC
|
||||
LDA :PROD
|
||||
ADC ADDR4
|
||||
STA :PROD
|
||||
STA ADDR2
|
||||
LDA :PROD+1
|
||||
ADC ADDR4+1
|
||||
STA :PROD+1
|
||||
STA ADDR2+1
|
||||
LDY #0
|
||||
LDX #0
|
||||
:CLP
|
||||
LDA (ADDR2),Y
|
||||
STA RETURN,Y
|
||||
INY
|
||||
CPY :ESIZE
|
||||
BNE :CLP
|
||||
LDA :ESIZE
|
||||
STA RETLEN
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDX ADDR2+1
|
||||
LDY ADDR2
|
||||
LDA :ESIZE
|
||||
RTS
|
||||
:ESIZE DS 2
|
||||
:XIDX DS 2
|
||||
:YIDX DS 2
|
||||
:MCAND DS 2
|
||||
:MLIER DS 2
|
||||
:PROD DS 4
|
||||
:PBAK DS 2
|
||||
:XLEN DS 2
|
||||
:YLEN DS 2
|
||||
:E_SID ASC "AGET162 (GET162 MACRO)",00
|
||||
:E_DUMP ASC ":ESIZE(2) XIDX(2) YIDX(2) MCAND(2) "
|
||||
ASC "MCAND(2) MLIER(2) PROD(4) PBAK(2) "
|
||||
ASC "XLEN(2) YLEN(2)",00
|
||||
:E_XOVF ASC "OUT OF BOUNDS! X > MAXIMUM",00
|
||||
:E_YOVF ASC "OUT OF BOUNDS! Y > MAX",00
|
122
source/disk19_demo_builds_1/T.MIN.SUB.APUT161
Normal file
122
source/disk19_demo_builds_1/T.MIN.SUB.APUT161
Normal file
|
@ -0,0 +1,122 @@
|
|||
APUT161
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :AIDX
|
||||
STA :IDX
|
||||
PLA
|
||||
STA :AIDX+1
|
||||
STA SCRATCH
|
||||
PLA
|
||||
STA ADDR4 ; ARRAY ADDRESS
|
||||
|
||||
|
||||
PLA
|
||||
STA ADDR4+1
|
||||
PLA
|
||||
STA ADDR3
|
||||
|
||||
PLA
|
||||
STA ADDR3+1
|
||||
LDY #0
|
||||
LDA (ADDR4),Y
|
||||
STA :ASIZE
|
||||
LDY #1
|
||||
LDA (ADDR4),Y
|
||||
STA :ASIZE+1
|
||||
INY
|
||||
LDA (ADDR4),Y
|
||||
STA :ESIZE
|
||||
STA :ESIZEBAK
|
||||
LDA ERRCTRL
|
||||
CMP #1
|
||||
BEQ :CHKERR
|
||||
JMP :ERREND
|
||||
:CHKERR
|
||||
LDA :IDX+1
|
||||
CMP :ASIZE+1
|
||||
BCS :OVFHI
|
||||
JMP :ERREND
|
||||
:OVFHI
|
||||
LDA :IDX
|
||||
CMP :ASIZE
|
||||
BCS :OVF
|
||||
JMP :ERREND
|
||||
:OVF
|
||||
_ERR #:E_SID;#:E_OVF1;#:E_DUMP;#:ESIZE;#9
|
||||
:ERREND
|
||||
LDY #0
|
||||
LDA #0
|
||||
BEQ :ENTLPA
|
||||
:DOADD
|
||||
CLC
|
||||
ADC :AIDX
|
||||
TAX
|
||||
TYA
|
||||
ADC SCRATCH
|
||||
TAY
|
||||
TXA
|
||||
:LPA
|
||||
ASL :AIDX
|
||||
ROL SCRATCH
|
||||
:ENTLPA
|
||||
LSR :ESIZE
|
||||
BCS :DOADD
|
||||
BNE :LPA
|
||||
STX :IDX
|
||||
STY :IDX+1
|
||||
CLC
|
||||
LDA #3
|
||||
ADC :IDX
|
||||
STA :RES
|
||||
BCS :ADDHI
|
||||
JMP :XADD
|
||||
:ADDHI
|
||||
LDA #1
|
||||
ADC :IDX+1
|
||||
STA :IDX+1
|
||||
:XADD
|
||||
LDA :IDX+1
|
||||
STA :RES+1
|
||||
CLC
|
||||
LDA :RES
|
||||
ADC ADDR4
|
||||
STA :RES
|
||||
BCS :ADD1HI
|
||||
JMP :XADD2
|
||||
:ADD1HI
|
||||
INC :RES+1
|
||||
:XADD2
|
||||
LDA :RES+1
|
||||
ADC ADDR4+1
|
||||
STA :RES+1
|
||||
STA ADDR2+1
|
||||
LDA :RES
|
||||
STA ADDR2
|
||||
LDY #0
|
||||
:LP
|
||||
LDA (ADDR3),Y
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
CPY :ESIZEBAK
|
||||
BNE :LP
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDX ADDR2+1
|
||||
LDY ADDR2
|
||||
LDA :ESIZE
|
||||
RTS
|
||||
:ESIZE DS 1
|
||||
:ESIZEBAK DS 1
|
||||
:ASIZE DS 2
|
||||
:AIDX DS 2
|
||||
:IDX DS 2
|
||||
:RES DS 2
|
||||
:E_SID ASC "APUT161 (PUT161 MACRO),",00
|
||||
:E_DUMP ASC "DUMPING :ESIZE(1) :ESIZEBAK(1) :ASIZE(2)"
|
||||
ASC ":AIDX(2) :IDX(2) :RES(2)",00
|
||||
:E_OVF1 ASC "OUT OF BOUNDS! INDEX > ARRAY LENGTH",00
|
180
source/disk19_demo_builds_1/T.MIN.SUB.APUT162
Normal file
180
source/disk19_demo_builds_1/T.MIN.SUB.APUT162
Normal file
|
@ -0,0 +1,180 @@
|
|||
APUT162
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :YIDX
|
||||
PLA
|
||||
STA :YIDX+1
|
||||
PLA
|
||||
STA :XIDX
|
||||
PLA
|
||||
STA :XIDX+1
|
||||
PLA
|
||||
STA ADDR4
|
||||
PLA
|
||||
STA ADDR4+1
|
||||
PLA
|
||||
STA ADDR3
|
||||
PLA
|
||||
STA ADDR3+1
|
||||
LDY #4
|
||||
LDA (ADDR4),Y
|
||||
STA :ESIZE
|
||||
LDY #0
|
||||
LDA (ADDR4),Y
|
||||
STA :XLEN
|
||||
LDY #1
|
||||
LDA (ADDR4),Y
|
||||
STA :XLEN+1
|
||||
LDY #2
|
||||
LDA (ADDR4),Y
|
||||
STA :YLEN
|
||||
LDY #3
|
||||
LDA (ADDR4),Y
|
||||
STA :YLEN+1
|
||||
LDY #0
|
||||
LDA ERRCTRL
|
||||
CMP #1
|
||||
BEQ :CHKERR
|
||||
JMP :ERREND
|
||||
:CHKERR
|
||||
LDA :XIDX
|
||||
CMP :XLEN
|
||||
BCC :ECONT1
|
||||
LDA :XIDX+1
|
||||
CMP :XLEN+1
|
||||
BEQ :ECONT1
|
||||
BCC :ECONT1
|
||||
_ERR #:E_SID;#:E_XOVF;#:E_DUMP;#:ESIZE;#20
|
||||
:ECONT1
|
||||
LDA :YIDX
|
||||
CMP :YLEN
|
||||
BCC :ECONT2
|
||||
LDA :YIDX+1
|
||||
CMP :YLEN+1
|
||||
BEQ :ECONT2
|
||||
BCC :ECONT2
|
||||
_ERR #:E_SID;#:E_YOVF;#:E_DUMP;#:ESIZE;#20
|
||||
:ECONT2
|
||||
:ERREND
|
||||
LDA :YIDX
|
||||
STA :MLIER
|
||||
LDA :YIDX+1
|
||||
STA :MLIER+1
|
||||
LDA :YLEN
|
||||
STA :MCAND
|
||||
LDA :YLEN+1
|
||||
STA :MCAND+1
|
||||
LDA #00
|
||||
STA :PROD
|
||||
STA :PROD+1
|
||||
STA :PROD+2
|
||||
STA :PROD+3
|
||||
LDX #$10
|
||||
:SHIFT_R
|
||||
LSR :MLIER+1
|
||||
ROR :MLIER
|
||||
BCC :ROT_R
|
||||
LDA :PROD+2
|
||||
CLC
|
||||
ADC :MCAND
|
||||
STA :PROD+2
|
||||
LDA :PROD+3
|
||||
ADC :MCAND+1
|
||||
:ROT_R
|
||||
ROR
|
||||
STA :PROD+3
|
||||
ROR :PROD+2
|
||||
ROR :PROD+1
|
||||
ROR :PROD
|
||||
DEX
|
||||
BNE :SHIFT_R
|
||||
LDA :PROD
|
||||
STA :PBAK
|
||||
LDA :PROD+1
|
||||
STA :PBAK+1
|
||||
LDA :XIDX
|
||||
STA :MLIER
|
||||
LDA :XIDX+1
|
||||
STA :MLIER+1
|
||||
LDA :ESIZE
|
||||
STA :MCAND
|
||||
LDA #0
|
||||
STA :MCAND+1
|
||||
STA :PROD
|
||||
STA :PROD+1
|
||||
STA :PROD+2
|
||||
STA :PROD+3
|
||||
LDX #$10
|
||||
:SHIFTR LSR :MLIER+1
|
||||
ROR :MLIER
|
||||
BCC :ROTR
|
||||
LDA :PROD+2
|
||||
CLC
|
||||
ADC :MCAND
|
||||
STA :PROD+2
|
||||
LDA :PROD+3
|
||||
ADC :MCAND+1
|
||||
:ROTR
|
||||
ROR
|
||||
STA :PROD+3
|
||||
ROR :PROD+2
|
||||
ROR :PROD+1
|
||||
ROR :PROD
|
||||
DEX
|
||||
BNE :SHIFTR
|
||||
CLC
|
||||
LDA :PROD
|
||||
ADC :PBAK
|
||||
STA :PROD
|
||||
LDA :PROD+1
|
||||
ADC :PBAK+1
|
||||
STA :PROD+1
|
||||
CLC
|
||||
LDA :PROD
|
||||
ADC #5
|
||||
STA :PROD
|
||||
BCC :ADD3D
|
||||
INC :PROD+1
|
||||
:ADD3D
|
||||
CLC
|
||||
LDA :PROD
|
||||
ADC ADDR4
|
||||
STA :PROD
|
||||
STA ADDR2
|
||||
LDA :PROD+1
|
||||
ADC ADDR4+1
|
||||
STA :PROD+1
|
||||
STA ADDR2+1
|
||||
LDY #0
|
||||
LDX #0
|
||||
:CLP
|
||||
LDA (ADDR3),Y
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
CPY :ESIZE
|
||||
BNE :CLP
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDX ADDR2+1
|
||||
LDY ADDR2
|
||||
LDA :ESIZE
|
||||
RTS
|
||||
:ESIZE DS 2
|
||||
:XIDX DS 2
|
||||
:YIDX DS 2
|
||||
:MCAND DS 2
|
||||
:MLIER DS 2
|
||||
:PROD DS 4
|
||||
:PBAK DS 2
|
||||
:XLEN DS 2
|
||||
:YLEN DS 2
|
||||
:E_SID ASC "APUT162 (PUT162 MACRO)",00
|
||||
:E_DUMP ASC ":ESIZE(2) :XIDX(2) :YIDX(2) :MCAND(2) :MLIER(2)"
|
||||
ASC ":PROD(4) PBAK(2) :XLEN(1) :YLEN(1)",00
|
||||
:E_XOVF ASC "OUT OF BOUNDS! X > MAXIMUM.",00
|
||||
:E_YOVF ASC "OUT OF BOUNDS! Y > MAX.",00
|
|
@ -3,29 +3,35 @@ DOSCMD
|
|||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
LDA #$8D
|
||||
JSR FCOUT
|
||||
LDA #$84 ; CTRL-D
|
||||
JSR FCOUT
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA #1
|
||||
STA $AAB6 ; DOS LANG FLAG
|
||||
STA $75+1 ; NOT DIRECT MODE
|
||||
STA $33 ; NOT DIRECT MODE
|
||||
LDA #$8D
|
||||
JSR FCOUT
|
||||
LDA #$84 ; CTRL-D
|
||||
JSR FCOUT
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA :SLEN
|
||||
LDY #$01 ; POINT TO NEXT INSTR
|
||||
:LP
|
||||
LDA (RETADR),Y
|
||||
BEQ :DONE
|
||||
LDA (ADDR1),Y
|
||||
JSR FCOUT
|
||||
INY
|
||||
BNE :LP
|
||||
CPY :SLEN
|
||||
BCC :LP
|
||||
BEQ :LP
|
||||
:DONE
|
||||
CLC ; RESTORE INSTR POINTER
|
||||
TYA
|
||||
ADC RETADR
|
||||
STA RETADR
|
||||
LDA #$8D
|
||||
JSR FCOUT
|
||||
LDA RETADR+1
|
||||
ADC #$00
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
:SLEN DS 1
|
|
@ -15,9 +15,9 @@ FINPUT
|
|||
:INP_CLR
|
||||
LDY #0
|
||||
LDA :SLEN
|
||||
STA (ADDR1),Y ; PUT LENGTH AT START
|
||||
STA (ADDR1),Y
|
||||
:LP
|
||||
LDA $0200,Y ; KEYBOARD BUFFER
|
||||
LDA $0200,Y
|
||||
INY
|
||||
STA (ADDR1),Y
|
||||
CPY :SLEN
|
|
@ -3,7 +3,7 @@ FPRINT
|
|||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
LDY #$01 ; POINT TO NEXT INSTR
|
||||
LDY #$01
|
||||
:LP
|
||||
LDA (RETADR),Y
|
||||
BEQ :DONE
|
||||
|
@ -11,7 +11,7 @@ FPRINT
|
|||
INY
|
||||
BNE :LP
|
||||
:DONE
|
||||
CLC ; RESTORE INSTR POINTER
|
||||
CLC
|
||||
TYA
|
||||
ADC RETADR
|
||||
STA RETADR
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user