0.3.1 updates

some minor bugfixes, directory shuffling, added demo and utility disks
This commit is contained in:
nathanriggs 2019-01-26 21:02:17 -05:00
parent 45df2f6415
commit 82d0e74c1a
317 changed files with 17144 additions and 833 deletions

BIN
bin/d15_utilities.dsk Normal file

Binary file not shown.

Binary file not shown.

BIN
bin/d20_minidisk_A.dsk Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,358 +0,0 @@
__GETRET
LDY #255
PLA
STA ADDR1
PLA
STA ADDR1+1
:LP
INY
LDA RETURN,Y
STA (ADDR1),Y
CPY RETLEN
BNE :LP
LDA ADDR1+1
PHA
LDA ADDR1
PHA
RTS
__SETPARM
LDY #255
PLA
STA ADDR1
PLA
STA ADDR1+1
:LP
INY
LDA (ADDR1),Y
STA PARAM,Y
CPY PARLEN
BNE :LP
LDA ADDR1+1
PHA
LDA ADDR1
PHA
RTS
__DUMP
PLA
STA :RET
PLA
STA :RET+1
PLA
STA :LENGTH
PLA
STA ADDR3
PLA
STA ADDR3+1
LDA #$8D
JSR $FDF0
LDA ADDR3+1
AND #$F0
LSR
LSR
LSR
LSR
TAX
LDA HEXTAB,X
JSR $FDF0
LDA ADDR3+1
AND #$0F
TAX
LDA HEXTAB,X
JSR $FDF0
LDA ADDR3
AND #$F0
LSR
LSR
LSR
LSR
TAX
LDA HEXTAB,X
JSR $FDF0
LDA ADDR3
AND #$0F
TAX
LDA HEXTAB,X
JSR $FDF0
LDA #186 ; :
JSR $FDF0
LDA #160 ; SPC
JSR $FDF0
LDY #0
:LP
LDA (ADDR3),Y
AND #$F0 ; MASK RIGHT
LSR
LSR
LSR
LSR
STA :LEFT
LDA (ADDR3),Y
AND #$0F ; MASK LEFT
STA :RIGHT
LDX :LEFT
LDA HEXTAB,X
JSR $FDF0
LDX :RIGHT
LDA HEXTAB,X
JSR $FDF0
LDA #160
JSR $FDF0
INY
CPY :LENGTH
BNE :LP
LDA :RET+1
PHA
LDA :RET
PHA
RTS
:RET DS 2
:RIGHT DS 1
:LEFT DS 1
:LENGTH DS 1
__P
PLA
STA ADDR1
PLA
STA ADDR1+1
LDY #1
:LP LDA (ADDR1),Y
BEQ :DONE
JSR $FDF0
INY
BNE :LP
:DONE CLC
TYA
ADC ADDR1
STA ADDR1
LDA ADDR1+1
ADC #0
PHA
LDA ADDR1
PHA
RTS
__W
JSR $FD0C
RTS
__RSAV
STA ERRA
STX ERRX
STY ERRY
:C BCC :C0
BCS :C1
:Z BEQ :Z1
BNE :Z0
:N BMI :N1
BPL :N0
:O BVC :O0
BVS :O1
JMP :EXIT
:C0 LDA #0
STA ERRCARRY
JMP :Z
:C1 LDA #1
STA ERRCARRY
JMP :Z
:Z1 LDA #1
STA ERRZERO
JMP :N
:Z0 LDA #0
STA ERRZERO
JMP :N
:N1 LDA #1
STA ERRNEG
JMP :O
:N0 LDA #0
STA ERRNEG
JMP :O
:O0 LDA #0
STA ERROVF
JMP :EXIT
:O1 LDA #1
STA ERROVF
:EXIT
RTS
__RDMP
_PRNT " ",8D8D
_PRNT "REGISTRY DUMP",8D
_PRNT "=============",8D
_PRNT "A: "
LDA ERRA
AND #$F0 ; MASK RIGHT
LSR
LSR
LSR
LSR
STA :LEFT
LDA ERRA
AND #$0F ; MASK LEFT
STA :RIGHT
LDX :LEFT
LDA HEXTAB,X
JSR $FDF0
LDX :RIGHT
LDA HEXTAB,X
JSR $FDF0
_PRNT " ",8D
_PRNT "X: "
LDA ERRX
AND #$F0 ; MASK RIGHT
LSR
LSR
LSR
LSR
STA :LEFT
LDA ERRX
AND #$0F ; MASK LEFT
STA :RIGHT
LDX :LEFT
LDA HEXTAB,X
JSR $FDF0
LDX :RIGHT
LDA HEXTAB,X
JSR $FDF0
_PRNT " ",8D
_PRNT "Y: "
LDA ERRY
AND #$F0 ; MASK RIGHT
LSR
LSR
LSR
LSR
STA :LEFT
LDA ERRY
AND #$0F ; MASK LEFT
STA :RIGHT
LDX :LEFT
LDA HEXTAB,X
JSR $FDF0
LDX :RIGHT
LDA HEXTAB,X
JSR $FDF0
_PRNT " ",8D8D
_PRNT "STATUS FLAGS",8D
_PRNT "============",8D8D
LDA #0
CMP ERRCARRY
BEQ :CARCLR
_PRNT "CARRY: SET",8D
JMP :TESTN
:CARCLR _PRNT "CARRY: CLEAR",8D
:TESTN LDA #0
CMP ERRNEG
BEQ :NEGCLR
_PRNT "NEGATIVE: SET",8D
JMP :TESTZ
:NEGCLR _PRNT "NEGATIVE: CLEAR",8D
:TESTZ LDA #0
CMP ERRZERO
BEQ :ZCLR
_PRNT "ZERO: SET",8D
JMP :TESTO
:ZCLR _PRNT "ZERO: CLEAR",8D
:TESTO
LDA #0
CMP ERROVF
BEQ :OCLR
_PRNT "OVERFLOW: SET",8D
JMP :FIN
:OCLR _PRNT "OVERFLOW: CLEAR",8D8D8D
:FIN
RTS
:LEFT DS 1
:RIGHT DS 1
HEXTAB ASC "0123456789ABCDEF"
__ERR
JSR __RSAV
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA :DUMPLEN ; LENGTH OF DUMP
PLA
STA :DUMP ; DUMP ADDRESS LO
PLA
STA :DUMP+1 ; DUMP HI
PLA
STA :DMPMSG
PLA
STA :DMPMSG+1
PLA
STA :MESG ; ERROR MESSAGE ADDR LO
PLA
STA :MESG+1 ; HI
PLA
STA :SRID ; SUBROUTINE ID ADDR LO
PLA
STA :SRID+1 ; SUB ID HI
_PRNT " ",87878787878D8D
_PRNT "ERROR!",8D8D
_PRNT "SUBROUTINE: "
LDY #0
LDA :SRID
STA ADDR1
LDA :SRID+1
STA ADDR1+1
:LP1
LDA (ADDR1),Y
BEQ :LPX1
JSR $FDF0
INY
BNE :LP1
:LPX1
_PRNT " ",8D
_PRNT "MESSAGE: "
LDY #0
LDA :MESG
STA ADDR1
LDA :MESG+1
STA ADDR1+1
:LP2
LDA (ADDR1),Y
BEQ :LPX2
JSR $FDF0
INY
BNE :LP2
:LPX2
_PRNT " ",8D8D
_WAIT
LDY #0
LDA :DMPMSG
STA ADDR1
LDA :DMPMSG+1
STA ADDR1+1
:LP3
LDA (ADDR1),Y
BEQ :LPX3
JSR $FDF0
INY
BNE :LP3
:LPX3
_PRNT " ",8D
LDA :DUMP+1
PHA
LDA :DUMP
PHA
LDA :DUMPLEN
PHA
JSR __DUMP
_WAIT
LDA RETADR+1
PHA
LDA RETADR
PHA
_PRNT " ",8D8D
_WAIT
_RDUMP
_WAIT
LDA ERRSTOP
CMP #1
BEQ :KILL
RTS
:KILL
JMP $3D0
:DUMPLEN DS 1
:DUMP DS 2
:DMPMSG DS 2
:MESG DS 2
:SRID DS 2

View File

@ -1,358 +0,0 @@
__GETRET
LDY #255
PLA
STA ADDR1
PLA
STA ADDR1+1
:LP
INY
LDA RETURN,Y
STA (ADDR1),Y
CPY RETLEN
BNE :LP
LDA ADDR1+1
PHA
LDA ADDR1
PHA
RTS
__SETPARM
LDY #255
PLA
STA ADDR1
PLA
STA ADDR1+1
:LP
INY
LDA (ADDR1),Y
STA PARAM,Y
CPY PARLEN
BNE :LP
LDA ADDR1+1
PHA
LDA ADDR1
PHA
RTS
__DUMP
PLA
STA :RET
PLA
STA :RET+1
PLA
STA :LENGTH
PLA
STA ADDR3
PLA
STA ADDR3+1
LDA #$8D
JSR $FDF0
LDA ADDR3+1
AND #$F0
LSR
LSR
LSR
LSR
TAX
LDA HEXTAB,X
JSR $FDF0
LDA ADDR3+1
AND #$0F
TAX
LDA HEXTAB,X
JSR $FDF0
LDA ADDR3
AND #$F0
LSR
LSR
LSR
LSR
TAX
LDA HEXTAB,X
JSR $FDF0
LDA ADDR3
AND #$0F
TAX
LDA HEXTAB,X
JSR $FDF0
LDA #186 ; :
JSR $FDF0
LDA #160 ; SPC
JSR $FDF0
LDY #0
:LP
LDA (ADDR3),Y
AND #$F0 ; MASK RIGHT
LSR
LSR
LSR
LSR
STA :LEFT
LDA (ADDR3),Y
AND #$0F ; MASK LEFT
STA :RIGHT
LDX :LEFT
LDA HEXTAB,X
JSR $FDF0
LDX :RIGHT
LDA HEXTAB,X
JSR $FDF0
LDA #160
JSR $FDF0
INY
CPY :LENGTH
BNE :LP
LDA :RET+1
PHA
LDA :RET
PHA
RTS
:RET DS 2
:RIGHT DS 1
:LEFT DS 1
:LENGTH DS 1
__P
PLA
STA ADDR1
PLA
STA ADDR1+1
LDY #1
:LP LDA (ADDR1),Y
BEQ :DONE
JSR $FDF0
INY
BNE :LP
:DONE CLC
TYA
ADC ADDR1
STA ADDR1
LDA ADDR1+1
ADC #0
PHA
LDA ADDR1
PHA
RTS
__W
JSR $FD0C
RTS
__RSAV
STA ERRA
STX ERRX
STY ERRY
:C BCC :C0
BCS :C1
:Z BEQ :Z1
BNE :Z0
:N BMI :N1
BPL :N0
:O BVC :O0
BVS :O1
JMP :EXIT
:C0 LDA #0
STA ERRCARRY
JMP :Z
:C1 LDA #1
STA ERRCARRY
JMP :Z
:Z1 LDA #1
STA ERRZERO
JMP :N
:Z0 LDA #0
STA ERRZERO
JMP :N
:N1 LDA #1
STA ERRNEG
JMP :O
:N0 LDA #0
STA ERRNEG
JMP :O
:O0 LDA #0
STA ERROVF
JMP :EXIT
:O1 LDA #1
STA ERROVF
:EXIT
RTS
__RDMP
_PRNT " ",8D8D
_PRNT "REGISTRY DUMP",8D
_PRNT "=============",8D
_PRNT "A: "
LDA ERRA
AND #$F0 ; MASK RIGHT
LSR
LSR
LSR
LSR
STA :LEFT
LDA ERRA
AND #$0F ; MASK LEFT
STA :RIGHT
LDX :LEFT
LDA HEXTAB,X
JSR $FDF0
LDX :RIGHT
LDA HEXTAB,X
JSR $FDF0
_PRNT " ",8D
_PRNT "X: "
LDA ERRX
AND #$F0 ; MASK RIGHT
LSR
LSR
LSR
LSR
STA :LEFT
LDA ERRX
AND #$0F ; MASK LEFT
STA :RIGHT
LDX :LEFT
LDA HEXTAB,X
JSR $FDF0
LDX :RIGHT
LDA HEXTAB,X
JSR $FDF0
_PRNT " ",8D
_PRNT "Y: "
LDA ERRY
AND #$F0 ; MASK RIGHT
LSR
LSR
LSR
LSR
STA :LEFT
LDA ERRY
AND #$0F ; MASK LEFT
STA :RIGHT
LDX :LEFT
LDA HEXTAB,X
JSR $FDF0
LDX :RIGHT
LDA HEXTAB,X
JSR $FDF0
_PRNT " ",8D8D
_PRNT "STATUS FLAGS",8D
_PRNT "============",8D8D
LDA #0
CMP ERRCARRY
BEQ :CARCLR
_PRNT "CARRY: SET",8D
JMP :TESTN
:CARCLR _PRNT "CARRY: CLEAR",8D
:TESTN LDA #0
CMP ERRNEG
BEQ :NEGCLR
_PRNT "NEGATIVE: SET",8D
JMP :TESTZ
:NEGCLR _PRNT "NEGATIVE: CLEAR",8D
:TESTZ LDA #0
CMP ERRZERO
BEQ :ZCLR
_PRNT "ZERO: SET",8D
JMP :TESTO
:ZCLR _PRNT "ZERO: CLEAR",8D
:TESTO
LDA #0
CMP ERROVF
BEQ :OCLR
_PRNT "OVERFLOW: SET",8D
JMP :FIN
:OCLR _PRNT "OVERFLOW: CLEAR",8D8D8D
:FIN
RTS
:LEFT DS 1
:RIGHT DS 1
HEXTAB ASC "0123456789ABCDEF"
__ERR
JSR __RSAV
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA :DUMPLEN ; LENGTH OF DUMP
PLA
STA :DUMP ; DUMP ADDRESS LO
PLA
STA :DUMP+1 ; DUMP HI
PLA
STA :DMPMSG
PLA
STA :DMPMSG+1
PLA
STA :MESG ; ERROR MESSAGE ADDR LO
PLA
STA :MESG+1 ; HI
PLA
STA :SRID ; SUBROUTINE ID ADDR LO
PLA
STA :SRID+1 ; SUB ID HI
_PRNT " ",87878787878D8D
_PRNT "ERROR!",8D8D
_PRNT "SUBROUTINE: "
LDY #0
LDA :SRID
STA ADDR1
LDA :SRID+1
STA ADDR1+1
:LP1
LDA (ADDR1),Y
BEQ :LPX1
JSR $FDF0
INY
BNE :LP1
:LPX1
_PRNT " ",8D
_PRNT "MESSAGE: "
LDY #0
LDA :MESG
STA ADDR1
LDA :MESG+1
STA ADDR1+1
:LP2
LDA (ADDR1),Y
BEQ :LPX2
JSR $FDF0
INY
BNE :LP2
:LPX2
_PRNT " ",8D8D
_WAIT
LDY #0
LDA :DMPMSG
STA ADDR1
LDA :DMPMSG+1
STA ADDR1+1
:LP3
LDA (ADDR1),Y
BEQ :LPX3
JSR $FDF0
INY
BNE :LP3
:LPX3
_PRNT " ",8D
LDA :DUMP+1
PHA
LDA :DUMP
PHA
LDA :DUMPLEN
PHA
JSR __DUMP
_WAIT
LDA RETADR+1
PHA
LDA RETADR
PHA
_PRNT " ",8D8D
_WAIT
_RDUMP
_WAIT
LDA ERRSTOP
CMP #1
BEQ :KILL
RTS
:KILL
JMP $3D0
:DUMPLEN DS 1
:DUMP DS 2
:DMPMSG DS 2
:MESG DS 2
:SRID DS 2

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -25,20 +25,11 @@ AGET81
JMP :ERREND
:CHKERR
LDA :IDX ; IF IDX > ARRAY LENGTH
CLC
ADC #1
CMP :ALEN
BCS :OVF
JMP :CHKCONT
JMP :ERREND
:OVF
_ERR :E_SID;:E_OVF1;:E_DUMP;:RES;#6
:CHKCONT
LDA :IDX
CMP #255 ; NO ZERO INDEX
BEQ :UNF ; UNDERFLOW
JMP :ERREND
:UNF
_ERR :E_SID;:E_UNF;:E_DUMP;:RES;#6
:ERREND
LDY #0
LDA #0
@ -102,5 +93,4 @@ AGET81
:ALEN DS 1
:E_SID ASC "AGET81 (GET81 MACRO)",00
:E_DUMP ASC "DUMPING RES(2) IDX(2) ESIZE(1) ALEN(1)",00
:E_OVF1 ASC "OVERFLOW: INDEX HIGHER THAN ARRAY LENGTH",00
:E_UNF ASC "UNDERFLOW: CANNOT USE A ZERO INDEX",00
:E_OVF1 ASC "OUT OF BOUNDS! INDEX > ARRAY LENGTH",00

View File

@ -31,8 +31,6 @@ AGET82
JMP :ERREND
:CHKERR
LDA :XIDX ; IF X > MAX LEN
CLC
ADC #1
CMP :XLEN
BCS :XOVF
JMP :ERRCONT1
@ -40,8 +38,6 @@ AGET82
_ERR :E_SID;:E_XOVF;:E_DUMP;:XIDX;#15
:ERRCONT1
LDA :YIDX ; IF Y > MAX LEN
CLC
ADC #1
CMP :YLEN
BCS :YOVF
JMP :ERRCONT2
@ -153,5 +149,5 @@ AGET82
: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 "X-OVERFLOW! X IS > MAXIMUM OR IS 0.",00
:E_YOVF ASC "Y-OVERFLOW! Y IS > MAX OR IS 0.",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

View File

@ -1,8 +1,8 @@
APUT81
PLA
STA :RETADR ; LOCAL RETURN ADDRESS STORAGE
STA RETADR ; LOCAL RETURN ADDRESS STORAGE
PLA ; BECAUSE OF CALLING AGET81
STA :RETADR+1
STA RETADR+1
PLA
STA :AIDX
STA :IDX
@ -34,16 +34,9 @@ APUT81
ADC #1
CMP :ASIZE
BCS :OVF
JMP :CHKCONT
JMP :ERREND
:OVF
_ERR :E_SID;:E_OVF1;:E_DUMP;:ESIZE;#9
:CHKCONT
LDA :IDX
CMP #255 ; NO ZERO INDEX
BEQ :UNF ; UNDERFLOW
JMP :ERREND
:UNF
_ERR :E_SID;:E_UNF;:E_DUMP;:ESIZE;#9
:ERREND
LDY #0
LDA #0
@ -90,15 +83,14 @@ APUT81
INY
CPY :ESIZEBAK
BNE :LP
LDA :RETADR+1
LDA RETADR+1
PHA
LDA :RETADR
LDA RETADR
PHA
LDX ADDR2+1
LDY ADDR2
LDA :ESIZE
RTS
:RETADR DS 2
:ESIZE DS 1
:ESIZEBAK DS 1
:ASIZE DS 1
@ -108,5 +100,4 @@ APUT81
:E_SID ASC "APUT81 (PUT81 MACRO)",00
:E_DUMP ASC "DUMPING :ESIZE(1) :ESIZEBAK(1) :ASIZE(1)"
ASC ":AIDX(2) :IDX(2) :RES(2)",00
:E_OVF1 ASC "OVERFLOW! INDEX HIGHER THAN ARRAY LENGTH",00
:E_UNF ASC "UNDERFLOW! CANNOT USE A ZERO INDEX",00
:E_OVF1 ASC "OUT OF BOUNDS! INDEX > ARRAY LENGTH",00

View File

@ -36,8 +36,6 @@ APUT82
JMP :ERREND
:CHKERR
LDA :XIDX ; IF X > MAX LEN
CLC
ADC #1
CMP :XLEN
BCS :XOVF
JMP :ERRCONT1
@ -45,8 +43,6 @@ APUT82
_ERR :E_SID;:E_XOVF;:E_DUMP;:XIDX;#15
:ERRCONT1
LDA :YIDX ; IF Y > MAX LEN
CLC
ADC #1
CMP :YLEN
BCS :YOVF
JMP :ERRCONT2
@ -147,7 +143,6 @@ APUT82
LDY ADDR2
LDA :ESIZE
RTS
:RETADR DS 2
:ESIZE DS 1
:XIDX DS 1
:YIDX DS 1
@ -156,8 +151,8 @@ APUT82
:PROD DS 4
:XLEN DS 1
:YLEN 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 "X-OVERFLOW! X IS > MAXIMUM OR IS 0.",00
:E_YOVF ASC "Y-OVERFLOW! Y IS > MAX OR IS 0.",00
: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

View File

@ -0,0 +1,420 @@
********************************
* *
* 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
*

View File

@ -262,6 +262,12 @@ __RDMP
:RIGHT DS 1
HEXTAB ASC "0123456789ABCDEF"
__ERR
LDY #0
LDA (RETADR),Y
STA :RET
INY
LDA (RETADR),Y
STA :RET+1
JSR __RSAV
PLA
STA RETADR
@ -350,9 +356,13 @@ __ERR
BEQ :KILL
RTS
:KILL
_PRNT " ",8D8D
_PRNT "BREAK AT: "
_DUMP :RET;#2
JMP $3D0
:DUMPLEN DS 1
:DUMP DS 2
:DMPMSG DS 2
:MESG DS 2
:SRID DS 2
:RET DS 2

30
source/disk1_stdio/MINIFY Normal file
View File

@ -0,0 +1,30 @@
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)

View File

@ -0,0 +1,88 @@
CURSFOR
CLC
ADC CURSH
STA CURSH
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA CURSH
CMP #40 ; MAX COL + 1
BCS :XOVF
JMP :ERREND
:XOVF
_ERR :E_SID;:E_XOF;:E_DMP1;RETURN;#10
:ERREND
JSR VTAB
RTS
:E_SID ASC "CURSFOR (CURF MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_XOF ASC "CURSOR X OVERFLOW: X <> MIN/MAX",00
CURSBAK
SEC
STA SCRATCH
LDA CURSH
SBC SCRATCH
STA CURSH
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA CURSH
CMP #40 ; MIN COLUMN
BCS :XOVF
JMP :ERREND
:XOVF
_ERR :E_SID;:E_XOF;:E_DMP1;RETURN;#10
:ERREND
JSR VTAB
RTS
:E_SID ASC "CURSBAK (CURB MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_XOF ASC "CURSOR X OVERFLOW: X <> MIN/MAX",00
CURSDN
CLC
ADC CURSV
STA CURSV
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA CURSV
CMP #24 ; MAX ROWS
BCS :YOVF
JMP :ERREND
:YOVF
_ERR :E_SID;:E_YOF;:E_DMP1;RETURN;#10
:ERREND
JSR VTAB
RTS
:E_SID ASC "CURSDN (CURD MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_YOF ASC "CURSOR Y OVERFLOW: Y <> MIN/MAX",00
CURSUP
SEC
STA SCRATCH
LDA CURSV
SBC SCRATCH
STA CURSV
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA CURSV
CMP #24 ; MAX ROWS
BCS :YOVF
JMP :ERREND
:YOVF
_ERR :E_SID;:E_YOF;:E_DMP1;RETURN;#10
:ERREND
JSR VTAB
RTS
:E_SID ASC "CURSUP (CURU MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_YOF ASC "CURSOR Y OVERFLOW: Y <> MIN/MAX",00

View File

@ -0,0 +1,22 @@
DPRINT
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA ADDR1
PLA
STA ADDR1+1
LDY #$00
:LOOP
LDA (ADDR1),Y
BEQ :EXIT
JSR COUT1
INY
BNE :LOOP
:EXIT
LDA RETADR+1
PHA
LDA RETADR
PHA
RTS

View File

@ -0,0 +1,50 @@
GPBX
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA ADDR1 ; ZERO PAGE
PLA
STA ADDR1+1
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA ADDR1+1
CMP #$C0 ; MAX COL + 1
BNE :BADHI
LDA ADDR1
CMP #$64
BCS :BADLO
LDA ADDR1
CMP #$60
BCC :BADLO
JMP :ERREND
:BADHI
_ERR :E_SID;:E_BHI;:E_DMP1;RETURN;#10
JMP :ERREND
:BADLO
_ERR :E_SID;:E_BLO;:E_DMP1;RETURN;#10
:ERREND
LDY #$00
LDA (ADDR1),Y ; IF BTN = PUSHED
BMI :1
JMP :0
:1
LDY #$01 ; BTN PUSHED;A=1
JMP :EXIT
:0
LDY #$00 ; BTN NOT PUSHED;A=0
:EXIT
LDA RETADR+1
PHA
LDA RETADR
PHA
TYA ; BTN FLAG MOVE TO A
RTS
:E_SID ASC "GPBX (PBX MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_BHI ASC "BAD HIGH BYTE--NOT A PADDLE BUTTON!.",00
:E_BLO ASC "BAD LOW BYTE--NOT A PADDLE BUTTON",00

View File

@ -262,6 +262,12 @@ __RDMP
:RIGHT DS 1
HEXTAB ASC "0123456789ABCDEF"
__ERR
LDY #0
LDA (RETADR),Y
STA :RET
INY
LDA (RETADR),Y
STA :RET+1
JSR __RSAV
PLA
STA RETADR
@ -350,9 +356,13 @@ __ERR
BEQ :KILL
RTS
:KILL
_PRNT " ",8D8D
_PRNT "BREAK AT: "
_DUMP :RET;#2
JMP $3D0
:DUMPLEN DS 1
:DUMP DS 2
:DMPMSG DS 2
:MESG DS 2
:SRID DS 2
:RET DS 2

View File

@ -0,0 +1,27 @@
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

View File

@ -0,0 +1,53 @@
*
*``````````````````````````````*
* STDIO.HOOKS.PUT *
*- -*
* HOOKS TO INPUT/OUTPUT *
* ROUTINES IN MONITOR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
* OUTPUT HOOKS
*
COUT1 EQU $FDF0 ; FASTER SCREEN OUTPUT
COUT EQU $FDED ; MONITOR STD OUTPUT
HOME EQU $FC58 ; CLEAR SCREEN, HOME CURSOR
VTAB EQU $FC22 ; MONITOR CURSOR POS ROUTINE
CURSH EQU $24 ; HPOS OF COUT CURSOR
CURSV EQU $25 ; VPOS OF COUT CURSOR
WNDLEFT EQU $20 ; SCROLL WINDOW LEFT
WNDWIDTH EQU $21 ; SCROLL WINDOW WIDTH
WNDTOP EQU $22 ; SCROLL WINDOW TOP
WNDBOT EQU $23 ; SCROLL WINDOW BOTTOM
TEXTP1 EQU $0400 ; START OF TEXT PAGE 1
TEXTP2 EQU $0800 ; START OF TEXT PAGE 2
PAGE1 EQU $C054 ; SOFT SWITCH USE PAGE 1
PAGE2 EQU $C055 ; SOFT SWITCH USE PAGE 2
S80COL EQU $C01F ; READ ONLY; CHECK IF 80C
KEYBUFF EQU $0200 ; KEYBUFFER START
GSTROBE EQU $C040 ; GAME CONNECTOR STROBE
TXTSET EQU $C051 ; TEXT ON SOFT SWITCH
SETWND EQU $FB4B ; SET NORMAL WINDOW MODE
CURADV EQU $FBF4 ; ADVANCE CURSOR RIGHT
CURBS EQU $FC10 ; CURSOR LEFT
CURUP EQU $FC1A ; CURSOR UP
CR EQU $FC62 ; CARRIAGE RETURN TO SCREEN
LF EQU $FC66 ; LINE FEED ONLY TO SCREEN
CLEOL EQU $FC9C ; CLEAR TEXT TO END OF LINE
*
* INPUT HOOKS
*
KYBD EQU $C000 ; LDA SINGLE KEYPRESS
STROBE EQU $C010 ; CLEAR KYBD BUFFER
GETLN EQU $FD6F ; MONITOR GET LINE OF KB INPUT
GETKEY EQU $FD0C ; MONITOR GET SINGLE KEY INPUT
OPAPP EQU $C061
CLAPP EQU $C062
*
* PADDLE HOOKS
*
PREAD EQU $FB1E ; READ STATE OF PADDLE
PB0 EQU $C061 ; PADDLE BUTTON 0
PB1 EQU $C062
PB2 EQU $C063
PB3 EQU $C060
*

View File

@ -0,0 +1,120 @@
PRN MAC
IF ",]1 ; --- IF PARAM=STRING
JSR XPRINT ; SPECIAL PRINT
ASC ]1 ; PUT STRING HERE
HEX 00 ; STRING TERMINATE
ELSE ; ELSE, PARAM IS
; MEMORY LOCATION
LDA #>]1 ; PUSH HIGH BYTE
PHA ; TO STACK
LDA #<]1 ; PUSH LOW BYTE
PHA
JSR DPRINT
FIN
<<<
PCR MAC
LDA #$8D
JSR COUT1
<<<
INP MAC
JSR SINPUT
<<<
GKEY MAC
JSR GETKEY
LDY #0
STY STROBE
<<<
SCPOS MAC
LDX ]1
LDY ]2
STX CURSH
STY CURSV
JSR VTAB
<<<
SETCX MAC
LDX ]1
STX CURSH
JSR VTAB
<<<
SETCY MAC
LDY ]1
STY CURSV
JSR VTAB
<<<
CURF MAC
LDA ]1
JSR CURSFOR
<<<
CURB MAC
LDA ]1
JSR CURSBAK
<<<
CURU MAC
LDA ]1
JSR CURSUP
<<<
CURD MAC
LDA ]1
JSR CURSDN
<<<
RCPOS MAC
LDA ]1 ; ROW
LDY ]2 ; COLUMN
JSR $F847 ; GBASCALC ROUTINE
LDA ($26),Y ; LOW OF ADDR OF CHAR
<<<
PDL MAC ; GET PADDLE VALUE
LDX #]1 ; READ PADDLE # ]1 (USUALLY 0)
JSR PREAD ; PADDLE READING STORED IN Y
<<<
PBX MAC
LDA #>]1
PHA
LDA #<]1
PHA
JSR GPBX
<<<
TVLIN MAC
LDA ]1 ; Y START
PHA
LDA ]2 ; Y END
PHA
LDA ]3 ; X POSITION
PHA
LDA ]4 ; CHARACTER
PHA
JSR TVLINE
<<<
THLIN MAC
LDA ]1 ; X START
PHA
LDA ]2 ; X END
PHA
LDA ]3 ; Y POS
PHA
LDA ]4 ; FILL CHAR
PHA
JSR THLINE
<<<
TFILL MAC
LDA ]1 ; LEFT BOUNDARY
PHA
LDA ]2 ; TOP BOUNDARY
PHA
LDA ]3 ; RIGHT BOUNDARY
PHA
LDA ]4 ; BOTTOM BOUNDARY
PHA
LDA ]5 ; FILL CHAR
PHA
JSR TFILLA
<<<
TPUT MAC
LDA ]1
PHA
LDA ]2
PHA
LDA ]3
PHA
JSR TXTPUT
<<<

Some files were not shown because too many files have changed in this diff Show More