mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2024-06-08 20:29:41 +00:00
Merge in JGH PRDECIMAL/*FREE updates.
This commit is contained in:
parent
000a52b19a
commit
190264aed1
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
108
auxmem.hostfs.s
108
auxmem.hostfs.s
|
@ -7,6 +7,7 @@
|
|||
* Set &E0=&FF for testing to report ProDOS errors
|
||||
* 30-Aug-2021 FSC commands moved to here
|
||||
* Command line set by *RUN, and read by OSARGS
|
||||
* 20-Sep-2021 *FREE uses new PRDECIMAL routine
|
||||
|
||||
|
||||
FSXREG EQU $B0
|
||||
|
@ -15,6 +16,7 @@ FSAREG EQU $B2
|
|||
FSCTRL EQU FSXREG
|
||||
FSPTR1 EQU $B4
|
||||
FSPTR2 EQU $B6
|
||||
FSNUM EQU $C8 ; *TEMP*
|
||||
FSCMDLINE EQU $CE
|
||||
|
||||
|
||||
|
@ -313,6 +315,9 @@ FSCCOMMAND ASC 'CHDIR'
|
|||
ASC 'DESTROY'
|
||||
DB $80
|
||||
DW FSCDESTROY-1 ; DESTROY <objlist>, LPTR=>params
|
||||
ASC 'COPY'
|
||||
DB $C0
|
||||
DW COPY-1 ; COPY <source> <dest>, XY=>params
|
||||
*
|
||||
DB $FF ; Terminator
|
||||
|
||||
|
@ -661,28 +666,74 @@ FREERET
|
|||
BRK
|
||||
:NOERR SEC
|
||||
LDA AUXBLK+2 ; LSB of total blks
|
||||
SBC AUXBLK ; LSB of blocks used
|
||||
SBC AUXBLK+0 ; LSB of blocks used
|
||||
TAX
|
||||
LDA AUXBLK+3 ; MSB of total blks
|
||||
SBC AUXBLK+1 ; MSB of blocks used
|
||||
TAY
|
||||
JSR PRDECXY ; Print in decimal
|
||||
LDX #<:FREEM
|
||||
LDY #>:FREEM
|
||||
JSR OUTSTR
|
||||
JSR FORCENL
|
||||
LDX AUXBLK+0 ; Blocks used
|
||||
LDA #$00 ; *TO DO* b16-b23 of free
|
||||
* NEW
|
||||
JSR :FREEDEC ; Print 'AAYYXX blocks aaayyyxxx bytes '
|
||||
LDX #<:FREE
|
||||
LDY #>:FREE
|
||||
JSR OUTSTR ; Print 'free'<nl>
|
||||
LDX AUXBLK+0 ; Blocks used
|
||||
LDY AUXBLK+1
|
||||
JSR PRDECXY ; Print in decimal
|
||||
LDX #<:USEDM
|
||||
LDY #>:USEDM
|
||||
JSR OUTSTR
|
||||
JSR FORCENL
|
||||
RTS
|
||||
:FREEM ASC ' 512-byte Blocks Free'
|
||||
DB $00
|
||||
:USEDM ASC ' 512-byte Blocks Used'
|
||||
DB $00
|
||||
LDA #$00 ; *TO DO* b16-b23 of used
|
||||
JSR :FREEDEC ; Print 'AAYYXX blocks aaayyyxxx bytes '
|
||||
LDX #<:USED
|
||||
LDY #>:USED
|
||||
JMP OUTSTR ; Print 'used'<nl>
|
||||
|
||||
* OLD
|
||||
* JSR PRDECXY ; Print in decimal
|
||||
* LDX #<:FREEM
|
||||
* LDY #>:FREEM
|
||||
* JSR OUTSTR
|
||||
* JSR FORCENL
|
||||
* LDX AUXBLK+0 ; Blocks used
|
||||
* LDY AUXBLK+1
|
||||
* JSR PRDECXY ; Print in decimal
|
||||
* LDX #<:USEDM
|
||||
* LDY #>:USEDM
|
||||
* JSR OUTSTR
|
||||
* JSR FORCENL
|
||||
* RTS
|
||||
*
|
||||
* NEW
|
||||
:FREEDEC STX FSNUM+1
|
||||
STY FSNUM+2
|
||||
STA FSNUM+3
|
||||
* What's the maximum number of blocks?
|
||||
* JSR PRHEX ; Blocks b16-b23 in hex
|
||||
JSR PR2HEX ; Blocks b0-b15 in hex
|
||||
LDX #<:BLOCKS
|
||||
LDY #>:BLOCKS
|
||||
JSR OUTSTR ; ' blocks '
|
||||
STZ FSNUM+0 ; FSNUM=blocks*512
|
||||
ASL FSNUM+1
|
||||
ROL FSNUM+2
|
||||
ROL FSNUM+3
|
||||
LDX #FSNUM ; X=>number to print
|
||||
LDY #8 ; Y=pad up to 8 digits
|
||||
JSR PRINTDEC ; Print it in decimal
|
||||
LDX #<:BYTES
|
||||
LDY #>:BYTES
|
||||
JMP OUTSTR ; ' bytes '
|
||||
:BLOCKS ASC ' blocks '
|
||||
DB 0
|
||||
:BYTES ASC ' bytes '
|
||||
DB 0
|
||||
:FREE ASC 'free'
|
||||
DB 13,0
|
||||
:USED ASC 'used'
|
||||
DB 13,0
|
||||
*
|
||||
* OLD
|
||||
*:FREEM ASC ' 512-byte Blocks Free'
|
||||
* DB $00
|
||||
*:USEDM ASC ' 512-byte Blocks Used'
|
||||
* DB $00
|
||||
|
||||
ACCESS JSR PARSLPTR ; Copy filename->MOSFILE
|
||||
CMP #$00 ; Filename length
|
||||
|
@ -928,26 +979,3 @@ ERROR5E DW $C000
|
|||
ERROR2E DW $C800
|
||||
ASC 'Disk changed' ; $2E - Disk switched
|
||||
DB $00
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
158
auxmem.misc.s
158
auxmem.misc.s
|
@ -4,6 +4,7 @@
|
|||
* Misc functions and API entry block
|
||||
* 02-Sep-2021 Written GSINIT/GSREAD
|
||||
* 11-Sep-2021 PR16DEC uses OS workspace, added rest of default vectors/etc.
|
||||
* 20-Sep-2021 Updated PRDECIMAL routine, prints up to 32 bits.
|
||||
|
||||
|
||||
* OSBYTE $80 - ADVAL
|
||||
|
@ -100,7 +101,7 @@ FORCENL LDA #$86
|
|||
* Print XY in hex
|
||||
OUT2HEX TYA
|
||||
JSR OUTHEX
|
||||
TAX ; Continue into OUTHEX
|
||||
TXA ; Continue into OUTHEX
|
||||
|
||||
* Print hex byte in A
|
||||
OUTHEX PHA
|
||||
|
@ -123,50 +124,101 @@ PRNIB CMP #$0A
|
|||
:S1 ADC #'0' ; < $0A
|
||||
JMP OSWRCH
|
||||
|
||||
* TEMP ENTRY *
|
||||
* Print 16-bit value in XY in decimal
|
||||
* beebwiki.mdfs.net/Number_output_in_6502_machine_code
|
||||
OSNUM EQU OSTEXT+0
|
||||
OSPAD EQU OSTEXT+4
|
||||
|
||||
PRDECXY LDA #' '
|
||||
PRDECPAD STA OSPAD
|
||||
STX OSNUM+0
|
||||
PRDECXY
|
||||
PRDECPAD STX OSNUM+0
|
||||
STY OSNUM+1
|
||||
:PRDEC16 LDY #$08 ; Five digits (5-1)*2
|
||||
:LP1 LDX #$FF
|
||||
SEC
|
||||
:LP2 LDA OSNUM+0
|
||||
SBC :TENS+0,Y
|
||||
STA OSNUM+0
|
||||
LDA OSNUM+1
|
||||
SBC :TENS+1,Y
|
||||
STA OSNUM+1
|
||||
INX
|
||||
BCS :LP2
|
||||
LDA OSNUM+0
|
||||
ADC :TENS+0,Y
|
||||
STA OSNUM+0
|
||||
LDA OSNUM+1
|
||||
ADC :TENS+1,Y
|
||||
STA OSNUM+1
|
||||
TXA
|
||||
BNE :DIGIT
|
||||
LDA OSPAD
|
||||
BNE :PRINT
|
||||
BEQ :NEXT
|
||||
:DIGIT LDX #'0'
|
||||
STX OSPAD
|
||||
ORA #'0'
|
||||
:PRINT JSR OSWRCH
|
||||
:NEXT DEY
|
||||
DEY
|
||||
BPL :LP1
|
||||
RTS
|
||||
:TENS DW 1
|
||||
DW 10
|
||||
DW 100
|
||||
DW 1000
|
||||
DW 10000
|
||||
STZ OSNUM+2
|
||||
STZ OSNUM+3
|
||||
:PRDEC16 LDY #$05 ; 5 digits
|
||||
LDX #OSNUM ; number stored in OSNUM
|
||||
|
||||
* Print up to 32-bit decimal number
|
||||
* See forum.6502.org/viewtopic.php?f=2&t=4894
|
||||
* X=>four byte zero page locations
|
||||
* Y= number of digits, 0 for no padding
|
||||
*
|
||||
PRINTDEC sty OSPAD ; Number of padding+digits
|
||||
ldy #0 ; Digit counter
|
||||
PRDECDIGIT lda #32 ; 32-bit divide
|
||||
sta OSTEMP
|
||||
lda #0 ; Remainder=0
|
||||
clv ; V=0 means div result = 0
|
||||
PRDECDIV10 cmp #10/2 ; Calculate OSNUM/10
|
||||
bcc PRDEC10
|
||||
sbc #10/2+$80 ; Remove digit & set V=1 to show div result > 0
|
||||
sec ; Shift 1 into div result
|
||||
PRDEC10 rol 0,x ; Shift /10 result into OSNUM
|
||||
rol 1,x
|
||||
rol 2,x
|
||||
rol 3,x
|
||||
rol a ; Shift bits of input into acc (input mod 10)
|
||||
dec OSTEMP
|
||||
bne PRDECDIV10 ; Continue 32-bit divide
|
||||
ora #48
|
||||
pha ; Push low digit 0-9 to print
|
||||
iny
|
||||
bvs PRDECDIGIT ; If V=1, result of /10 was > 0 & do next digit
|
||||
lda #32
|
||||
PRDECLP1 cpy OSPAD
|
||||
bcs PRDECLP2 ; Enough padding pushed
|
||||
pha ; Push leading space characters
|
||||
iny
|
||||
bne PRDECLP1
|
||||
PRDECLP2 pla ; Pop character left to right
|
||||
jsr OSWRCH ; Print it
|
||||
dey
|
||||
bne PRDECLP2
|
||||
rts
|
||||
|
||||
|
||||
** Print 16-bit value in XY in decimal
|
||||
** beebwiki.mdfs.net/Number_output_in_6502_machine_code
|
||||
*OSNUM EQU OSTEXT+0
|
||||
*OSPAD EQU OSTEXT+4
|
||||
*
|
||||
*PRDECXY LDA #' '
|
||||
*PRDECPAD STA OSPAD
|
||||
* STX OSNUM+0
|
||||
* STY OSNUM+1
|
||||
*:PRDEC16 LDY #$08 ; Five digits (5-1)*2
|
||||
*:LP1 LDX #$FF
|
||||
* SEC
|
||||
*:LP2 LDA OSNUM+0
|
||||
* SBC :TENS+0,Y
|
||||
* STA OSNUM+0
|
||||
* LDA OSNUM+1
|
||||
* SBC :TENS+1,Y
|
||||
* STA OSNUM+1
|
||||
* INX
|
||||
* BCS :LP2
|
||||
* LDA OSNUM+0
|
||||
* ADC :TENS+0,Y
|
||||
* STA OSNUM+0
|
||||
* LDA OSNUM+1
|
||||
* ADC :TENS+1,Y
|
||||
* STA OSNUM+1
|
||||
* TXA
|
||||
* BNE :DIGIT
|
||||
* LDA OSPAD
|
||||
* BNE :PRINT
|
||||
* BEQ :NEXT
|
||||
*:DIGIT LDX #'0'
|
||||
* STX OSPAD
|
||||
* ORA #'0'
|
||||
*:PRINT JSR OSWRCH
|
||||
*:NEXT DEY
|
||||
* DEY
|
||||
* BPL :LP1
|
||||
* RTS
|
||||
*:TENS DW 1
|
||||
* DW 10
|
||||
* DW 100
|
||||
* DW 1000
|
||||
* DW 10000
|
||||
|
||||
|
||||
* GSINIT - Initialise for GSTRANS string parsing
|
||||
|
@ -436,7 +488,7 @@ OSFFA4 JMP NULLRTS ; FFA4 (DISKACC)
|
|||
OSFFA7 JMP NULLRTS ; FFA7 (DISKCCP)
|
||||
PRHEX JMP OUTHEX ; FFAA PRHEX
|
||||
PR2HEX JMP OUT2HEX ; FFAD PR2HEX
|
||||
OSFFB0 JMP NULLRTS ; FFB0 (USERINT)
|
||||
OSFFB0 JMP PRINTDEC ; FFB0 (USERINT)
|
||||
OSWRRM JMP NULLRTS ; FFB3 OSWRRM
|
||||
|
||||
* COMPULSARY ENTRIES
|
||||
|
@ -480,25 +532,3 @@ MOSVEND
|
|||
AUXBLK ASC '**ENDOFCODE**'
|
||||
DS $200-13
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -53,9 +53,6 @@ CMDTABLE ASC 'CAT' ; Must be first command so matches '*.'
|
|||
DB $8B
|
||||
DW STARBYTE-1 ; OPT -> OSBYTE &8B,X,Y XY=>params
|
||||
* others
|
||||
ASC 'COPY'
|
||||
DB $FF
|
||||
DW COPY-1 ; COPY -> XY=>params
|
||||
ASC 'QUIT'
|
||||
DB $80
|
||||
DW STARQUIT-1 ; QUIT -> (LPTR)=>params
|
||||
|
@ -495,41 +492,10 @@ STARDONE RTS
|
|||
|
||||
* *ECHO <GSTRANS string>
|
||||
************************
|
||||
ECHO
|
||||
* PHY
|
||||
* CLC
|
||||
* JSR ECHO0
|
||||
* PLY
|
||||
SEC
|
||||
ECHO SEC
|
||||
ECHO0 JSR GSINIT
|
||||
* PHP
|
||||
* PLA
|
||||
* JSR OUTHEX
|
||||
ECHOLP1 JSR GSREAD
|
||||
BCS STARDONE
|
||||
* BCS ECHO3
|
||||
* CMP #$20
|
||||
* BCC ECHO2
|
||||
* CMP #$7F
|
||||
* BCS ECHO2
|
||||
JSR OSWRCH
|
||||
JMP ECHOLP1
|
||||
*ECHO2 PHA
|
||||
* LDA #'<'
|
||||
* JSR OSWRCH
|
||||
* PLA
|
||||
* JSR OUTHEX
|
||||
* LDA #'>'
|
||||
* JSR OSWRCH
|
||||
* JMP ECHOLP1
|
||||
*ECHO3
|
||||
* PHP
|
||||
* PLA
|
||||
* JSR OUTHEX
|
||||
* JMP OSNEWL
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user