Convert to Dev65 assembler

This commit is contained in:
Bill Chatfield 2020-05-04 23:57:47 -04:00
parent 6567db8527
commit 0597f9b2bb
10 changed files with 419 additions and 198 deletions

Binary file not shown.

View File

@ -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)

View File

@ -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

View File

@ -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

BIN
src/rnd.bin Normal file

Binary file not shown.

BIN
src/rnd.dsk Normal file

Binary file not shown.

345
src/rnd.lst Normal file
View File

@ -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

View File

@ -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

View File

@ -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

Binary file not shown.