Added support for OSBYTE $7F (End of file)
This commit is contained in:
parent
e40f3a391a
commit
3d4c4b2e85
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
|
@ -1,6 +1,6 @@
|
|||
* Load an Acorn BBC Micro ROM in aux memory and
|
||||
* Provide an environment where it can run
|
||||
* Bobbi 2021
|
||||
* (c) Bobbi 2021 GPLv3
|
||||
*
|
||||
* Assembled with the Merlin 8 assembler.
|
||||
|
||||
|
@ -45,6 +45,8 @@ OPENCMD EQU $C8
|
|||
READCMD EQU $CA
|
||||
WRITECMD EQU $CB
|
||||
CLSCMD EQU $CC
|
||||
GMARKCMD EQU $CF
|
||||
GEOFCMD EQU $D1
|
||||
|
||||
* IO Buffer for reading file (1024 bytes)
|
||||
IOBUF0 EQU $4000 ; For loading ROM, OSFILE, *.
|
||||
|
|
89
auxmem.s
89
auxmem.s
|
@ -1,4 +1,5 @@
|
|||
* AUXMEM.S
|
||||
* (c) Bobbi 2021 GPLv3
|
||||
* BBC Micro 'virtual machine' in Apple //e aux memory
|
||||
|
||||
ZP1 EQU $90 ; $90-$9f are Econet space
|
||||
|
@ -967,77 +968,84 @@ BYTEHND PHA
|
|||
PLA
|
||||
RTS
|
||||
BYTECALLER
|
||||
CMP #$00
|
||||
BNE :S1
|
||||
CMP #$00 ; $00 = identify MOS version
|
||||
BNE :S7C
|
||||
LDX #$0A
|
||||
RTS
|
||||
|
||||
:S1 CMP #$7C ; $7C = clear escape condition
|
||||
BNE :S2
|
||||
:S7C CMP #$7C ; $7C = clear escape condition
|
||||
BNE :S7D
|
||||
LDA ESCFLAG
|
||||
AND #$7F ; Clear MSbit
|
||||
STA ESCFLAG
|
||||
RTS
|
||||
|
||||
:S2 CMP #$7D ; $7D = set escape condition
|
||||
BNE :S3
|
||||
:S7D CMP #$7D ; $7D = set escape condition
|
||||
BNE :S7E
|
||||
ROR ESCFLAG
|
||||
RTS
|
||||
|
||||
:S3 CMP #$7E ; $7E = ack detection of ESC
|
||||
BNE :S4
|
||||
:S7E CMP #$7E ; $7E = ack detection of ESC
|
||||
BNE :S7F
|
||||
LDA ESCFLAG
|
||||
AND #$7F ; Clear MSB
|
||||
STA ESCFLAG
|
||||
LDX #$FF ; Means ESC condition cleared
|
||||
RTS
|
||||
|
||||
:S4 CMP #$81 ; $81 = Read key with time lim
|
||||
BNE :S5
|
||||
:S7F CMP #$7F ; $7F = check for EOF
|
||||
BNE :S81
|
||||
PHY
|
||||
JSR CHKEOF
|
||||
PLY
|
||||
RTS
|
||||
|
||||
:S81 CMP #$81 ; $81 = Read key with time lim
|
||||
BNE :S82
|
||||
JSR GETKEY
|
||||
RTS
|
||||
|
||||
:S5 CMP #$82 ; $82 = read high order address
|
||||
BNE :S6
|
||||
:S82 CMP #$82 ; $82 = read high order address
|
||||
BNE :S83
|
||||
LDY #$FF ; $FFFF for I/O processor
|
||||
LDX #$FF
|
||||
RTS
|
||||
|
||||
:S6 CMP #$83 ; $83 = read bottom of user mem
|
||||
BNE :S7
|
||||
:S83 CMP #$83 ; $83 = read bottom of user mem
|
||||
BNE :S84
|
||||
LDY #$0E ; $0E00
|
||||
LDX #$00
|
||||
RTS
|
||||
|
||||
:S7 CMP #$84 ; $84 = read top of user mem
|
||||
BNE :S8
|
||||
:S84 CMP #$84 ; $84 = read top of user mem
|
||||
BNE :S85
|
||||
LDY #$80
|
||||
LDX #$00
|
||||
RTS
|
||||
|
||||
:S8 CMP #$85 ; $85 = top user mem for mode
|
||||
BNE :S9
|
||||
:S85 CMP #$85 ; $85 = top user mem for mode
|
||||
BNE :S86
|
||||
LDY #$80
|
||||
LDX #$00
|
||||
RTS
|
||||
|
||||
:S9 CMP #$86 ; $86 = read cursor pos
|
||||
BNE :S10
|
||||
:S86 CMP #$86 ; $86 = read cursor pos
|
||||
BNE :SDA
|
||||
LDY ROW
|
||||
LDX COL
|
||||
RTS
|
||||
|
||||
:S10 CMP #$DA ; $DA = clear VDU queue
|
||||
BNE :S11
|
||||
:SDA CMP #$DA ; $DA = clear VDU queue
|
||||
BNE :UNSUPP
|
||||
RTS
|
||||
|
||||
:S11 PHX
|
||||
:UNSUPP PHX
|
||||
PHY
|
||||
PHA
|
||||
LDA #<OSBYTEM
|
||||
LDY #>OSBYTEM
|
||||
JSR PRSTR
|
||||
TSX
|
||||
LDA $103,X
|
||||
PLA
|
||||
JSR OUTHEX
|
||||
LDA #<OSBM2
|
||||
LDY #>OSBM2
|
||||
|
@ -1365,6 +1373,35 @@ OSBYTE80 CPX #$00 ; X=0 Last ADC channel
|
|||
:INPUT LDX #$00 ; Nothing in input buf
|
||||
RTS
|
||||
|
||||
* Performs OSBYTE $7F EOF function
|
||||
* File ref number is in X
|
||||
CHKEOF LDA STRTL ; Backup STRTL/STRTH
|
||||
STA TEMP1
|
||||
LDA STRTH
|
||||
STA TEMP2
|
||||
STA $C004 ; Write main mem
|
||||
STX MOSFILE ; File reference number
|
||||
STA $C005 ; Write aux mem
|
||||
LDA #<FILEEOF
|
||||
STA STRTL
|
||||
LDA #>FILEEOF
|
||||
STA STRTH
|
||||
TSX ; Stash alt SP in $0101
|
||||
STX $0101
|
||||
CLC ; Use main memory
|
||||
CLV ; Use main ZP and LC
|
||||
JMP XFER
|
||||
CHKEOFRET
|
||||
LDX $0101 ; Recover alt SP from $0101
|
||||
TXS
|
||||
PHA ; Return code in A
|
||||
LDA TEMP1
|
||||
STA STRTL
|
||||
LDA TEMP2
|
||||
STA STRTH
|
||||
PLX ; Recover return code -> X
|
||||
RTS
|
||||
|
||||
* Performs OSBYTE $81 INKEY$ function
|
||||
* X,Y has time limit
|
||||
* On exit, CC, Y=$00, X=key - key pressed
|
||||
|
@ -1429,7 +1466,7 @@ DELAY PHX
|
|||
:L2 INY ; 2
|
||||
CPY #$00 ; 2
|
||||
BNE :L2 ; 3 (taken)
|
||||
CPX #$05 ; 2
|
||||
CPX #$02 ; 2
|
||||
BNE :L1 ; 3 (taken)
|
||||
PLY
|
||||
PLX
|
||||
|
|
96
mainmem.s
96
mainmem.s
|
@ -1,4 +1,5 @@
|
|||
* MAINMEM.S
|
||||
* (c) Bobbi 2021 GPL v3
|
||||
* Code that runs on the Apple //e in main memory
|
||||
* This code is mostly glue between the BBC Micro code
|
||||
* running in aux mem and ProDOS
|
||||
|
@ -10,7 +11,7 @@ SETPRFX LDA #GPFXCMD
|
|||
:OPC7 DB $00
|
||||
DW GSPFXPL
|
||||
LDX $0300
|
||||
BNE :S1
|
||||
BNE RTSINST
|
||||
LDA $BF30
|
||||
STA ONLPL+1 ; Device number
|
||||
JSR MLI
|
||||
|
@ -25,7 +26,7 @@ SETPRFX LDA #GPFXCMD
|
|||
STA $0301
|
||||
DEC :OPC7
|
||||
BNE :L1
|
||||
:S1 RTS
|
||||
RTSINST RTS
|
||||
|
||||
* Disconnect /RAM ramdrive to avoid aux corruption
|
||||
* Stolen from Beagle Bros Extra K
|
||||
|
@ -76,7 +77,7 @@ RESET TSX
|
|||
LDA #>AUXMOS
|
||||
STA STRTH
|
||||
SEC
|
||||
BIT $FF58
|
||||
BIT RTSINST
|
||||
JMP XFER
|
||||
RTS
|
||||
|
||||
|
@ -214,7 +215,7 @@ FINDEXIT LDA $C08B ; R/W RAM, LC bank 1
|
|||
STA STRTH
|
||||
PLA
|
||||
SEC
|
||||
BIT $FF58
|
||||
BIT RTSINST
|
||||
JMP XFER
|
||||
BUFIDX DB $00
|
||||
|
||||
|
@ -277,7 +278,7 @@ GETEXIT LDA $C08B ; R/W RAM, LC bank 1
|
|||
STA STRTH
|
||||
PLA
|
||||
SEC
|
||||
BIT $FF58
|
||||
BIT RTSINST
|
||||
JMP XFER
|
||||
|
||||
* ProDOS file handling for MOS OSBPUT call
|
||||
|
@ -305,9 +306,62 @@ FILEPUT LDX $0100 ; Recover SP
|
|||
LDA #>OSBPUTRET
|
||||
STA STRTH
|
||||
SEC
|
||||
BIT $FF58
|
||||
BIT RTSINST
|
||||
JMP XFER
|
||||
|
||||
* ProDOS file handling for OSBYTE $7F EOF
|
||||
* Returns EOF status in A ($FF for EOF, $00 otherwise)
|
||||
FILEEOF LDX $0100 ; Recover SP
|
||||
TXS
|
||||
LDA $C081 ; ROM, please
|
||||
LDA $C081
|
||||
|
||||
LDA MOSFILE ; File ref number
|
||||
STA GEOFPL+1
|
||||
STA GMARKPL+1
|
||||
JSR MLI
|
||||
DB GEOFCMD
|
||||
DW GEOFPL
|
||||
BCS :ISEOF ; If error, just say EOF
|
||||
|
||||
JSR MLI
|
||||
DB GMARKCMD
|
||||
DW GMARKPL
|
||||
BCS :ISEOF ; If error, just say EOF
|
||||
|
||||
LDA GEOFPL+2 ; Subtract Mark from EOF
|
||||
SEC
|
||||
SBC GMARKPL+2
|
||||
STA :REMAIN
|
||||
LDA GEOFPL+3
|
||||
SBC GMARKPL+3
|
||||
STA :REMAIN+1
|
||||
LDA GEOFPL+4
|
||||
SBC GMARKPL+4
|
||||
STA :REMAIN+2
|
||||
|
||||
LDA :REMAIN ; Check bytes remaining
|
||||
BNE :NOTEOF
|
||||
LDA :REMAIN+1
|
||||
BNE :NOTEOF
|
||||
LDA :REMAIN+2
|
||||
BNE :NOTEOF
|
||||
:ISEOF LDA #$FF
|
||||
BRA :EXIT
|
||||
:NOTEOF LDA #$00
|
||||
:EXIT PHA ; Preserve return code
|
||||
LDA $C08B ; R/W RAM, LC bank 1
|
||||
LDA $C08B
|
||||
LDA #<CHKEOFRET
|
||||
STA STRTL
|
||||
LDA #>CHKEOFRET
|
||||
STA STRTH
|
||||
PLA ; Recover return code
|
||||
SEC
|
||||
BIT RTSINST
|
||||
JMP XFER
|
||||
:REMAIN DS 3 ; Remaining bytes
|
||||
|
||||
* ProDOS file handling for MOS OSFILE LOAD call
|
||||
* Return A=0 if successful
|
||||
* A=1 if file not found
|
||||
|
@ -379,7 +433,7 @@ LOADFILE LDX $0100 ; Recover SP
|
|||
STA STRTH
|
||||
PLA
|
||||
SEC
|
||||
BIT $FF58
|
||||
BIT RTSINST
|
||||
JMP XFER
|
||||
:BLOCKS DB $00
|
||||
|
||||
|
@ -392,6 +446,14 @@ SAVEFILE LDX $0100 ; Recover SP
|
|||
LDA $C081 ; Gimme the ROM!
|
||||
LDA $C081
|
||||
|
||||
LDA #<MOSFILE ; Attempt to destroy file
|
||||
STA DESTPL+1
|
||||
LDA #>MOSFILE
|
||||
STA DESTPL+2
|
||||
JSR MLI
|
||||
DB DESTCMD
|
||||
DW DESTPL
|
||||
|
||||
STZ :BLOCKS
|
||||
LDA #<MOSFILE
|
||||
STA CREATEPL+1
|
||||
|
@ -527,7 +589,7 @@ SAVEFILE LDX $0100 ; Recover SP
|
|||
STA STRTH
|
||||
PLA
|
||||
SEC
|
||||
BIT $FF58
|
||||
BIT RTSINST
|
||||
JMP XFER
|
||||
:LEN DW $0000
|
||||
:BLOCKS DB $00
|
||||
|
@ -576,7 +638,7 @@ CATREENTRY
|
|||
LDA #>PRONEBLK
|
||||
STA STRTH
|
||||
SEC
|
||||
BIT $FF58
|
||||
BIT RTSINST
|
||||
JMP XFER
|
||||
|
||||
:READERR
|
||||
|
@ -592,7 +654,7 @@ CATEXIT LDA $C08B ; R/W LC RAM, bank 1
|
|||
STA STRTH
|
||||
PLA
|
||||
SEC
|
||||
BIT $FF58
|
||||
BIT RTSINST
|
||||
JMP XFER
|
||||
|
||||
* PRONEBLK call returns here ...
|
||||
|
@ -621,7 +683,7 @@ SETPFX LDX $0100 ; Recover SP
|
|||
LDA #>STARDIRRET
|
||||
STA STRTH
|
||||
SEC
|
||||
BIT $FF58
|
||||
BIT RTSINST
|
||||
JMP XFER
|
||||
|
||||
* Create disk file
|
||||
|
@ -717,6 +779,18 @@ GPFXPL HEX 01 ; Number of parameters
|
|||
SPFXPL HEX 01 ; Number of parameters
|
||||
DW MOSFILE ; Buffer
|
||||
|
||||
GMARKPL HEX 02 ; Number of parameters
|
||||
DB $00 ; File reference number
|
||||
DB $00 ; Mark (24 bit)
|
||||
DB $00
|
||||
DB $00
|
||||
|
||||
GEOFPL HEX 02 ; Number of parameters
|
||||
DB $00 ; File reference number
|
||||
DB $00 ; EOF (24 bit)
|
||||
DB $00
|
||||
DB $00
|
||||
|
||||
QUITPL HEX 04 ; Number of parameters
|
||||
DB $00
|
||||
DW $0000
|
||||
|
|
Loading…
Reference in New Issue