diff --git a/.gitignore b/.gitignore index 05394b8..8c5b8a6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ *~ *.swp +# Build process output +as65-output.txt + # Prerequisites *.d diff --git a/src/macros.s b/src/macros.s index c3adcb2..96b8dc5 100644 --- a/src/macros.s +++ b/src/macros.s @@ -63,10 +63,19 @@ DONE POPY ; * ;******************************* -PUTF .MACRO - JSR FOUT ;CONVERT FAC TO STRING - STA \0 ;STORE LOW BYTE OF STRING - STY \0+1 ;STORE HIGH BYTE OF STRING - PUTS (\0) ;PRINT STRING - .ENDM +PUTF .MACRO + JSR FOUT ;CONVERT FAC TO STRING + STA \0 ;STORE LOW BYTE OF STRING + STY \0+1 ;STORE HIGH BYTE OF STRING + PUTS (\0) ;PRINT STRING + .ENDM + +; Overwrites A and Y +HLIN .MACRO x1,x2,y + ldy x1 ;Leftmost X coordinate + lda x2 + sta H2 ;Rightmost X coordinate + lda y ;Y coordinate + jsr HLINE + .ENDM diff --git a/src/rnd.s b/src/rnd.s index 767cbd9..fee7232 100644 --- a/src/rnd.s +++ b/src/rnd.s @@ -9,23 +9,28 @@ .include "symbols.s" .include "macros.s" -main jsr seedRandomNumGenerator +main + jsr seedRandomNumGenerator + jsr initLoResFullScreen jsr setRandomColor ;Set the color jsr drawHallway jsr drawRoom + jsr waitForKeypress + sta TEXTON rts drawHallway lda #16 jsr generateRandomInt + sta x2 ;Rightmost X coordinate + HLIN #0,x2,#10 rts -setupGraphics - jsr activateLoResPage1 - lda #10 - ldy #10 - jsr PLOT - jsr activateTextPage1 +initLoResFullScreen + sta TEXTOFF ;Enable graphics + sta HIRESOFF ;Enable Lo-res + sta MIXEDOFF ;Full screen + jsr CLRSCR ;Clear the screen rts ; Add A to FAC leaving result in FAC @@ -85,6 +90,6 @@ generateRandomPositive setRandomColor lda #15 ;Max color number jsr generateRandomPositive - jsr SETCOL ;Set the color + jsr SETCOLR ;Set the color rts diff --git a/src/symbols.s b/src/symbols.s index c29ba19..f732ae1 100644 --- a/src/symbols.s +++ b/src/symbols.s @@ -7,9 +7,22 @@ ; * ;******************************* -RNDL .EQU $4e ;Continuously incremented while waiting for keyboard input -RNDH .EQU $4f ;High byte of RNDL -FACEXP .EQU $9d ;Address of FAC exponent used by FADDT,FSUBT,FMULTT,FDIVT +;******************************* +; * +; LORES ZERO PAGE ADDRESSES * +; * +;******************************* + +GBASL .EQU $26 +GRASH .EQU $27 +H2 .EQU $2C +V2 .EQU $20 +MASK .EQU $2E +COLOR .EQU $30 + +RNDL .EQU $4e ;Continuously incremented while waiting for keyboard input +RNDH .EQU $4f ;High byte of RNDL +FACEXP .EQU $9d ;Address of FAC exponent used by FADDT,FSUBT,FMULTT,FDIVT ;******************************* ; * @@ -18,27 +31,26 @@ FACEXP .EQU $9d ;Address of FAC exponent used by FADDT,FSUBT,FMULTT,FDIVT ; * ;******************************* -KBD .EQU $C000 ;BIT 7 IS 1 IF KEY PRESSED -KBDSTRB .EQU $C010 ;CLEARS KBD BIT 7 -CLR80STO .EQU $C000 ;ALLOW PAGE2 PG1 & PG2 SWITCHING -SET80STO .EQU $C001 ;ALLOW PAGE2 MAIN & AUX SWITCHNG -STO80 .EQU $C018 ;1=PAGE2 SWITCHES MAIN/AUX - ;0=PAGE2 SWITCHES VIDEO PAGES -CLR80VID .EQU $C00C ;TURN OFF 80-COL DISPLAY -SET80VID .EQU $C00D ;TURN ON 80-COL DISPLAY -COL80 .EQU $C01F ;0=40 COL IS ON, 1=80 COL IS ON -TEXTOFF .EQU $C050 ;SELECTS GRAPHICS MODE -TEXTON .EQU $C051 ;SELECTS TEXT MODE -TEXT .EQU $C01A ;1=TEXT MODE ACTIVE,0=GRAPH MODE -MIXEDOFF .EQU $C052 ;USE FULL-SCREEN GRAPHICS -MIXEDON .EQU $C053 ;USE GRAPHICS WITH 4 LINES TEXT -MIXED .EQU $C01B ;0=FULL SCREEN, 1=MIXED -PAGE2OFF .EQU $C054 ;SELECTS PAGE1 OR MAIN VID MEM -PAGE2ON .EQU $C055 ;SELECTS PAGE2 OR AUX VID MEM -PAGE2 .EQU $C01C ;1=VID PG2 SELECTED OR AUX SEL -HIRESOFF .EQU $C056 ;SELECTS LOW-RES GRAPHICS -HIRESON .EQU $C057 ;SELECTS HIGH-RES GRAPHICS -HIRES .EQU $C01D ;0=LOW-RES, 1=HIGH-RES +KBD .EQU $C000 ;BIT 7 IS 1 IF KEY PRESSED +KBDSTRB .EQU $C010 ;CLEARS KBD BIT 7 +CLR80STO .EQU $C000 ;ALLOW PAGE2 PG1 & PG2 SWITCHING +SET80STO .EQU $C001 ;ALLOW PAGE2 MAIN & AUX SWITCHNG +STO80 .EQU $C018 ;1=PAGE2 SWITCHES MAIN/AUX ;0=PAGE2 SWITCHES VIDEO PAGES +CLR80VID .EQU $C00C ;TURN OFF 80-COL DISPLAY +SET80VID .EQU $C00D ;TURN ON 80-COL DISPLAY +COL80 .EQU $C01F ;0=40 COL IS ON, 1=80 COL IS ON +TEXTOFF .EQU $C050 ;SELECTS GRAPHICS MODE +TEXTON .EQU $C051 ;SELECTS TEXT MODE +TEXT .EQU $C01A ;1=TEXT MODE ACTIVE,0=GRAPH MODE +MIXEDOFF .EQU $C052 ;USE FULL-SCREEN GRAPHICS +MIXEDON .EQU $C053 ;USE GRAPHICS WITH 4 LINES TEXT +MIXED .EQU $C01B ;0=FULL SCREEN, 1=MIXED +PAGE2OFF .EQU $C054 ;SELECTS PAGE1 OR MAIN VID MEM +PAGE2ON .EQU $C055 ;SELECTS PAGE2 OR AUX VID MEM +PAGE2 .EQU $C01C ;1=VID PG2 SELECTED OR AUX SEL +HIRESOFF .EQU $C056 ;SELECTS LOW-RES GRAPHICS +HIRESON .EQU $C057 ;SELECTS HIGH-RES GRAPHICS +HIRES .EQU $C01D ;0=LOW-RES, 1=HIGH-RES ;******************************* ; * @@ -49,29 +61,29 @@ HIRES .EQU $C01D ;0=LOW-RES, 1=HIGH-RES ; * ;******************************* -STROUT .EQU $DB3A ;PRINT STRING IN Y,A -GIVAYF .EQU $E2F2 ;CONVERT 2-BYTE INT A(HI) Y(LO) TO FLOAT IN FAC -CONINT .EQU $E6FB ;CONVERT FAC TO BYTE IN X, ERR IF FAC > 255 -FADD .EQU $E7BE ;FAC = MEM + FAC, MEM ADDR IS Y(HI) A(LO) -FSUB .EQU $E7A7 ;FAC = MEM - FAC, MEM ADDR IS Y(HI) A(LO) -FMULT .EQU $E97F ;FAC = MEM * FAC, MEM ADDR IS Y(HI) A(LO) -FDIV .EQU $EA66 ;FAC = MEM / FAC, MEM ADDR IS Y(HI) A(LO) -FADDT .EQU $E7C1 ;FAC = ARG + FAC, MUST LOAD FACEXP INTO A FIRST -FSUBT .EQU $E7AA ;FAC = ARG - FAC, MUST LOAD FACEXP INTO A FIRST -FMULTT .EQU $E982 ;FAC = ARG * FAC, MUST LOAD FACEXP INTO A FIRST -FDIVT .EQU $EA69 ;FAC = ARG / FAC, MUST LOAD FACEXP INTO A FIRST -MUL10 .EQU $EA39 ;MULTIPLY FAC BY 10 -FCOMP .EQU $EBB2 ;COMP MEM TO FAC -QINT .EQU $EBF2 ;CONVERT FAC TO INTEGER -FLOAT .EQU $EB93 ;CONVERT A TO FAC, I THINK -MOVAF .EQU $EB63 ;MOVE FAC INTO ARG -MOVMF .EQU $EB2B ;MOVE FAC TO MEMORY Y,X -MOVFA .EQU $EB53 ;MOVE ARG TO FAC -MOVFM .EQU $EB2B ;MOVE MEMORY TO FAC -INT .EQU $EC23 ;APPLESOFT INT FUNCTION -PRINTFAC .EQU $ED2E ;PRINT FAC. USES FOUT,STROUT -FOUT .EQU $ED34 ;FAC TO STRING, FAC DESTROYED -RND .EQU $EFAE ;APPLESOFT RND FUNCTION +STROUT .EQU $DB3A ;PRINT STRING IN Y,A +GIVAYF .EQU $E2F2 ;CONVERT 2-BYTE INT A(HI) Y(LO) TO FLOAT IN FAC +CONINT .EQU $E6FB ;CONVERT FAC TO BYTE IN X, ERR IF FAC > 255 +FADD .EQU $E7BE ;FAC = MEM + FAC, MEM ADDR IS Y(HI) A(LO) +FSUB .EQU $E7A7 ;FAC = MEM - FAC, MEM ADDR IS Y(HI) A(LO) +FMULT .EQU $E97F ;FAC = MEM * FAC, MEM ADDR IS Y(HI) A(LO) +FDIV .EQU $EA66 ;FAC = MEM / FAC, MEM ADDR IS Y(HI) A(LO) +FADDT .EQU $E7C1 ;FAC = ARG + FAC, MUST LOAD FACEXP INTO A FIRST +FSUBT .EQU $E7AA ;FAC = ARG - FAC, MUST LOAD FACEXP INTO A FIRST +FMULTT .EQU $E982 ;FAC = ARG * FAC, MUST LOAD FACEXP INTO A FIRST +FDIVT .EQU $EA69 ;FAC = ARG / FAC, MUST LOAD FACEXP INTO A FIRST +MUL10 .EQU $EA39 ;MULTIPLY FAC BY 10 +FCOMP .EQU $EBB2 ;COMP MEM TO FAC +QINT .EQU $EBF2 ;CONVERT FAC TO INTEGER +FLOAT .EQU $EB93 ;CONVERT A TO FAC, I THINK +MOVAF .EQU $EB63 ;MOVE FAC INTO ARG +MOVMF .EQU $EB2B ;MOVE FAC TO MEMORY Y,X +MOVFA .EQU $EB53 ;MOVE ARG TO FAC +MOVFM .EQU $EB2B ;MOVE MEMORY TO FAC +INT .EQU $EC23 ;APPLESOFT INT FUNCTION +PRINTFAC .EQU $ED2E ;PRINT FAC. USES FOUT,STROUT +FOUT .EQU $ED34 ;FAC TO STRING, FAC DESTROYED +RND .EQU $EFAE ;APPLESOFT RND FUNCTION ;******************************* ; * @@ -82,19 +94,19 @@ RND .EQU $EFAE ;APPLESOFT RND FUNCTION ; * ;******************************* -PLOT .EQU $F800 ;PLOT LO-RES BLOCK IN CURRENT COLOR A=VERT, Y=HORZ -HLINE .EQU $F819 ;HORIZONTAL LINE -VLINE .EQU $F828 ;VERTICAL LINE -CLRSCR .EQU $F832 ;CLEAR LOW-RES SCREEN -CLRTOP .EQU $F836 ;CLEAR THE TOP OF LOW-RES -NEXTCOL .EQU $F85F ;INCREMENT COLOR BY 3 -SETCOL .EQU $F864 ;SET LOW-RES GRAPHICS COLOR -SCRN .EQU $F871 ;READ THE LOW-RES SCREEN -TEXTCMD .EQU $FB2F -TEXTMODE .EQU $FB39 -GR .EQU $FB40 ;BASIC GR COMMAND -WAIT .EQU $FCA8 -COUT .EQU $FDED ;WRITE A CHARACTER -CROUT .EQU $FD8E ;WRITE A CARRIAGE RETURN -PRBYTE .EQU $FDDA ;PRINT VALUE OF BYTE +PLOT .EQU $F800 ;PLOT LO-RES BLOCK IN CURRENT COLOR A=VERT, Y=HORZ +HLINE .EQU $F819 ;Horizontal line: A=Ycoord, Y=LEFTX, H2=RightX +VLINE .EQU $F828 ;VERTICAL LINE +CLRSCR .EQU $F832 ;CLEAR LOW-RES SCREEN +CLRTOP .EQU $F836 ;CLEAR THE TOP OF LOW-RES +NEXTCOL .EQU $F85F ;INCREMENT COLOR BY 3 +SETCOLR .EQU $F864 ;SET LOW-RES GRAPHICS COLOR +SCRN .EQU $F871 ;READ THE LOW-RES SCREEN +TEXTCMD .EQU $FB2F +TEXTMODE .EQU $FB39 +GR .EQU $FB40 ;BASIC GR COMMAND +WAIT .EQU $FCA8 +COUT .EQU $FDED ;WRITE A CHARACTER +CROUT .EQU $FD8E ;WRITE A CARRIAGE RETURN +PRBYTE .EQU $FDDA ;PRINT VALUE OF BYTE