diff --git a/src/.Makefile.swp b/src/.Makefile.swp index 2f15452..ddbf817 100644 Binary files a/src/.Makefile.swp and b/src/.Makefile.swp differ diff --git a/src/Makefile b/src/Makefile index 50b2b57..8794084 100644 --- a/src/Makefile +++ b/src/Makefile @@ -15,7 +15,7 @@ ifeq ($(OS),Windows_NT) EMU=$(USERPROFILE)\Dropbox\opt\applewin-$(APPLEWIN_VER)\applewin.exe -no-printscreen-dlg -s7 empty -s6d1 else COPY=cp - EMU=$(HOME)/Dropbox/opt/applewin-$(APPLEWIN_VER)/applewin -no-printscreen-dlg -s7 empty -s6d1 + EMU=wine $(HOME)/Dropbox/opt/applewin-$(APPLEWIN_VER)/applewin -no-printscreen-dlg -s7 empty -s6d1 endif # There is some kind of problem with turning this into a boot disk @@ -25,11 +25,11 @@ endif $(DSK): $(PGM) $(COPY) $(BASE_DSK) $(DSK) - $(AC) -p $(DSK) STARTUP BAS < STARTUP#fc0801 - $(AC) -p $(DSK) $(PGM) BIN 0x8000 < $(PGM) + #$(AC) -p $(DSK) STARTUP BAS < ../storage/STARTUP#fc0801 + $(AC) -p $(DSK) $(PGM) BIN 0x8000 < $(PGM).bin $(PGM): $(PGM).obj - $(LK65) -output $(PGM) -bin $(PGM).obj + $(LK65) -code '$$8000-$$9000' -bin $(PGM).obj # as65 does not exit with a non-zero code so that make can detect when it failed. $(PGM).obj: symbols.s macros.s $(SRC) diff --git a/src/as65-output.txt b/src/as65-output.txt index 98a1d5a..e69de29 100644 --- a/src/as65-output.txt +++ b/src/as65-output.txt @@ -1,127 +0,0 @@ -Error: symbols.s (1) No active section -Error: symbols.s (1) Unknown opcode or directive -Error: symbols.s (2) No active section -Error: symbols.s (2) Unknown opcode or directive -Error: symbols.s (3) No active section -Error: symbols.s (3) Unknown opcode or directive -Error: symbols.s (4) No active section -Error: symbols.s (4) Unknown opcode or directive -Error: symbols.s (5) No active section -Error: symbols.s (5) Unknown opcode or directive -Error: symbols.s (6) No active section -Error: symbols.s (6) Unknown opcode or directive -Error: symbols.s (7) No active section -Error: symbols.s (7) Unknown opcode or directive -Error: symbols.s (8) No active section -Error: symbols.s (8) Unknown opcode or directive -Error: symbols.s (14) No active section -Error: symbols.s (14) Unknown opcode or directive -Error: symbols.s (15) No active section -Error: symbols.s (15) Unknown opcode or directive -Error: symbols.s (16) No active section -Error: symbols.s (16) Unknown opcode or directive -Error: symbols.s (17) No active section -Error: symbols.s (17) Unknown opcode or directive -Error: symbols.s (18) No active section -Error: symbols.s (18) Unknown opcode or directive -Error: symbols.s (19) No active section -Error: symbols.s (19) Unknown opcode or directive -Error: symbols.s (43) No active section -Error: symbols.s (43) Unknown opcode or directive -Error: symbols.s (44) No active section -Error: symbols.s (44) Unknown opcode or directive -Error: symbols.s (45) No active section -Error: symbols.s (45) Unknown opcode or directive -Error: symbols.s (46) No active section -Error: symbols.s (46) Unknown opcode or directive -Error: symbols.s (47) No active section -Error: symbols.s (47) Unknown opcode or directive -Error: symbols.s (48) No active section -Error: symbols.s (48) Unknown opcode or directive -Error: symbols.s (49) No active section -Error: symbols.s (49) Unknown opcode or directive -Error: symbols.s (50) No active section -Error: symbols.s (50) Unknown opcode or directive -Error: symbols.s (76) No active section -Error: symbols.s (76) Unknown opcode or directive -Error: symbols.s (77) No active section -Error: symbols.s (77) Unknown opcode or directive -Error: symbols.s (78) No active section -Error: symbols.s (78) Unknown opcode or directive -Error: symbols.s (79) No active section -Error: symbols.s (79) Unknown opcode or directive -Error: symbols.s (80) No active section -Error: symbols.s (80) Unknown opcode or directive -Error: symbols.s (81) No active section -Error: symbols.s (81) Unknown opcode or directive -Error: symbols.s (82) No active section -Error: symbols.s (82) Unknown opcode or directive -Error: symbols.s (83) No active section -Error: symbols.s (83) Unknown opcode or directive -Error: macros.s (1) No active section -Error: macros.s (1) Unknown opcode or directive -Error: macros.s (2) No active section -Error: macros.s (2) Unknown opcode or directive -Error: macros.s (3) No active section -Error: macros.s (3) Unknown opcode or directive -Error: macros.s (4) No active section -Error: macros.s (4) Unknown opcode or directive -Error: macros.s (5) No active section -Error: macros.s (5) Unknown opcode or directive -Error: macros.s (6) No active section -Error: macros.s (6) Unknown opcode or directive -Error: macros.s (7) No active section -Error: macros.s (7) Unknown opcode or directive -Error: macros.s (8) No active section -Error: macros.s (8) Unknown opcode or directive -Error: macros.s (34) No active section -Error: macros.s (34) Unknown opcode or directive -Error: macros.s (35) No active section -Error: macros.s (35) Unknown opcode or directive -Error: macros.s (36) No active section -Error: macros.s (36) Unknown opcode or directive -Error: macros.s (37) No active section -Error: macros.s (37) Unknown opcode or directive -Error: macros.s (38) No active section -Error: macros.s (38) Unknown opcode or directive -Error: macros.s (39) No active section -Error: macros.s (39) Unknown opcode or directive -Error: macros.s (40) No active section -Error: macros.s (40) Unknown opcode or directive -Error: macros.s (55) No active section -Error: macros.s (55) Unknown opcode or directive -Error: macros.s (56) No active section -Error: macros.s (56) Unknown opcode or directive -Error: macros.s (57) No active section -Error: macros.s (57) Unknown opcode or directive -Error: macros.s (58) No active section -Error: macros.s (58) Unknown opcode or directive -Error: macros.s (59) No active section -Error: macros.s (59) Unknown opcode or directive -Error: macros.s (60) No active section -Error: macros.s (60) Unknown opcode or directive -Error: macros.s (61) No active section -Error: macros.s (61) Unknown opcode or directive -Error: macros.s (62) No active section -Error: macros.s (62) Unknown opcode or directive -Error: macros.s (63) No active section -Error: macros.s (63) Unknown opcode or directive -Error: macros.s (64) No active section -Error: macros.s (64) Unknown opcode or directive -Error: rnd.s (11) Unknown opcode or directive -Error: rnd.s (17) Unknown opcode or directive -Error: rnd.s (27) Label as already been defined: * -Error: rnd.s (27) Unknown opcode or directive -Error: rnd.s (37) Label as already been defined: * -Error: rnd.s (37) Unknown opcode or directive -Error: rnd.s (44) Label as already been defined: * -Error: rnd.s (44) Unknown opcode or directive -Error: rnd.s (50) Label as already been defined: * -Error: rnd.s (50) Unknown opcode or directive -Error: rnd.s (60) Label as already been defined: * -Error: rnd.s (60) Unknown opcode or directive -Error: rnd.s (61) Label as already been defined: * -Error: rnd.s (61) Unknown opcode or directive -Error: rnd.s (64) Illegal addressing mode -Error: rnd.s (67) Label as already been defined: * -Error: rnd.s (67) Unknown opcode or directive diff --git a/src/macros.s b/src/macros.s index eaa1063..c3adcb2 100644 --- a/src/macros.s +++ b/src/macros.s @@ -1,11 +1,11 @@ -******************************** -* * -* MACROS * -* * -* AUTHOR: BILL CHATFIELD * -* LICENSE: GPL2 * -* * -******************************** +;******************************* +; * +; MACROS * +; * +; AUTHOR: BILL CHATFIELD * +; LICENSE: GPL2 * +; * +;******************************* PUSHY .MACRO TYA @@ -31,13 +31,13 @@ POPXY .MACRO TAX .ENDM -******************************** -* * -* PUTS .MACRORO - OUTPUTS STRING * -* ]1 = ADDRESS OF NULL- * -* TERMINATED STRING * -* * -******************************** +;******************************* +; * +; PUTS .MACRORO - OUTPUTS STRING * +; ]1 = ADDRESS OF NULL- * +; TERMINATED STRING * +; * +;******************************* PUTS .MACRO PUSHY @@ -52,16 +52,16 @@ NEXT LDA \0,Y ; LOAD A CHARACTER DONE POPY .ENDM -******************************** -* * -* PUTF - * -* PRINTS FLOATING POINT NUMBER * -* IN FAC. DESTROYS VALUE IN * -* FAC. DON'T KNOW WHY. * -* * -* ]1 - ABS ADDR FOR STRING * -* * -******************************** +;******************************* +; * +; PUTF - * +; PRINTS FLOATING POINT NUMBER * +; IN FAC. DESTROYS VALUE IN * +; FAC. DON'T KNOW WHY. * +; * +; ]1 - ABS ADDR FOR STRING * +; * +;******************************* PUTF .MACRO JSR FOUT ;CONVERT FAC TO STRING @@ -69,3 +69,4 @@ PUTF .MACRO STY \0+1 ;STORE HIGH BYTE OF STRING PUTS (\0) ;PRINT STRING .ENDM + diff --git a/src/rnd.bin b/src/rnd.bin new file mode 100644 index 0000000..a35c845 Binary files /dev/null and b/src/rnd.bin differ diff --git a/src/rnd.dsk b/src/rnd.dsk new file mode 100644 index 0000000..2ca3a6d Binary files /dev/null and b/src/rnd.dsk differ diff --git a/src/rnd.lst b/src/rnd.lst new file mode 100644 index 0000000..3ed7778 --- /dev/null +++ b/src/rnd.lst @@ -0,0 +1,345 @@ + +Portable 65xx Assembler - V1.2 (2008-03-09) + + ;************************** + ; + ; Random dungeon generator + ; + ;************************** + + .code + + .include "symbols.s" + ;******************************* + ; * + ; SYMBOLS * + ; * + ; AUTHOR: BILL CHATFIELD * + ; LICENSE: GPL2 * + ; * + ;******************************* + + 0000004E = RNDL .EQU $4e ;Continuously incremented while waiting for keyboard input + 0000004F = RNDH .EQU $4f ;High byte of RNDL + 0000009D = FACEXP .EQU $9d ;Address of FAC exponent used by FADDT,FSUBT,FMULTT,FDIVT + + ;******************************* + ; * + ; MEMORY MAPPED INPUT/OUTPUT * + ; ADDRESSES $C000 - $C0FF * + ; * + ;******************************* + + 0000C000 = KBD .EQU $C000 ;BIT 7 IS 1 IF KEY PRESSED + 0000C010 = KBDSTRB .EQU $C010 ;CLEARS KBD BIT 7 + 0000C000 = CLR80STO .EQU $C000 ;ALLOW PAGE2 PG1 & PG2 SWITCHING + 0000C001 = SET80STO .EQU $C001 ;ALLOW PAGE2 MAIN & AUX SWITCHNG + 0000C018 = STO80 .EQU $C018 ;1=PAGE2 SWITCHES MAIN/AUX + ;0=PAGE2 SWITCHES VIDEO PAGES + 0000C00C = CLR80VID .EQU $C00C ;TURN OFF 80-COL DISPLAY + 0000C00D = SET80VID .EQU $C00D ;TURN ON 80-COL DISPLAY + 0000C01F = COL80 .EQU $C01F ;0=40 COL IS ON, 1=80 COL IS ON + 0000C050 = TEXTOFF .EQU $C050 ;SELECTS GRAPHICS MODE + 0000C051 = TEXTON .EQU $C051 ;SELECTS TEXT MODE + 0000C01A = TEXT .EQU $C01A ;1=TEXT MODE ACTIVE,0=GRAPH MODE + 0000C052 = MIXEDOFF .EQU $C052 ;USE FULL-SCREEN GRAPHICS + 0000C053 = MIXEDON .EQU $C053 ;USE GRAPHICS WITH 4 LINES TEXT + 0000C01B = MIXED .EQU $C01B ;0=FULL SCREEN, 1=MIXED + 0000C054 = PAGE2OFF .EQU $C054 ;SELECTS PAGE1 OR MAIN VID MEM + 0000C055 = PAGE2ON .EQU $C055 ;SELECTS PAGE2 OR AUX VID MEM + 0000C01C = PAGE2 .EQU $C01C ;1=VID PG2 SELECTED OR AUX SEL + 0000C056 = HIRESOFF .EQU $C056 ;SELECTS LOW-RES GRAPHICS + 0000C057 = HIRESON .EQU $C057 ;SELECTS HIGH-RES GRAPHICS + 0000C01D = HIRES .EQU $C01D ;0=LOW-RES, 1=HIGH-RES + + ;******************************* + ; * + ; SUBROUTINES PROVIDED BY * + +Portable 65xx Assembler - V1.2 (2008-03-09) + + ; APPLESOFT BASIC * + ; IN READ-ONLY MEMORY * + ; ADDRESSES $D000 - $F7FF * + ; * + ;******************************* + + 0000DB3A = STROUT .EQU $DB3A ;PRINT STRING IN Y,A + 0000E2F2 = GIVAYF .EQU $E2F2 ;CONVERT 2-BYTE INT A(HI) Y(LO) TO FLOAT IN FAC + 0000E6FB = CONINT .EQU $E6FB ;CONVERT FAC TO BYTE IN X, ERR IF FAC > 255 + 0000E7BE = FADD .EQU $E7BE ;FAC = MEM + FAC, MEM ADDR IS Y(HI) A(LO) + 0000E7A7 = FSUB .EQU $E7A7 ;FAC = MEM - FAC, MEM ADDR IS Y(HI) A(LO) + 0000E97F = FMULT .EQU $E97F ;FAC = MEM * FAC, MEM ADDR IS Y(HI) A(LO) + 0000EA66 = FDIV .EQU $EA66 ;FAC = MEM / FAC, MEM ADDR IS Y(HI) A(LO) + 0000E7C1 = FADDT .EQU $E7C1 ;FAC = ARG + FAC, MUST LOAD FACEXP INTO A FIRST + 0000E7AA = FSUBT .EQU $E7AA ;FAC = ARG - FAC, MUST LOAD FACEXP INTO A FIRST + 0000E982 = FMULTT .EQU $E982 ;FAC = ARG * FAC, MUST LOAD FACEXP INTO A FIRST + 0000EA69 = FDIVT .EQU $EA69 ;FAC = ARG / FAC, MUST LOAD FACEXP INTO A FIRST + 0000EA39 = MUL10 .EQU $EA39 ;MULTIPLY FAC BY 10 + 0000EBB2 = FCOMP .EQU $EBB2 ;COMP MEM TO FAC + 0000EBF2 = QINT .EQU $EBF2 ;CONVERT FAC TO INTEGER + 0000EB93 = FLOAT .EQU $EB93 ;CONVERT A TO FAC, I THINK + 0000EB63 = MOVAF .EQU $EB63 ;MOVE FAC INTO ARG + 0000EB2B = MOVMF .EQU $EB2B ;MOVE FAC TO MEMORY Y,X + 0000EB53 = MOVFA .EQU $EB53 ;MOVE ARG TO FAC + 0000EB2B = MOVFM .EQU $EB2B ;MOVE MEMORY TO FAC + 0000EC23 = INT .EQU $EC23 ;APPLESOFT INT FUNCTION + 0000ED2E = PRINTFAC .EQU $ED2E ;PRINT FAC. USES FOUT,STROUT + 0000ED34 = FOUT .EQU $ED34 ;FAC TO STRING, FAC DESTROYED + 0000EFAE = RND .EQU $EFAE ;APPLESOFT RND FUNCTION + + ;******************************* + ; * + ; SUBROUTINES PROVIDED BY * + ; SYSTEM MONITOR PROGRAM * + ; IN READ-ONLY MEMORY * + ; ADDRESSES $F800 - $FFFF * + ; * + ;******************************* + + 0000F800 = PLOT .EQU $F800 ;PLOT BLOCK ON LOW-RES SCREEN + 0000F819 = HLINE .EQU $F819 ;HORIZONTAL LINE + 0000F828 = VLINE .EQU $F828 ;VERTICAL LINE + 0000F832 = CLRSCR .EQU $F832 ;CLEAR LOW-RES SCREEN + 0000F836 = CLRTOP .EQU $F836 ;CLEAR THE TOP OF LOW-RES + 0000F85F = NEXTCOL .EQU $F85F ;INCREMENT COLOR BY 3 + 0000F864 = SETCOL .EQU $F864 ;SET LOW-RES GRAPHICS COLOR + 0000F871 = SCRN .EQU $F871 ;READ THE LOW-RES SCREEN + 0000FB2F = TEXTCMD .EQU $FB2F + 0000FB39 = TEXTMODE .EQU $FB39 + 0000FB40 = GR .EQU $FB40 ;BASIC GR COMMAND + 0000FCA8 = WAIT .EQU $FCA8 + 0000FDED = COUT .EQU $FDED ;WRITE A CHARACTER + 0000FD8E = CROUT .EQU $FD8E ;WRITE A CARRIAGE RETURN + 0000FDDA = PRBYTE .EQU $FDDA ;PRINT VALUE OF BYTE + +Portable 65xx Assembler - V1.2 (2008-03-09) + + + .include "macros.s" + ;******************************* + ; * + ; MACROS * + ; * + ; AUTHOR: BILL CHATFIELD * + ; LICENSE: GPL2 * + ; * + ;******************************* + +000000' PUSHY .MACRO + TYA + PHA + .ENDM + +000000' POPY .MACRO + PLA + TAY + .ENDM + +000000' PUSHXY .MACRO + TXA + PHA + TYA + PHA + .ENDM + +000000' POPXY .MACRO + PLA + TAY + PLA + TAX + .ENDM + + ;******************************* + ; * + ; PUTS .MACRORO - OUTPUTS STRING * + ; ]1 = ADDRESS OF NULL- * + ; TERMINATED STRING * + ; * + ;******************************* + +000000' PUTS .MACRO + PUSHY + LDY #0 ; PREPARE LOOP INDEX +000000' NEXT LDA \0,Y ; LOAD A CHARACTER + CMP #0 ; CHECK FOR END OF STRING + BEQ DONE + ORA #%10000000 ; SET HIGH BIT FOR OUTPUT + JSR COUT + INY + JMP NEXT +000000' DONE POPY + +Portable 65xx Assembler - V1.2 (2008-03-09) + + .ENDM + + ;******************************* + ; * + ; PUTF - * + ; PRINTS FLOATING POINT NUMBER * + ; IN FAC. DESTROYS VALUE IN * + ; FAC. DON'T KNOW WHY. * + ; * + ; ]1 - ABS ADDR FOR STRING * + ; * + ;******************************* + +000000' 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 + + + .org $8000 + +008000 202380 : main jsr seedrnd +008003 204B80 : jsr rndcol ;Set the color +008006 60 : rts + + ; Add A to FAC leaving result in FAC +008007 : addafac +008007 48 : pha +008008 2063EB : jsr MOVAF ;Move FAC to ARG +00800B 68 : pla +00800C 2093EB : jsr FLOAT ;Convert A to floating point in FAC +00800F A59D : lda FACEXP ;Required for FADDT +008011 20C1E7 : jsr FADDT ;Add ARG to FAC putting result in FAC +008014 60 : rts ;Return with result in FAC + + ; Multiply FAC by A leaving result in FAC +008015 : mulafac +008015 48 : pha ;Save A on stack +008016 2063EB : jsr MOVAF ;Move FAC to ARG +008019 68 : pla ;Get original value back in A +00801A 2093EB : jsr FLOAT ;Convert value in A to floating point in FAC +00801D A59D : lda FACEXP ;Required for FMULTT +00801F 2082E9 : jsr FMULTT ;Multiply ARG by FAC putting result in FAC +008022 60 : rts ;Return with result in FAC + + ; Seed RND function by calling it with a variable negative number. +008023 A54E : seedrnd lda RNDL ;RNDL is a good seed value, because it changes +008025 0980 : ora #$80 ;Make it negative so RND will interpret it as a seed +008027 2093EB : jsr FLOAT ;Convert it to floating point +00802A 20AEEF : jsr RND ;Seed the random number generator +00802D 60 : rts + + +Portable 65xx Assembler - V1.2 (2008-03-09) + + ; Generate a floating point random number in the range [0,1) with result in FAC +00802E A901 : genrnd lda #1 ;A 1 arg to RND says to give the next random num +008030 2093EB : jsr FLOAT ;Convert to floating point as required by RND +008033 20AEEF : jsr RND ;Generate the random number +008036 60 : rts ;Return with result in FAC + + ; Generate an integer random number in the range [0,A-1] with result in A +008037 : rnda +008037 48 : pha ;Save parameter in A to stack +008038 202E80 : jsr genrnd ;Generate random number [0,1) in FAC +00803B 68 : pla ;Load multiplier into accumulator +00803C 201580 : jsr mulafac ;Multiply FAC by A +00803F 20FBE6 : jsr CONINT ;Convert FAC to 1-byte int in X +008042 8A : txa ;Put the result in A +008043 60 : rts ;Return with result A + + ; Generate an integer random number in the range [1,A] inclusive + ; with result in A +008044 : rnd1a +008044 203780 : jsr rnda ;Get an integer between [0,A-1] in A +008047 18 : clc ;Change the range to [1,A] +008048 6901 : adc #1 +00804A 60 : rts + + ; Set the color to a random non-black value. +00804B : rndcol +00804B A90F : lda #15 ;Max color number +00804D 204480 : jsr rnd1a ;Generate a random non-black color number +008050 2064F8 : jsr SETCOL ;Set the color +008053 60 : rts + + + +Portable 65xx Assembler - V1.2 (2008-03-09) + +Symbol Table + +CLR80STO 0000C000 +CLR80VID 0000C00C +CLRSCR 0000F832 +CLRTOP 0000F836 +COL80 0000C01F +CONINT 0000E6FB +COUT 0000FDED +CROUT 0000FD8E +FACEXP 0000009D +FADD 0000E7BE +FADDT 0000E7C1 +FCOMP 0000EBB2 +FDIV 0000EA66 +FDIVT 0000EA69 +FLOAT 0000EB93 +FMULT 0000E97F +FMULTT 0000E982 +FOUT 0000ED34 +FSUB 0000E7A7 +FSUBT 0000E7AA +GIVAYF 0000E2F2 +GR 0000FB40 +HIRES 0000C01D +HIRESOFF 0000C056 +HIRESON 0000C057 +HLINE 0000F819 +INT 0000EC23 +KBD 0000C000 +KBDSTRB 0000C010 +MIXED 0000C01B +MIXEDOFF 0000C052 +MIXEDON 0000C053 +MOVAF 0000EB63 +MOVFA 0000EB53 +MOVFM 0000EB2B +MOVMF 0000EB2B +MUL10 0000EA39 +NEXTCOL 0000F85F +PAGE2 0000C01C +PAGE2OFF 0000C054 +PAGE2ON 0000C055 +PLOT 0000F800 +PRBYTE 0000FDDA +PRINTFAC 0000ED2E +QINT 0000EBF2 +RND 0000EFAE +RNDH 0000004F +RNDL 0000004E +SCRN 0000F871 +SET80STO 0000C001 +SET80VID 0000C00D +SETCOL 0000F864 + +Portable 65xx Assembler - V1.2 (2008-03-09) + +STO80 0000C018 +STROUT 0000DB3A +TEXT 0000C01A +TEXTCMD 0000FB2F +TEXTMODE 0000FB39 +TEXTOFF 0000C050 +TEXTON 0000C051 +VLINE 0000F828 +WAIT 0000FCA8 +__6501__ 00000000 +__6502__ 00000001 +__65816__ 00000000 +__65C02__ 00000000 +__65SC02__ 00000000 +addafac 00008007 +genrnd 0000802E +main 00008000 +mulafac 00008015 +rnd1a 00008044 +rnda 00008037 +rndcol 0000804B +seedrnd 00008023 diff --git a/src/rnd.s b/src/rnd.s index 3dc02cb..539e371 100644 --- a/src/rnd.s +++ b/src/rnd.s @@ -3,18 +3,19 @@ ; Random dungeon generator ; ;************************** - .include "symbols.s" - .include "macros.s" .code - org $8000 + .include "symbols.s" + .include "macros.s" + + .org $8000 main jsr seedrnd jsr rndcol ;Set the color rts -* Add A to FAC leaving result in FAC +; Add A to FAC leaving result in FAC addafac pha jsr MOVAF ;Move FAC to ARG @@ -24,7 +25,7 @@ addafac jsr FADDT ;Add ARG to FAC putting result in FAC rts ;Return with result in FAC -* Multiply FAC by A leaving result in FAC +; Multiply FAC by A leaving result in FAC mulafac pha ;Save A on stack jsr MOVAF ;Move FAC to ARG @@ -34,20 +35,20 @@ mulafac jsr FMULTT ;Multiply ARG by FAC putting result in FAC rts ;Return with result in FAC -* Seed RND function by calling it with a variable negative number. +; Seed RND function by calling it with a variable negative number. seedrnd lda RNDL ;RNDL is a good seed value, because it changes ora #$80 ;Make it negative so RND will interpret it as a seed jsr FLOAT ;Convert it to floating point jsr RND ;Seed the random number generator rts -* Generate a floating point random number in the range [0,1) with result in FAC +; Generate a floating point random number in the range [0,1) with result in FAC genrnd lda #1 ;A 1 arg to RND says to give the next random num jsr FLOAT ;Convert to floating point as required by RND jsr RND ;Generate the random number rts ;Return with result in FAC -* Generate an integer random number in the range [0,A-1] with result in A +; Generate an integer random number in the range [0,A-1] with result in A rnda pha ;Save parameter in A to stack jsr genrnd ;Generate random number [0,1) in FAC @@ -57,14 +58,15 @@ rnda txa ;Put the result in A rts ;Return with result A -* Generate an integer random number in the range [1,A] inclusive -* with result in A +; Generate an integer random number in the range [1,A] inclusive +; with result in A rnd1a jsr rnda ;Get an integer between [0,A-1] in A - inc ;Change the range to [1,A] + clc ;Change the range to [1,A] + adc #1 rts -* Set the color to a random non-black value. +; Set the color to a random non-black value. rndcol lda #15 ;Max color number jsr rnd1a ;Generate a random non-black color number diff --git a/src/symbols.s b/src/symbols.s index 144d819..26b6e53 100644 --- a/src/symbols.s +++ b/src/symbols.s @@ -1,22 +1,22 @@ -******************************** -* * -* SYMBOLS * -* * -* AUTHOR: BILL CHATFIELD * -* LICENSE: GPL2 * -* * -******************************** +;******************************* +; * +; SYMBOLS * +; * +; AUTHOR: BILL CHATFIELD * +; LICENSE: GPL2 * +; * +;******************************* 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 -******************************** -* * -* MEMORY MAPPED INPUT/OUTPUT * -* ADDRESSES $C000 - $C0FF * -* * -******************************** +;******************************* +; * +; MEMORY MAPPED INPUT/OUTPUT * +; ADDRESSES $C000 - $C0FF * +; * +;******************************* KBD .EQU $C000 ;BIT 7 IS 1 IF KEY PRESSED KBDSTRB .EQU $C010 ;CLEARS KBD BIT 7 @@ -40,14 +40,14 @@ HIRESOFF .EQU $C056 ;SELECTS LOW-RES GRAPHICS HIRESON .EQU $C057 ;SELECTS HIGH-RES GRAPHICS HIRES .EQU $C01D ;0=LOW-RES, 1=HIGH-RES -******************************** -* * -* SUBROUTINES PROVIDED BY * -* APPLESOFT BASIC * -* IN READ-ONLY MEMORY * -* ADDRESSES $D000 - $F7FF * -* * -******************************** +;******************************* +; * +; SUBROUTINES PROVIDED BY * +; APPLESOFT BASIC * +; IN READ-ONLY MEMORY * +; ADDRESSES $D000 - $F7FF * +; * +;******************************* STROUT .EQU $DB3A ;PRINT STRING IN Y,A GIVAYF .EQU $E2F2 ;CONVERT 2-BYTE INT A(HI) Y(LO) TO FLOAT IN FAC @@ -73,14 +73,14 @@ PRINTFAC .EQU $ED2E ;PRINT FAC. USES FOUT,STROUT FOUT .EQU $ED34 ;FAC TO STRING, FAC DESTROYED RND .EQU $EFAE ;APPLESOFT RND FUNCTION -******************************** -* * -* SUBROUTINES PROVIDED BY * -* SYSTEM MONITOR PROGRAM * -* IN READ-ONLY MEMORY * -* ADDRESSES $F800 - $FFFF * -* * -******************************** +;******************************* +; * +; SUBROUTINES PROVIDED BY * +; SYSTEM MONITOR PROGRAM * +; IN READ-ONLY MEMORY * +; ADDRESSES $F800 - $FFFF * +; * +;******************************* PLOT .EQU $F800 ;PLOT BLOCK ON LOW-RES SCREEN HLINE .EQU $F819 ;HORIZONTAL LINE diff --git a/storage/prodos-2.0.3-boot.dsk b/storage/prodos-2.0.3-boot.dsk index 27c25ad..a96a899 100644 Binary files a/storage/prodos-2.0.3-boot.dsk and b/storage/prodos-2.0.3-boot.dsk differ