mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2025-08-12 19:25:04 +00:00
Merging JGH: Tweeks to i/f between OSCLI & HOSTFS.
This commit is contained in:
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
@@ -175,3 +175,5 @@ MAINZP MAC
|
|||||||
PUT AUXMEM.CHARIO
|
PUT AUXMEM.CHARIO
|
||||||
PUT AUXMEM.MISC
|
PUT AUXMEM.MISC
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
143
auxmem.bytwrd.s
143
auxmem.bytwrd.s
@@ -2,10 +2,6 @@
|
|||||||
* (c) Bobbi 2021 GPLv3
|
* (c) Bobbi 2021 GPLv3
|
||||||
*
|
*
|
||||||
* Applecorn OSBYTE and OSWORD handlers
|
* Applecorn OSBYTE and OSWORD handlers
|
||||||
|
|
||||||
* KERNEL/OSWOSB.S
|
|
||||||
*****************
|
|
||||||
* OSBYTE and OSWORD dispatch
|
|
||||||
*
|
*
|
||||||
* 15-Aug-2021 Added 'set variable' OSBYTEs 1-6
|
* 15-Aug-2021 Added 'set variable' OSBYTEs 1-6
|
||||||
|
|
||||||
@@ -65,13 +61,13 @@ OSWBASE DW WORD00 ; OSWORD 0 - Read input line
|
|||||||
DW WORD04 ; OSWORD 4 - Write interval timer
|
DW WORD04 ; OSWORD 4 - Write interval timer
|
||||||
DW WORD05 ; OSWORD 5 - Read I/O memory
|
DW WORD05 ; OSWORD 5 - Read I/O memory
|
||||||
DW WORD06 ; OSWORD 6 - Write I/O memory
|
DW WORD06 ; OSWORD 6 - Write I/O memory
|
||||||
* DW WORD07 ; OSWORD 7 - SOUND
|
* DW WORD07 ; OSWORD 7 - SOUND
|
||||||
* DW WORD08 ; OSWORD 8 - ENVELOPE
|
* DW WORD08 ; OSWORD 8 - ENVELOPE
|
||||||
* DW WORD09 ; OSWORD 9 - POINT
|
* DW WORD09 ; OSWORD 9 - POINT
|
||||||
* DW WORD0A ; OSWORD 10 - Read character bitmap
|
* DW WORD0A ; OSWORD 10 - Read character bitmap
|
||||||
* DW WORD0B ; OSWORD 11 - Read palette
|
* DW WORD0B ; OSWORD 11 - Read palette
|
||||||
* DW WORD0C ; OSWORD 12 - Write palette
|
* DW WORD0C ; OSWORD 12 - Write palette
|
||||||
* DW WORD0D ; OSWORD 13 - Read coordinates
|
* DW WORD0D ; OSWORD 13 - Read coordinates
|
||||||
OSWEND
|
OSWEND
|
||||||
DW WORDE0 ; OSWORD &E0+ - User OSWORD
|
DW WORDE0 ; OSWORD &E0+ - User OSWORD
|
||||||
|
|
||||||
@@ -142,12 +138,12 @@ BYTEGO3 ORA #$80 ; Will become CS=OSBYTE call
|
|||||||
|
|
||||||
BYTWRDCALL ASL A ; Index into dispatch table
|
BYTWRDCALL ASL A ; Index into dispatch table
|
||||||
TAY ; Y=offset into dispatch table
|
TAY ; Y=offset into dispatch table
|
||||||
* BIT FXNETCLAIM ; Check Econet intercept flag
|
* BIT FXNETCLAIM ; Check Econet intercept flag
|
||||||
* BPL BYTWRDNONET ; No intercept, skip past
|
* BPL BYTWRDNONET ; No intercept, skip past
|
||||||
* TXA ; Set A=BYTE or WORD call
|
* TXA ; Set A=BYTE or WORD call
|
||||||
* CLV ; Clear V
|
* CLV ; Clear V
|
||||||
* JSR CALLNET ; Call Econet with X=call type
|
* JSR CALLNET ; Call Econet with X=call type
|
||||||
* BVS BYTWRDEXIT ; V now set, claimed by NETV
|
* BVS BYTWRDEXIT ; V now set, claimed by NETV
|
||||||
|
|
||||||
BYTWRDNONET LDA BYTWRDADDR+1,Y ; Get routine address
|
BYTWRDNONET LDA BYTWRDADDR+1,Y ; Get routine address
|
||||||
STA OSINTWS+1
|
STA OSINTWS+1
|
||||||
@@ -172,20 +168,35 @@ BYTWRDGO JSR JMPADDR ; Call the routine
|
|||||||
* X,Y,Cy from routine returned to caller
|
* X,Y,Cy from routine returned to caller
|
||||||
|
|
||||||
BYTWRDEXIT ROR A ; Move Carry to A
|
BYTWRDEXIT ROR A ; Move Carry to A
|
||||||
PLP ; Restore original flags
|
PLP ; Restore original flags and IRQs
|
||||||
ROL A ; Move Carry back to flags
|
ROL A ; Move Carry back to flags
|
||||||
PLA ; Restore A
|
PLA ; Restore A
|
||||||
CLV ; Clear V = Actioned
|
CLV ; Clear V = Actioned
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
BYTWRDFAIL
|
BYTWRDFAIL
|
||||||
* JSR SERVICE ; Offer to sideways ROMs
|
* TEST code for VIEW
|
||||||
* LDX OSXREG ; Get returned X
|
CPX #$07
|
||||||
* CMP #$00
|
BNE BYTFAIL0
|
||||||
* BEQ BYTWRDEXIT ; Claimed, return
|
CMP #$76
|
||||||
|
BEQ BYTE76
|
||||||
|
CMP #$A0
|
||||||
|
BNE BYTFAIL0
|
||||||
|
LDY #79 ; Read VDU variable $09,$0A
|
||||||
|
LDX #23
|
||||||
|
BRA BYTWRDEXIT
|
||||||
|
BYTE76
|
||||||
|
LDX $00
|
||||||
|
BRA BYTWRDEXIT
|
||||||
|
* TEST
|
||||||
|
BYTFAIL0
|
||||||
|
* JSR SERVICE ; Offer to sideways ROMs
|
||||||
|
* LDX OSXREG ; Get returned X
|
||||||
|
* CMP #$00
|
||||||
|
* BEQ BYTWRDEXIT ; Claimed, return
|
||||||
JSR UNSUPBYTWRD ; *DEBUG*
|
JSR UNSUPBYTWRD ; *DEBUG*
|
||||||
LDX #$FF ; X=&FF if unclaimed
|
LDX #$FF ; X=&FF if unclaimed
|
||||||
PLP ; Restore IRQs
|
PLP ; Restore original flags and IRQs
|
||||||
PLA ; Restore A
|
PLA ; Restore A
|
||||||
BIT SETV ; Set V = Not actioned
|
BIT SETV ; Set V = Not actioned
|
||||||
RTS
|
RTS
|
||||||
@@ -202,7 +213,7 @@ JMPADDR JMP ($00FA)
|
|||||||
* On exit, Y=length of line, offset to <cr>
|
* On exit, Y=length of line, offset to <cr>
|
||||||
* CC = Ok, CS = Escape
|
* CC = Ok, CS = Escape
|
||||||
*
|
*
|
||||||
XC ; 65c02
|
|
||||||
WORD00 IF MAXLEN-OSTEXT-2
|
WORD00 IF MAXLEN-OSTEXT-2
|
||||||
LDY #$04
|
LDY #$04
|
||||||
:WORD00LP1 LDA (OSCTRL),Y ; Copy MAXLEN, MINCH, MAXCH to workspace
|
:WORD00LP1 LDA (OSCTRL),Y ; Copy MAXLEN, MINCH, MAXCH to workspace
|
||||||
@@ -216,14 +227,14 @@ WORD00 IF MAXLEN-OSTEXT-2
|
|||||||
BPL :WORD00LP2
|
BPL :WORD00LP2
|
||||||
INY ; Initial line length = zero
|
INY ; Initial line length = zero
|
||||||
ELSE
|
ELSE
|
||||||
LDA (OSCTRL),Y ; Copy control block
|
LDA (OSCTRL),Y ; Copy control block
|
||||||
STA OSTEXT,Y ; 0,1 => text
|
STA OSTEXT,Y ; 0,1 => text
|
||||||
INY ; 2 = MAXLEN
|
INY ; 2 = MAXLEN
|
||||||
CPY #$05 ; 3 = MINCHAR
|
CPY #$05 ; 3 = MINCHAR
|
||||||
BCC WORD00 ; 4 = MAXCHAR
|
BCC WORD00 ; 4 = MAXCHAR
|
||||||
LDY #$00 ; Initial line length = zero
|
LDY #$00 ; Initial line length = zero
|
||||||
FIN
|
FIN
|
||||||
* STY FXLINES ; Reset line counter
|
* STY FXLINES ; Reset line counter
|
||||||
CLI
|
CLI
|
||||||
BEQ :WORD00LP ; Enter main loop
|
BEQ :WORD00LP ; Enter main loop
|
||||||
|
|
||||||
@@ -234,17 +245,20 @@ WORD00 IF MAXLEN-OSTEXT-2
|
|||||||
|
|
||||||
:WORD00LP JSR OSRDCH
|
:WORD00LP JSR OSRDCH
|
||||||
BCS :WORD00ESC ; Escape
|
BCS :WORD00ESC ; Escape
|
||||||
* TAX ; Save character in X
|
* TAX ; Save character in X
|
||||||
* LDA FXVAR03 ; Get FX3 destination
|
* LDA FXVAR03 ; Get FX3 destination
|
||||||
* ROR A
|
* ROR A
|
||||||
* ROR A ; Move bit 1 into Carry
|
* ROR A ; Move bit 1 into Carry
|
||||||
* TXA ; Get character back
|
* TXA ; Get character back
|
||||||
* BCS :WORD00TEST ; VDU disabled, ignore
|
* BCS :WORD00TEST ; VDU disabled, ignore
|
||||||
* LDX FXVDUQLEN ; Get length of VDU queue
|
* LDX FXVDUQLEN ; Get length of VDU queue
|
||||||
* BNE :WORD00ECHO ; Not zero, just print
|
* BNE :WORD00ECHO ; Not zero, just print
|
||||||
:WORD00TEST CMP #$7F ; Delete
|
:WORD00TEST CMP #$7F ; Delete
|
||||||
|
BEQ :WORD00DEL
|
||||||
|
CMP #$08 ; If KBD has no DELETE key
|
||||||
BNE :WORD00CHAR
|
BNE :WORD00CHAR
|
||||||
CPY #$00
|
LDA #$7F
|
||||||
|
:WORD00DEL CPY #$00
|
||||||
BEQ :WORD00LP ; Nothing to delete
|
BEQ :WORD00LP ; Nothing to delete
|
||||||
DEY ; Back up one character
|
DEY ; Back up one character
|
||||||
BCS :WORD00ECHO ; Loop back to print DEL
|
BCS :WORD00ECHO ; Loop back to print DEL
|
||||||
@@ -269,7 +283,7 @@ WORD00 IF MAXLEN-OSTEXT-2
|
|||||||
BCS :WORD00ECHO ; >MAXCHAR, don't step to next
|
BCS :WORD00ECHO ; >MAXCHAR, don't step to next
|
||||||
|
|
||||||
:WORD00CR JSR OSNEWL
|
:WORD00CR JSR OSNEWL
|
||||||
* JSR CALLNET ; Call Econet Vector, A=13
|
* JSR CALLNET ; Call Econet Vector, A=13
|
||||||
:WORD00ESC LDA ESCFLAG ; Get Escape flag
|
:WORD00ESC LDA ESCFLAG ; Get Escape flag
|
||||||
ROL A ; Carry=Escape state
|
ROL A ; Carry=Escape state
|
||||||
RTS
|
RTS
|
||||||
@@ -297,47 +311,62 @@ WORD02 RTS ; Dummy, do nothing
|
|||||||
* On entry, (OSCTRL)+0 address
|
* On entry, (OSCTRL)+0 address
|
||||||
* (OSCTRL)+4 byte read or written
|
* (OSCTRL)+4 byte read or written
|
||||||
* Y=0, A=(OSCTRL)
|
* Y=0, A=(OSCTRL)
|
||||||
|
* IRQs are disabled, so we don't have to preserve IRQ state
|
||||||
XC ; 65c02
|
*
|
||||||
WORD05 JSR GETADDR ; Point to address, set X and Y
|
WORD05 JSR GETADDR ; Point to address, set Y=>data
|
||||||
LDA (OSINTWS) ; Get byte
|
BNE WORD05A
|
||||||
|
STA $C002 ; Switch to main memory
|
||||||
|
WORD05A LDA (OSINTWS) ; Get byte
|
||||||
|
STA $C003 ; Back to aux memory
|
||||||
STA (OSCTRL),Y ; Store it
|
STA (OSCTRL),Y ; Store it
|
||||||
RTS
|
RTS
|
||||||
WORD06 JSR GETADDR ; Point to address, set X and Y
|
|
||||||
|
WORD06 JSR GETADDR ; Point to address, set Y=>data
|
||||||
|
PHP
|
||||||
LDA (OSCTRL),Y ; Get byte
|
LDA (OSCTRL),Y ; Get byte
|
||||||
STA (OSINTWS) ; Store it
|
PLP
|
||||||
|
BNE WORD06A
|
||||||
|
STA $C004 ; Switch to main memory
|
||||||
|
WORD06A STA (OSINTWS) ; Store it
|
||||||
|
STA $C005 ; Back to aux memory
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
GETADDR STA OSINTWS+0 ; (OSINTWS)=>byte to read/write
|
GETADDR STA OSINTWS+0 ; (OSINTWS)=>byte to read/write
|
||||||
INY
|
INY
|
||||||
LDA (OSCTRL),Y
|
LDA (OSCTRL),Y
|
||||||
STA OSINTWS+1
|
STA OSINTWS+1
|
||||||
LDY #$04 ; Point Y to data byte
|
INY
|
||||||
|
INY
|
||||||
|
LDA (OSCTRL),Y ; Get address high byte
|
||||||
|
INY ; Point Y to data byte
|
||||||
|
CMP #$80 ; *TO DO* Needs an appropriate value
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
* OSBYTE routines
|
* OSBYTE routines
|
||||||
*****************
|
*****************
|
||||||
|
|
||||||
|
* TO DO: move to init.s
|
||||||
BYTE00 LDX #$0A ; $00 = identify Host
|
BYTE00 LDX #$0A ; $00 = identify Host
|
||||||
RTS
|
RTS ; %000x1xxx host type, 'A'pple
|
||||||
|
|
||||||
BYTE88 LDA #$01 ; $88 = *CODE
|
BYTE88 LDA #$01 ; $88 = *CODE
|
||||||
WORDE0 JMP (USERV) ; OSWORD &E0+
|
WORDE0 JMP (USERV) ; OSWORD &E0+
|
||||||
|
|
||||||
* Low OSBYTE converted into Set Variable
|
* Low OSBYTE converted into Set Variable
|
||||||
BYTE02 LDA #$F7 ; -> &B1
|
BYTE02 LDA #$F7 ; -> &B1
|
||||||
;
|
*
|
||||||
BYTE09 ; -> &C2
|
BYTE09 ; -> &C2
|
||||||
BYTE0A ; -> &C3
|
BYTE0A ; -> &C3
|
||||||
BYTE0B ; -> &C4
|
BYTE0B ; -> &C4
|
||||||
BYTE0C ADC #$C9 ; -> &C5
|
BYTE0C ADC #$C9 ; -> &C5
|
||||||
;
|
*
|
||||||
BYTE01 ; -> &F1
|
BYTE01 ; -> &F1
|
||||||
BYTE05 ; -> &F5
|
BYTE05 ; -> &F5
|
||||||
BYTE06 ADC #$07 ; -> &F6
|
BYTE06 ADC #$07 ; -> &F6
|
||||||
;
|
*
|
||||||
BYTE03 ; -> &EC
|
BYTE03 ; -> &EC
|
||||||
BYTE04 ADC #$E8 ; -> &ED
|
BYTE04 ADC #$E8 ; -> &ED
|
||||||
;
|
*
|
||||||
* Read/Write OSBYTE variable
|
* Read/Write OSBYTE variable
|
||||||
BYTEVAR TAY ; offset to variable
|
BYTEVAR TAY ; offset to variable
|
||||||
LDA BYTEVARBASE+0,Y
|
LDA BYTEVARBASE+0,Y
|
||||||
@@ -358,7 +387,8 @@ BYTE8D ; *ROM
|
|||||||
BYTE82 ; $82 = read high order address
|
BYTE82 ; $82 = read high order address
|
||||||
* LDY #$00
|
* LDY #$00
|
||||||
* LDX #$00 ; $0000 for language processor
|
* LDX #$00 ; $0000 for language processor
|
||||||
* Should return $0000, but BCPL and Lisp playing silly buggers
|
* Should return $0000, but BCPL and Lisp try to move up to $F800
|
||||||
|
* overwriting Apple II stuff
|
||||||
LDY #$FF ; $FFFF for I/O processor
|
LDY #$FF ; $FFFF for I/O processor
|
||||||
LDX #$FF
|
LDX #$FF
|
||||||
RTS
|
RTS
|
||||||
@@ -386,7 +416,7 @@ BYTE7DOK RTS
|
|||||||
* Passed on to filing system
|
* Passed on to filing system
|
||||||
BYTE8B LDA #$00 ; &00 -> &00 - *OPT
|
BYTE8B LDA #$00 ; &00 -> &00 - *OPT
|
||||||
BYTE7F AND #$01 ; &7F -> &01 - EOF
|
BYTE7F AND #$01 ; &7F -> &01 - EOF
|
||||||
JMP (FSCV) ; Hand over to filing system
|
CALLFSCV JMP (FSCV) ; Hand over to filing system
|
||||||
|
|
||||||
|
|
||||||
* TO DO: Move this to AUXMEM.INIT.S
|
* TO DO: Move this to AUXMEM.INIT.S
|
||||||
@@ -433,9 +463,18 @@ UNSUPBYTWRD
|
|||||||
UNSUPGO JSR PRSTR
|
UNSUPGO JSR PRSTR
|
||||||
LDA OSAREG
|
LDA OSAREG
|
||||||
JSR OUTHEX
|
JSR OUTHEX
|
||||||
|
* LDA #$2C
|
||||||
|
* LDA OSXREG
|
||||||
|
* JSR OUTHEX
|
||||||
|
* LDA #$2C
|
||||||
|
* LDA OSYREG
|
||||||
|
* JSR OUTHEX
|
||||||
LDA #<OSBM2
|
LDA #<OSBM2
|
||||||
LDY #>OSBM2
|
LDY #>OSBM2
|
||||||
JMP PRSTR
|
JSR PRSTR
|
||||||
|
* JSR OSRDCH
|
||||||
|
LDA OSAREG
|
||||||
|
RTS
|
||||||
|
|
||||||
OSBYTEM ASC 'OSBYTE($'
|
OSBYTEM ASC 'OSBYTE($'
|
||||||
DB $00
|
DB $00
|
||||||
@@ -444,3 +483,5 @@ OSWORDM ASC 'OSWORD($'
|
|||||||
OSBM2 ASC ').'
|
OSBM2 ASC ').'
|
||||||
DB $00
|
DB $00
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -97,11 +97,11 @@ RDCHHND LDA #$80 ; flag=wait forever
|
|||||||
TAY
|
TAY
|
||||||
BRA INKEYGO ; Wait forever for input
|
BRA INKEYGO ; Wait forever for input
|
||||||
|
|
||||||
; XY<$8000 - wait for a keypress
|
* XY<$8000 - wait for a keypress
|
||||||
INKEY PHY ; Dummy PHY to balance RDCH
|
INKEY PHY ; Dummy PHY to balance RDCH
|
||||||
INKEYGO PHX ; Save registers
|
INKEYGO PHX ; Save registers
|
||||||
PHY
|
PHY
|
||||||
;
|
*
|
||||||
BIT VDUSTATUS ; Enable editing cursor
|
BIT VDUSTATUS ; Enable editing cursor
|
||||||
BVC INKEYGO2 ; No editing cursor
|
BVC INKEYGO2 ; No editing cursor
|
||||||
JSR GETCHRC ; Get character under cursor
|
JSR GETCHRC ; Get character under cursor
|
||||||
@@ -111,10 +111,10 @@ INKEYGO PHX ; Save registers
|
|||||||
JSR COPYSWAP1 ; Swap to copy cursor
|
JSR COPYSWAP1 ; Swap to copy cursor
|
||||||
INKEYGO2 JSR GETCHRC ; Get character under cursor
|
INKEYGO2 JSR GETCHRC ; Get character under cursor
|
||||||
STA OLDCHAR
|
STA OLDCHAR
|
||||||
;
|
*
|
||||||
CLI
|
CLI
|
||||||
BRA INKEY1 ; Turn cursor on
|
BRA INKEY1 ; Turn cursor on
|
||||||
;
|
*
|
||||||
INKEYLP1 PHX
|
INKEYLP1 PHX
|
||||||
INKEYLP2 PHY
|
INKEYLP2 PHY
|
||||||
INKEYLP CLC
|
INKEYLP CLC
|
||||||
@@ -138,7 +138,7 @@ INKEY3 LDA ESCFLAG
|
|||||||
BMI INKEYOK ; Escape pending, return it
|
BMI INKEYOK ; Escape pending, return it
|
||||||
INKEY4 JSR KEYREAD ; Test for input, all can be trashed
|
INKEY4 JSR KEYREAD ; Test for input, all can be trashed
|
||||||
BCC INKEYOK ; Char returned, return it
|
BCC INKEYOK ; Char returned, return it
|
||||||
;
|
*
|
||||||
* VBLK pulses at 50Hz, changes at 100Hz
|
* VBLK pulses at 50Hz, changes at 100Hz
|
||||||
* (60Hz in US, will need tweeking)
|
* (60Hz in US, will need tweeking)
|
||||||
LDX $C019 ; Get initial VBLK state
|
LDX $C019 ; Get initial VBLK state
|
||||||
@@ -147,7 +147,7 @@ INKEY5 BIT $C000
|
|||||||
TXA
|
TXA
|
||||||
EOR $C019
|
EOR $C019
|
||||||
BPL INKEY5 ; Wait for VBLK change
|
BPL INKEY5 ; Wait for VBLK change
|
||||||
;
|
*
|
||||||
PLY
|
PLY
|
||||||
BMI INKEYLP2 ; Loop forever
|
BMI INKEYLP2 ; Loop forever
|
||||||
PLX
|
PLX
|
||||||
@@ -158,22 +158,22 @@ INKEYDEC DEX
|
|||||||
BNE INKEYLP1 ; Not 0, loop back
|
BNE INKEYLP1 ; Not 0, loop back
|
||||||
TYA
|
TYA
|
||||||
BNE INKEYLP1 ; Not 0, loop back
|
BNE INKEYLP1 ; Not 0, loop back
|
||||||
;
|
*
|
||||||
PHY
|
PHY
|
||||||
JSR INKEYOFF ; Restore cursors
|
JSR INKEYOFF ; Restore cursors
|
||||||
PLY
|
PLY
|
||||||
;
|
*
|
||||||
DEY ; Y=$FF
|
DEY ; Y=$FF
|
||||||
TYA ; A=$FF
|
TYA ; A=$FF
|
||||||
PLX ; Drop dummy PHY
|
PLX ; Drop dummy PHY
|
||||||
SEC
|
SEC
|
||||||
RTS
|
RTS
|
||||||
; Timeout: CS, AY=$FFFF, becomes XY=$FFFF
|
* Timeout: CS, AY=$FFFF, becomes XY=$FFFF
|
||||||
|
|
||||||
INKEYOK PHA
|
INKEYOK PHA
|
||||||
;
|
*
|
||||||
JSR INKEYOFF ; Restore cursors
|
JSR INKEYOFF ; Restore cursors
|
||||||
;
|
*
|
||||||
* LDA OLDCHAR ; Remove editing cursor
|
* LDA OLDCHAR ; Remove editing cursor
|
||||||
* JSR PUTCHRC ; Remove cursor
|
* JSR PUTCHRC ; Remove cursor
|
||||||
* BIT VDUSTATUS
|
* BIT VDUSTATUS
|
||||||
@@ -181,7 +181,7 @@ INKEYOK PHA
|
|||||||
* JSR COPYSWAP1 ; Swap cursor back
|
* JSR COPYSWAP1 ; Swap cursor back
|
||||||
* LDA COPYCHAR
|
* LDA COPYCHAR
|
||||||
* JSR PUTCHRC ; Remove edit cursor
|
* JSR PUTCHRC ; Remove edit cursor
|
||||||
;
|
*
|
||||||
INKEYOK2 PLA
|
INKEYOK2 PLA
|
||||||
PLY ; <$80=INKEY or $80=RDCH
|
PLY ; <$80=INKEY or $80=RDCH
|
||||||
PLX ; Restore X
|
PLX ; Restore X
|
||||||
@@ -223,7 +223,7 @@ NEGINKEY CPX #$01
|
|||||||
LDX #$00 ; Unimplemented
|
LDX #$00 ; Unimplemented
|
||||||
LDY #$00
|
LDY #$00
|
||||||
BCS NEGINKEY0
|
BCS NEGINKEY0
|
||||||
LDX #$20 ; INKEY-256
|
LDX #$2E ; INKEY-256 = $2E = Apple IIe
|
||||||
NEGINKEY0 CLC
|
NEGINKEY0 CLC
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
@@ -263,7 +263,7 @@ KEYREAD
|
|||||||
*
|
*
|
||||||
JSR KBDREAD ; Fetch character from KBD "buffer"
|
JSR KBDREAD ; Fetch character from KBD "buffer"
|
||||||
BCS KEYREADOK ; Nothing pending
|
BCS KEYREADOK ; Nothing pending
|
||||||
;
|
*
|
||||||
TAY
|
TAY
|
||||||
BPL KEYREADOK ; Not top-bit key
|
BPL KEYREADOK ; Not top-bit key
|
||||||
AND #$CF
|
AND #$CF
|
||||||
@@ -281,7 +281,7 @@ KEYREAD
|
|||||||
KEYREADOKY TYA
|
KEYREADOKY TYA
|
||||||
KEYREADOK1 CLC
|
KEYREADOK1 CLC
|
||||||
KEYREADOK RTS
|
KEYREADOK RTS
|
||||||
;
|
*
|
||||||
* Process soft key
|
* Process soft key
|
||||||
KEYSOFT1 LDX FX254VAR
|
KEYSOFT1 LDX FX254VAR
|
||||||
CPX #$C0
|
CPX #$C0
|
||||||
@@ -367,7 +367,7 @@ KBDTEST LDA $C000 ; VS here to test for keypress
|
|||||||
BCC KBDCURSR ; $08-$0B are cursor keys
|
BCC KBDCURSR ; $08-$0B are cursor keys
|
||||||
CMP #$15
|
CMP #$15
|
||||||
BNE KBDCHKESC ; $15 is cursor key
|
BNE KBDCHKESC ; $15 is cursor key
|
||||||
;
|
*
|
||||||
KBDCUR15 LDA #$0D ; Convert RGT to $09
|
KBDCUR15 LDA #$0D ; Convert RGT to $09
|
||||||
KBDTAB SBC #$04 ; Convert TAB to &C9
|
KBDTAB SBC #$04 ; Convert TAB to &C9
|
||||||
KBDCURSR CLC
|
KBDCURSR CLC
|
||||||
@@ -392,7 +392,7 @@ KBDFUNC AND #$0F ; Convert Apple-Num to function key
|
|||||||
BRA KBDCHKESC
|
BRA KBDCHKESC
|
||||||
|
|
||||||
KBDCTRL AND #$1F ; Apple-Letter -> Ctrl-Letter
|
KBDCTRL AND #$1F ; Apple-Letter -> Ctrl-Letter
|
||||||
;
|
*
|
||||||
* Test for Escape key
|
* Test for Escape key
|
||||||
KBDCHKESC TAX ; X=keycode
|
KBDCHKESC TAX ; X=keycode
|
||||||
EOR FXESCCHAR ; Current ESCAPE char?
|
EOR FXESCCHAR ; Current ESCAPE char?
|
||||||
@@ -407,3 +407,5 @@ KBDNOESC TXA ; A=keycode
|
|||||||
CLC ; CLC=Ok
|
CLC ; CLC=Ok
|
||||||
KBDDONE RTS
|
KBDDONE RTS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -251,6 +251,8 @@ FILEHND PHX
|
|||||||
:LOAD >>> XF2MAIN,LOADFILE
|
:LOAD >>> XF2MAIN,LOADFILE
|
||||||
:DELETE >>> XF2MAIN,DELFILE
|
:DELETE >>> XF2MAIN,DELFILE
|
||||||
:MKDIR >>> XF2MAIN,MAKEDIR
|
:MKDIR >>> XF2MAIN,MAKEDIR
|
||||||
|
|
||||||
|
* On return here, A<$80 just return to caller, A>$7F generate error
|
||||||
OSFILERET
|
OSFILERET
|
||||||
>>> ENTAUX
|
>>> ENTAUX
|
||||||
PHA
|
PHA
|
||||||
@@ -258,23 +260,23 @@ OSFILERET
|
|||||||
STA ZP1
|
STA ZP1
|
||||||
LDA CBPTR+1
|
LDA CBPTR+1
|
||||||
STA ZP1+1
|
STA ZP1+1
|
||||||
LDY #$00
|
LDY #$02
|
||||||
:L3 LDA AUXBLK,Y ; Mainmem left it in AUXBLK
|
:L3 LDA AUXBLK,Y ; Mainmem left it in AUXBLK
|
||||||
STA (ZP1),Y
|
STA (ZP1),Y
|
||||||
INY
|
INY
|
||||||
CPY #18 ; 18 bytes in control block
|
CPY #18 ; 18 bytes in control block
|
||||||
BNE :L3
|
BNE :L3
|
||||||
PLA
|
PLA
|
||||||
PLY ; Value of A on OSFILE entry
|
* BMI :L4
|
||||||
|
* JMP :EXIT ; ret<$80, return it to user
|
||||||
|
|
||||||
|
:L4 PLY ; Value of A on OSFILE entry
|
||||||
CPY #$FF ; See if command was LOAD
|
CPY #$FF ; See if command was LOAD
|
||||||
BNE :NOTLOAD
|
BNE :NOTLOAD ; Deal with return from SAVE
|
||||||
|
|
||||||
CMP #$01 ; No file found
|
CMP #$01 ; No file found
|
||||||
BNE :SL1
|
BNE :SL1
|
||||||
BRK
|
BRA ERRNOTFND
|
||||||
DB $D6 ; $D6 = Object not found
|
|
||||||
ASC 'File not found'
|
|
||||||
BRK
|
|
||||||
|
|
||||||
:SL1 CMP #$02 ; Read error
|
:SL1 CMP #$02 ; Read error
|
||||||
BNE :SL2
|
BNE :SL2
|
||||||
@@ -306,14 +308,13 @@ OSFILERET
|
|||||||
|
|
||||||
:SS2 LDA #$01 ; Return code - file found
|
:SS2 LDA #$01 ; Return code - file found
|
||||||
|
|
||||||
:NOTLS CPY #$06 ; Was it DELETE?
|
:NOTLS CMP #$00 ; File was not found
|
||||||
BNE :NOTLSD ; Was LOAD/SAVE/DELETE
|
|
||||||
CMP #$00 ; File was not found
|
|
||||||
BNE :SD1
|
BNE :SD1
|
||||||
BRK
|
JMP :EXIT
|
||||||
DB $D6 ; $D6 = File not found
|
* BRK
|
||||||
ASC 'Not found'
|
* DB $D6 ; $D6 = File not found
|
||||||
BRK
|
* ASC 'Not found'
|
||||||
|
* BRK
|
||||||
|
|
||||||
:SD1 CMP #$FF ; Some other error
|
:SD1 CMP #$FF ; Some other error
|
||||||
BNE :EXIT ; A=0 or 1 already
|
BNE :EXIT ; A=0 or 1 already
|
||||||
@@ -327,26 +328,31 @@ OSFILERET
|
|||||||
:NOTLSD CPY #$08 ; Was it CDIR?
|
:NOTLSD CPY #$08 ; Was it CDIR?
|
||||||
BNE :EXIT
|
BNE :EXIT
|
||||||
CMP #$00 ; A=0 means dir was created
|
CMP #$00 ; A=0 means dir was created
|
||||||
BEQ :SC1
|
BNE ERREXISTS
|
||||||
|
|
||||||
BRK
|
:SC1 LDA #$02 ; A=2 - dir exists or was created
|
||||||
DB $C0 ; Guess - IS THIS REASONABLE??
|
|
||||||
ASC 'Can'
|
|
||||||
DB $27
|
|
||||||
ASC 't create'
|
|
||||||
BRK
|
|
||||||
|
|
||||||
:SC1 LDA #$02 ; Guess I return 2 for dir??
|
|
||||||
|
|
||||||
:EXIT PLY
|
:EXIT PLY
|
||||||
PLX
|
PLX
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
ERRNOTFND BRK
|
||||||
|
DB $D6 ; $D6 = Object not found
|
||||||
|
ASC 'File not found'
|
||||||
|
BRK
|
||||||
|
|
||||||
|
ERREXISTS BRK
|
||||||
|
DB $C4 ; Can't create a dir if a file is
|
||||||
|
ASC 'File exists' ; already there
|
||||||
|
BRK
|
||||||
|
|
||||||
CBPTR DW $0000
|
CBPTR DW $0000
|
||||||
OSFILEM ASC 'OSFILE($'
|
OSFILEM ASC 'OSFILE($'
|
||||||
DB $00
|
DB $00
|
||||||
OSFILEM2 ASC ')'
|
OSFILEM2 ASC ')'
|
||||||
DB $00
|
DB $00
|
||||||
|
OSFSCM ASC 'OSFSC.'
|
||||||
|
DB $00
|
||||||
|
|
||||||
* OSFSC - miscellanous file system calls
|
* OSFSC - miscellanous file system calls
|
||||||
*****************************************
|
*****************************************
|
||||||
@@ -355,6 +361,8 @@ OSFILEM2 ASC ')'
|
|||||||
* On exit, A=preserved if unimplemented
|
* On exit, A=preserved if unimplemented
|
||||||
* A=modified if implemented
|
* A=modified if implemented
|
||||||
* X,Y=any return values
|
* X,Y=any return values
|
||||||
|
*
|
||||||
|
* TO DO: use jump table
|
||||||
FSCHND CMP #$00
|
FSCHND CMP #$00
|
||||||
BEQ FSOPT ; A=0 - *OPT
|
BEQ FSOPT ; A=0 - *OPT
|
||||||
CMP #$01
|
CMP #$01
|
||||||
@@ -372,7 +380,7 @@ FSCHND CMP #$00
|
|||||||
CMP #$0C
|
CMP #$0C
|
||||||
BEQ FSCREN ; A=12 - *RENAME
|
BEQ FSCREN ; A=12 - *RENAME
|
||||||
|
|
||||||
PHA
|
FSCUKN PHA
|
||||||
LDA #<OSFSCM
|
LDA #<OSFSCM
|
||||||
LDY #>OSFSCM
|
LDY #>OSFSCM
|
||||||
JSR PRSTR
|
JSR PRSTR
|
||||||
@@ -391,16 +399,15 @@ FSCRUN STX OSFILECB ; Pointer to filename
|
|||||||
RTS
|
RTS
|
||||||
:CALL JMP (OSFILECB+6) ; Jump to EXEC addr
|
:CALL JMP (OSFILECB+6) ; Jump to EXEC addr
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
FSCREN JSR XYtoLPTR ; Pointer to command line
|
FSCREN JSR XYtoLPTR ; Pointer to command line
|
||||||
JSR RENAME
|
JSR RENAME
|
||||||
RTS
|
RTS
|
||||||
OSFSCM ASC 'OSFSC.'
|
|
||||||
DB $00
|
|
||||||
|
|
||||||
* Performs OSFSC *OPT function
|
* Performs OSFSC *OPT function
|
||||||
FSOPT RTS ; No FS options for now
|
FSOPT RTS ; No FS options for now
|
||||||
|
|
||||||
* Performs OSBYTE $7F EOF function
|
* Performs OSFSC Read EOF function
|
||||||
* File ref number is in X
|
* File ref number is in X
|
||||||
CHKEOF >>> WRTMAIN
|
CHKEOF >>> WRTMAIN
|
||||||
STX MOSFILE ; File reference number
|
STX MOSFILE ; File reference number
|
||||||
@@ -416,7 +423,8 @@ CHKEOFRET
|
|||||||
FSCCAT >>> XF2MAIN,CATALOG
|
FSCCAT >>> XF2MAIN,CATALOG
|
||||||
STARCATRET
|
STARCATRET
|
||||||
>>> ENTAUX
|
>>> ENTAUX
|
||||||
JMP OSNEWL
|
JSR OSNEWL
|
||||||
|
LDA #0 ; 0=OK
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
* Print one block of a catalog. Called by CATALOG
|
* Print one block of a catalog. Called by CATALOG
|
||||||
@@ -536,18 +544,11 @@ RENRET
|
|||||||
CMP #$00
|
CMP #$00
|
||||||
BNE :OTHER ; All other errors
|
BNE :OTHER ; All other errors
|
||||||
RTS
|
RTS
|
||||||
:NOTFND BRK
|
:NOTFND JMP ERRNOTFND
|
||||||
DB $D6
|
:EXISTS JMP ERREXISTS
|
||||||
ASC 'Not found'
|
|
||||||
BRK
|
|
||||||
:EXISTS BRK
|
|
||||||
DB $C4
|
|
||||||
ASC 'Exists'
|
|
||||||
BRK
|
|
||||||
:LOCKED BRK
|
:LOCKED BRK
|
||||||
DB $C3
|
DB $C3
|
||||||
ASC 'Locked'
|
ASC 'Locked'
|
||||||
BRK
|
|
||||||
:OTHER BRK
|
:OTHER BRK
|
||||||
DB $C7
|
DB $C7
|
||||||
ASC 'Disc error'
|
ASC 'Disc error'
|
||||||
|
@@ -109,7 +109,7 @@ MOSINIT LDX #$FF ; Initialize Alt SP to $1FF
|
|||||||
:S8 STA $C00D ; 80 col on
|
:S8 STA $C00D ; 80 col on
|
||||||
STA $C003 ; Alt charset off
|
STA $C003 ; Alt charset off
|
||||||
STA $C055 ; PAGE2
|
STA $C055 ; PAGE2
|
||||||
JMP MOSHIGH ; Ensure running in high mem
|
JMP MOSHIGH ; Ensure executing in high memory here
|
||||||
|
|
||||||
MOSHIGH SEI
|
MOSHIGH SEI
|
||||||
LDX #$FF
|
LDX #$FF
|
||||||
@@ -128,17 +128,25 @@ MOSHIGH SEI
|
|||||||
DEX
|
DEX
|
||||||
BPL :INITPG2
|
BPL :INITPG2
|
||||||
|
|
||||||
JSR KBDINIT
|
JSR KBDINIT ; Returns A=startup MODE
|
||||||
JSR VDUINIT ; Initialise VDU driver
|
JSR VDUINIT ; Initialise VDU driver
|
||||||
|
JSR PRHELLO
|
||||||
LDA #<:HELLO
|
LDA #7
|
||||||
LDY #>:HELLO
|
JSR OSWRCH
|
||||||
JSR PRSTR
|
JSR OSNEWL
|
||||||
|
|
||||||
CLC
|
CLC
|
||||||
JMP BYTE8E ; Enter language ROM
|
JMP BYTE8E
|
||||||
|
|
||||||
:HELLO DB $07
|
PRHELLO LDA #<HELLO
|
||||||
ASC 'Applecorn MOS v0.01'
|
LDY #>HELLO
|
||||||
DB $0D,$0D,$00
|
JSR PRSTR
|
||||||
|
JMP OSNEWL
|
||||||
|
|
||||||
|
BYTE00XX BEQ BYTE00A ; OSBYTE 0,0 - generate error
|
||||||
|
LDX #$0A ; $00 = identify Host
|
||||||
|
RTS ; %000x1xxx host type, 'A'pple
|
||||||
|
BYTE00A BRK
|
||||||
|
DB $F7
|
||||||
|
HELLO ASC 'Applecorn MOS v0.01'
|
||||||
|
DB $00 ; Unify MOS messages
|
||||||
|
|
||||||
|
@@ -2,6 +2,8 @@
|
|||||||
* (c) Bobbi 2021 GPLv3
|
* (c) Bobbi 2021 GPLv3
|
||||||
*
|
*
|
||||||
* Misc functions and API entry block
|
* Misc functions and API entry block
|
||||||
|
* TO DO: Write GSINIT/GSREAD
|
||||||
|
|
||||||
|
|
||||||
* OSBYTE $80 - ADVAL
|
* OSBYTE $80 - ADVAL
|
||||||
************************************
|
************************************
|
||||||
@@ -50,18 +52,18 @@ ADVALBUF INX
|
|||||||
* (------------- - 10 ) / 5
|
* (------------- - 10 ) / 5
|
||||||
* (8 * frequency )
|
* (8 * frequency )
|
||||||
|
|
||||||
* BEEPX EQU 57 ; note=C5
|
* BEEPX EQU #57 ; note=C5
|
||||||
BEEPX EQU 116 ; note=C4
|
BEEPX EQU #116 ; note=C4
|
||||||
BEEP PHA
|
BEEP PHA
|
||||||
PHX
|
PHX
|
||||||
PHY
|
PHY
|
||||||
LDY #$00 ; duration
|
LDY #$00 ; duration
|
||||||
:L1 LDX #BEEPX ; 2cy pitch 2cy
|
:L1 LDX #BEEPX ; 2cy pitch 2cy
|
||||||
*------------------------------------------------
|
*------------------------------------------------------
|
||||||
:L2 DEX ; 2cy BEEPX * 2cy
|
:L2 DEX ; 2cy BEEPX * 2cy
|
||||||
BNE :L2 ; 3cy/2cy (BEEPX-1) * 3cy + 1 * 2cy
|
BNE :L2 ; 3cy/2cy (BEEPX-1) * 3cy + 1 * 2cy
|
||||||
*------------------------------------------------
|
*------------------------------------------------------
|
||||||
* BEEPX*5-1cy
|
* BEEPX*5-1cy
|
||||||
LDA $C030 ; 4cy BEEPX*5+5
|
LDA $C030 ; 4cy BEEPX*5+5
|
||||||
DEY ; 2cy BEEPX*5+7
|
DEY ; 2cy BEEPX*5+7
|
||||||
BNE :L1 ; 3cy/2cy BEEPX*5+10
|
BNE :L1 ; 3cy/2cy BEEPX*5+10
|
||||||
@@ -70,29 +72,29 @@ BEEP PHA
|
|||||||
PLA
|
PLA
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
* Delay approx 1/100 sec
|
** Delay approx 1/100 sec
|
||||||
************************
|
*************************
|
||||||
* Enter at DELAY with CS to test keyboard
|
** Enter at DELAY with CS to test keyboard
|
||||||
* Enter at CENTI to ignore keyboard
|
** Enter at CENTI to ignore keyboard
|
||||||
*
|
**
|
||||||
CENTI CLC ; Don't test keyboard
|
*CENTI CLC ; Don't test keyboard
|
||||||
DELAY PHX ; 3cy
|
*DELAY PHX ; 3cy
|
||||||
PHY ; 3cy
|
* PHY ; 3cy
|
||||||
LDY #10 ; 2cy 10 * 1/1000s
|
* LDY #10 ; 2cy 10 * 1/1000s
|
||||||
*------------------------------------------------
|
**------------------------------------------------
|
||||||
:L1 LDX #$48 ; 2cy $48 gives about 1/1000s
|
*:L1 LDX #$48 ; 2cy $48 gives about 1/1000s
|
||||||
:L2 BCC :L3 ; 2cy/3cy Don't test kbd
|
*:L2 BCC :L3 ; 2cy/3cy Don't test kbd
|
||||||
LDA $C000 ; 4cy
|
* LDA $C000 ; 4cy
|
||||||
BMI :L5 ; 2cy keypress, exit early
|
* BMI :L5 ; 2cy keypress, exit early
|
||||||
:L3 DEX ; 2cy
|
*:L3 DEX ; 2cy
|
||||||
BNE :L2 ; 3cy/2cy -> 72*(2+2+4+2+2+3)-1
|
* BNE :L2 ; 3cy/2cy -> 72*(2+2+4+2+2+3)-1
|
||||||
* ; = 1079 -> 0.00105s
|
** ; = 1079 -> 0.00105s
|
||||||
*------------------------------------------------
|
**------------------------------------------------
|
||||||
:L4 DEY ; 2cy
|
*:L4 DEY ; 2cy
|
||||||
BNE :L1 ; 3cy/2cy
|
* BNE :L1 ; 3cy/2cy
|
||||||
:L5 PLY ; 4cy
|
*:L5 PLY ; 4cy
|
||||||
PLX ; 4cy
|
* PLX ; 4cy
|
||||||
RTS ; 6cy
|
* RTS ; 6cy
|
||||||
|
|
||||||
* Print string pointed to by X,Y to the screen
|
* Print string pointed to by X,Y to the screen
|
||||||
OUTSTR TXA
|
OUTSTR TXA
|
||||||
@@ -124,8 +126,6 @@ OUTHEX PHA
|
|||||||
JSR PRNIB
|
JSR PRNIB
|
||||||
PLA
|
PLA
|
||||||
AND #$0F ; Continue into PRNIB
|
AND #$0F ; Continue into PRNIB
|
||||||
* JSR PRNIB
|
|
||||||
* RTS
|
|
||||||
|
|
||||||
* Print hex nibble in A
|
* Print hex nibble in A
|
||||||
PRNIB CMP #$0A
|
PRNIB CMP #$0A
|
||||||
@@ -142,9 +142,13 @@ PRNIB CMP #$0A
|
|||||||
* Interrupt Handlers, MOS redirection vectors etc.
|
* Interrupt Handlers, MOS redirection vectors etc.
|
||||||
**********************************************************
|
**********************************************************
|
||||||
|
|
||||||
|
* Invoked from GSBRK in main memory. On IIgs only.
|
||||||
|
GSBRKAUX >>> IENTAUX ; IENTAUX does not do CLI
|
||||||
|
* Continue into IRQBRKHDLR
|
||||||
|
* TO DO: Check, IENTAUX modifies X
|
||||||
|
|
||||||
* IRQ/BRK handler
|
* IRQ/BRK handler
|
||||||
IRQBRKHDLR
|
IRQBRKHDLR PHA
|
||||||
PHA
|
|
||||||
* Mustn't enable IRQs within the IRQ handler
|
* Mustn't enable IRQs within the IRQ handler
|
||||||
* Do not use WRTMAIN/WRTAUX macros
|
* Do not use WRTMAIN/WRTAUX macros
|
||||||
STA $C004 ; Write to main memory
|
STA $C004 ; Write to main memory
|
||||||
@@ -179,10 +183,6 @@ IRQBRKRET
|
|||||||
PLA
|
PLA
|
||||||
NULLRTI RTI
|
NULLRTI RTI
|
||||||
|
|
||||||
* Invoked from GSBRK in main memory. On IIgs only.
|
|
||||||
GSBRKAUX >>> IENTAUX ; IENTAUX does not do CLI
|
|
||||||
JMP IRQBRKHDLR
|
|
||||||
|
|
||||||
PRERR LDY #$01
|
PRERR LDY #$01
|
||||||
PRERRLP LDA (FAULT),Y
|
PRERRLP LDA (FAULT),Y
|
||||||
BEQ PRERR1
|
BEQ PRERR1
|
||||||
@@ -313,3 +313,5 @@ MOSVEND
|
|||||||
* Buffer for one 512 byte disk block in aux mem
|
* Buffer for one 512 byte disk block in aux mem
|
||||||
AUXBLK DS $200
|
AUXBLK DS $200
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,9 +1,11 @@
|
|||||||
* AUXMEM.MOSEQU.S
|
* AUXMEM.MOSEQU.S
|
||||||
* (c) Bobbi 2021 GPLv3
|
* (c) Bobbi 2021 GPLv3
|
||||||
*
|
*
|
||||||
* Constant definitions for AppleMOS
|
|
||||||
|
|
||||||
* BBC MOS WORKSPACE LOCATIONS
|
*******************************
|
||||||
|
* BBC MOS WORKSPACE LOCATIONS *
|
||||||
|
*******************************
|
||||||
|
|
||||||
* $00-$8F Language workspace
|
* $00-$8F Language workspace
|
||||||
* $90-$9F Network workspace
|
* $90-$9F Network workspace
|
||||||
* $A0-$A7 NMI workspace
|
* $A0-$A7 NMI workspace
|
||||||
@@ -31,7 +33,7 @@ OSXREG EQU OSAREG+1 ; $F0 X register
|
|||||||
OSYREG EQU OSXREG+1 ; $F1 Y register
|
OSYREG EQU OSXREG+1 ; $F1 Y register
|
||||||
OSCTRL EQU OSXREG ; $F0 (XY)=>control block
|
OSCTRL EQU OSXREG ; $F0 (XY)=>control block
|
||||||
OSLPTR EQU $F2 ; $F2 => command line
|
OSLPTR EQU $F2 ; $F2 => command line
|
||||||
;
|
*
|
||||||
OSINTWS EQU $FA ; $FA IRQ ZP pointer, use when IRQs off
|
OSINTWS EQU $FA ; $FA IRQ ZP pointer, use when IRQs off
|
||||||
OSINTA EQU $FC ; $FC IRQ register A store
|
OSINTA EQU $FC ; $FC IRQ register A store
|
||||||
FAULT EQU $FD ; $FD Error message pointer
|
FAULT EQU $FD ; $FD Error message pointer
|
||||||
@@ -39,7 +41,7 @@ ESCFLAG EQU $FF ; $FF Escape status
|
|||||||
|
|
||||||
|
|
||||||
* $0200-$0235 Vectors
|
* $0200-$0235 Vectors
|
||||||
* $0236-$028F OSBYTE variable
|
* $0236-$028F OSBYTE variables
|
||||||
* $0290-$02ED
|
* $0290-$02ED
|
||||||
* $02EE-$02FF MOS control block
|
* $02EE-$02FF MOS control block
|
||||||
|
|
||||||
@@ -60,3 +62,5 @@ FSCV EQU $21E ; FSCV misc file ops
|
|||||||
|
|
||||||
OSFILECB EQU $2EE ; OSFILE control block
|
OSFILECB EQU $2EE ; OSFILE control block
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
* COMMAND TABLE
|
* COMMAND TABLE
|
||||||
***************
|
***************
|
||||||
|
* Table structure is: { string, byte OR $80, destword-1 } $00
|
||||||
* fsc commands
|
* fsc commands
|
||||||
CMDTABLE ASC 'CAT' ; Must be first command so matches '*.'
|
CMDTABLE ASC 'CAT' ; Must be first command so matches '*.'
|
||||||
DB $85
|
DB $85
|
||||||
@@ -52,6 +53,8 @@ CMDTABLE ASC 'CAT' ; Must be first command so matches '*.'
|
|||||||
ASC 'DRIVE'
|
ASC 'DRIVE'
|
||||||
DB $C1
|
DB $C1
|
||||||
DW STARDRIVE-1 ; Should be a FSC call, XY=>params
|
DW STARDRIVE-1 ; Should be a FSC call, XY=>params
|
||||||
|
* ACCESS <file> <access>
|
||||||
|
* TITLE (<drive>) <title>
|
||||||
* osbyte commands
|
* osbyte commands
|
||||||
ASC 'FX'
|
ASC 'FX'
|
||||||
DB $80
|
DB $80
|
||||||
@@ -168,10 +171,8 @@ STARFSC2 PHA
|
|||||||
PLA
|
PLA
|
||||||
STARFSC AND #$7F ; A=command, XY=>parameters
|
STARFSC AND #$7F ; A=command, XY=>parameters
|
||||||
JSR CALLFSCV ; Hand on to filing system
|
JSR CALLFSCV ; Hand on to filing system
|
||||||
* TO DO: hostfs.s needs to return A=0
|
|
||||||
TAX
|
TAX
|
||||||
BEQ CLIDONE
|
BEQ CLIDONE ; A=0, FSC call implemented
|
||||||
RTS ; *TEMP*
|
|
||||||
ERRBADCMD BRK
|
ERRBADCMD BRK
|
||||||
DB $FE
|
DB $FE
|
||||||
ASC 'Bad command'
|
ASC 'Bad command'
|
||||||
@@ -183,7 +184,8 @@ ERRBADADD BRK
|
|||||||
ASC 'Bad address'
|
ASC 'Bad address'
|
||||||
BRK
|
BRK
|
||||||
|
|
||||||
CALLFSCV JMP (FSCV) ; Hand on to filing system
|
* CALLFSCV JMP (FSCV) ; Hand on to filing system
|
||||||
|
* Moved to BYTWRD
|
||||||
|
|
||||||
|
|
||||||
* *FX num(,num(,num))
|
* *FX num(,num(,num))
|
||||||
@@ -293,10 +295,10 @@ SKIPCOMMA LDA (OSLPTR),Y
|
|||||||
BNE SKIPSPC
|
BNE SKIPSPC
|
||||||
*
|
*
|
||||||
* Skip spaces
|
* Skip spaces
|
||||||
SKIPSPCLP INY ; Step past space or comma
|
SKIPSPC1 INY ; Step past a character
|
||||||
SKIPSPC LDA (OSLPTR),Y
|
SKIPSPC LDA (OSLPTR),Y
|
||||||
CMP #' '
|
CMP #' '
|
||||||
BEQ SKIPSPCLP
|
BEQ SKIPSPC1
|
||||||
CMP #$0D ; Return EQ=<cr>
|
CMP #$0D ; Return EQ=<cr>
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
@@ -319,20 +321,21 @@ XYtoLPTR STX OSLPTR+0
|
|||||||
* Print *HELP text
|
* Print *HELP text
|
||||||
* These needs tidying a bit
|
* These needs tidying a bit
|
||||||
STARHELP PHY
|
STARHELP PHY
|
||||||
LDA #<HELPMSG
|
JSR PRHELLO ; Unifiy version message
|
||||||
LDY #>HELPMSG
|
* LDA #<:MSG
|
||||||
JSR PRSTR
|
* LDY #>:MSG
|
||||||
|
* JSR PRSTR
|
||||||
PLY
|
PLY
|
||||||
PHY
|
PHY
|
||||||
LDA (OSLPTR),Y
|
LDA (OSLPTR),Y
|
||||||
CMP #'.'
|
CMP #'.' ; *HELP .
|
||||||
BEQ STARHELP1
|
BEQ STARHELP1
|
||||||
INY
|
INY
|
||||||
EOR (OSLPTR),Y
|
EOR (OSLPTR),Y
|
||||||
INY
|
INY
|
||||||
EOR (OSLPTR),Y
|
EOR (OSLPTR),Y
|
||||||
AND #$DF
|
AND #$DF
|
||||||
CMP #$51
|
CMP #$51 ; *HELP MOS
|
||||||
BNE STARHELP5
|
BNE STARHELP5
|
||||||
STARHELP1 LDX #0
|
STARHELP1 LDX #0
|
||||||
LDA #32
|
LDA #32
|
||||||
@@ -360,18 +363,19 @@ STARHELP5 LDA $8006
|
|||||||
BMI STARHELP6 ; Use ROM's service entry
|
BMI STARHELP6 ; Use ROM's service entry
|
||||||
JSR OSNEWL
|
JSR OSNEWL
|
||||||
LDA #$09 ; Language name
|
LDA #$09 ; Language name
|
||||||
LDY #$80
|
LDY #$80 ; *TO DO* make this and BYTE8E
|
||||||
JSR PRSTR
|
JSR PRSTR ; use same code
|
||||||
LDA #<HELPMSG2
|
JSR OSNEWL
|
||||||
LDY #>HELPMSG2
|
* LDA #<:MSG2
|
||||||
JSR PRSTR
|
* LDY #>:MSG2
|
||||||
|
* JSR PRSTR
|
||||||
STARHELP6 PLY
|
STARHELP6 PLY
|
||||||
LDA #9
|
LDA #9
|
||||||
JMP SERVICE ; Pass to sideways ROM(s)
|
JMP SERVICE ; Pass to sideways ROM(s)
|
||||||
HELPMSG DB $0D
|
*:MSG DB $0D
|
||||||
ASC 'Applecorn MOS v0.01'
|
* ASC 'Applecorn MOS v0.01'
|
||||||
DB $0D,$00
|
* DB $0D,$00
|
||||||
HELPMSG2 DB $0D,$00
|
*:MSG2 DB $0D,$00
|
||||||
|
|
||||||
* Handle *QUIT command
|
* Handle *QUIT command
|
||||||
STARQUIT >>> XF2MAIN,QUIT
|
STARQUIT >>> XF2MAIN,QUIT
|
||||||
@@ -394,7 +398,7 @@ STARLDSV0
|
|||||||
CMP OSTEMP
|
CMP OSTEMP
|
||||||
BNE STARLDSV0 ; Step past filename
|
BNE STARLDSV0 ; Step past filename
|
||||||
* ^^^^
|
* ^^^^
|
||||||
JSR SKIPSPCLP ; Skip following spaces
|
JSR SKIPSPC1 ; Skip following spaces
|
||||||
BNE STARLDSV3 ; *load/save name addr
|
BNE STARLDSV3 ; *load/save name addr
|
||||||
STARLDSV1 LDA #$FF ; $FF=load to file's address
|
STARLDSV1 LDA #$FF ; $FF=load to file's address
|
||||||
STARLOAD2
|
STARLOAD2
|
||||||
@@ -427,7 +431,7 @@ STARSAVE4
|
|||||||
CMP #'+'
|
CMP #'+'
|
||||||
PHP
|
PHP
|
||||||
BNE STARSAVE5 ; Not start+length
|
BNE STARSAVE5 ; Not start+length
|
||||||
JSR SKIPSPCLP ; Step past '+' and spaces
|
JSR SKIPSPC1 ; Step past '+' and spaces
|
||||||
STARSAVE5
|
STARSAVE5
|
||||||
LDX #OSFILECB+14-$200
|
LDX #OSFILECB+14-$200
|
||||||
JSR SCANHEX ; Get end or length
|
JSR SCANHEX ; Get end or length
|
||||||
@@ -472,7 +476,10 @@ STARFILE EOR #$80
|
|||||||
STY OSFILECB+1
|
STY OSFILECB+1
|
||||||
LDX #<OSFILECB
|
LDX #<OSFILECB
|
||||||
LDY #>OSFILECB
|
LDY #>OSFILECB
|
||||||
JMP OSFILE
|
JSR OSFILE
|
||||||
|
TAX
|
||||||
|
BNE STARDONE
|
||||||
|
JMP ERRNOTFND
|
||||||
|
|
||||||
STARCHDIR STX ZP1+0 ; TEMP
|
STARCHDIR STX ZP1+0 ; TEMP
|
||||||
STY ZP1+1 ; TEMP
|
STY ZP1+1 ; TEMP
|
||||||
@@ -481,13 +488,8 @@ STARCHDIR STX ZP1+0 ; TEMP
|
|||||||
|
|
||||||
STARDRIVE
|
STARDRIVE
|
||||||
STARBASIC
|
STARBASIC
|
||||||
STARKEY RTS
|
STARKEY
|
||||||
|
STARDONE RTS
|
||||||
|
|
||||||
|
|
||||||
** Handle *CAT / *. command (list directory)
|
|
||||||
*STARCAT LDA #$05
|
|
||||||
* JMP JUMPFSCV ; Hand on to filing system
|
|
||||||
|
|
||||||
|
|
||||||
* Code that calls this will need to be replaced with calls
|
* Code that calls this will need to be replaced with calls
|
||||||
@@ -515,3 +517,6 @@ EATSPC LDA (ZP1),Y ; Check first char is ...
|
|||||||
:NOTFND SEC
|
:NOTFND SEC
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
41
auxmem.vdu.s
41
auxmem.vdu.s
@@ -1,8 +1,7 @@
|
|||||||
* VDU.S
|
* AUXMEM.VDU.S
|
||||||
* (c) Bobbi 2021 GPLv3
|
* (c) Bobbi 2021 GPLv3
|
||||||
*
|
*
|
||||||
* Apple //e VDU Driver for 40/80 column mode (PAGE2)
|
* Apple //e VDU Driver for 40/80 column mode (PAGE2)
|
||||||
|
|
||||||
*
|
*
|
||||||
* 15-Aug-2021 Optimised address calculations and PRCHRC.
|
* 15-Aug-2021 Optimised address calculations and PRCHRC.
|
||||||
* Entry point to move copy cursor.
|
* Entry point to move copy cursor.
|
||||||
@@ -21,7 +20,7 @@ VDUSTATUS EQU $D0 ; $D0 VDU status
|
|||||||
VDUZP1 EQU VDUSTATUS+1 ; $D1
|
VDUZP1 EQU VDUSTATUS+1 ; $D1
|
||||||
* VDUTEXTX EQU VDUSTATUS+2 ; $D2 text column
|
* VDUTEXTX EQU VDUSTATUS+2 ; $D2 text column
|
||||||
* VDUTEXTY EQU VDUSTATUS+3 ; $D3 text row
|
* VDUTEXTY EQU VDUSTATUS+3 ; $D3 text row
|
||||||
VDUADDR EQU VDUSTATUS+4 ; $D4 addr of current char cell
|
VDUADDR EQU VDUSTATUS+4 ; $D4 address of current char cell
|
||||||
|
|
||||||
FXVDUQLEN EQU $D1 ; TEMP HACK
|
FXVDUQLEN EQU $D1 ; TEMP HACK
|
||||||
VDUCHAR EQU $D6 ; TEMP HACK
|
VDUCHAR EQU $D6 ; TEMP HACK
|
||||||
@@ -68,7 +67,7 @@ COPYMOVE2 PLA
|
|||||||
ORA #8
|
ORA #8
|
||||||
COPYMOVE3 JMP OUTCHARGO ; Move edit cursor
|
COPYMOVE3 JMP OUTCHARGO ; Move edit cursor
|
||||||
|
|
||||||
* Turn editing cursor on/off
|
** Turn editing cursor on/off
|
||||||
*COPYCURSOR BIT VDUSTATUS
|
*COPYCURSOR BIT VDUSTATUS
|
||||||
* BVC COPYSWAP4 ; Copy cursor not active
|
* BVC COPYSWAP4 ; Copy cursor not active
|
||||||
* PHP ; Save CS=Turn On, CC=Turn Off
|
* PHP ; Save CS=Turn On, CC=Turn Off
|
||||||
@@ -80,11 +79,11 @@ COPYMOVE3 JMP OUTCHARGO ; Move edit cursor
|
|||||||
* STA COPYCHAR
|
* STA COPYCHAR
|
||||||
* LDA #$A0 ; Output edit cursor
|
* LDA #$A0 ; Output edit cursor
|
||||||
*COPYCURS2 JSR PUTCHRC
|
*COPYCURS2 JSR PUTCHRC
|
||||||
* ; Drop through to swap back
|
** ; Drop through to swap back
|
||||||
|
|
||||||
* Swap between edit and copy cursors
|
* Swap between edit and copy cursors
|
||||||
;COPYSWAP BIT VDUSTATUS
|
*COPYSWAP BIT VDUSTATUS
|
||||||
; BVC COPYSWAP4 ; Edit cursor off
|
* BVC COPYSWAP4 ; Edit cursor off
|
||||||
COPYSWAP1 CLC ; CC=Swap TEXT and COPY
|
COPYSWAP1 CLC ; CC=Swap TEXT and COPY
|
||||||
COPYSWAP2 LDX #1
|
COPYSWAP2 LDX #1
|
||||||
COPYSWAPLP LDY VDUCOPYX,X
|
COPYSWAPLP LDY VDUCOPYX,X
|
||||||
@@ -208,14 +207,14 @@ PRCHR6 STA (VDUADDR),Y ; Store it
|
|||||||
RTS
|
RTS
|
||||||
|
|
||||||
* PHA
|
* PHA
|
||||||
* LDA $C000 ; Kbd data/strobe
|
* LDA $C000 ; Kbd data/strobe
|
||||||
* BMI :KEYHIT
|
* BMI :KEYHIT
|
||||||
* :RESUME LDA ROW
|
* :RESUME LDA ROW
|
||||||
* ASL
|
* ASL
|
||||||
* TAX
|
* TAX
|
||||||
* LDA SCNTAB,X ; LSB of row address
|
* LDA SCNTAB,X ; LSB of row address
|
||||||
* STA ZP1
|
* STA ZP1
|
||||||
* LDA SCNTAB+1,X ; MSB of row address
|
* LDA SCNTAB+1,X ; MSB of row address
|
||||||
* STA ZP1+1
|
* STA ZP1+1
|
||||||
* LDA COL
|
* LDA COL
|
||||||
* BIT $C01F
|
* BIT $C01F
|
||||||
@@ -285,11 +284,11 @@ GETCHROK RTS
|
|||||||
* BPL :S1A ; 40-col
|
* BPL :S1A ; 40-col
|
||||||
* LSR
|
* LSR
|
||||||
* BCC :S1
|
* BCC :S1
|
||||||
*:S1A STA $C002 ; Read main memory
|
*:S1A STA $C002 ; Read main memory
|
||||||
*:S1 TAY
|
*:S1 TAY
|
||||||
* LDA (ZP1),Y
|
* LDA (ZP1),Y
|
||||||
* EOR #$80
|
* EOR #$80
|
||||||
* STA $C003 ; Read aux mem again
|
* STA $C003 ; Read aux mem again
|
||||||
* TAX
|
* TAX
|
||||||
* LDY #$00
|
* LDY #$00
|
||||||
* BIT $C01F
|
* BIT $C01F
|
||||||
@@ -395,14 +394,14 @@ OUTCHARGO CMP #$00 ; NULL
|
|||||||
BEQ :TOSCROLL ; JGH
|
BEQ :TOSCROLL ; JGH
|
||||||
INC ROW
|
INC ROW
|
||||||
:IDONE RTS
|
:IDONE RTS
|
||||||
; BRA :DONE
|
* BRA :DONE
|
||||||
:TOSCROLL JMP SCROLL ; JGH
|
:TOSCROLL JMP SCROLL ; JGH
|
||||||
:T5 CMP #$0B ; Cursor up
|
:T5 CMP #$0B ; Cursor up
|
||||||
BNE :T6
|
BNE :T6
|
||||||
LDA ROW
|
LDA ROW
|
||||||
BEQ :IDONE
|
BEQ :IDONE
|
||||||
DEC ROW
|
DEC ROW
|
||||||
; BRA :IDONE
|
* BRA :IDONE
|
||||||
RTS
|
RTS
|
||||||
:T6 CMP #$0D ; Carriage return
|
:T6 CMP #$0D ; Carriage return
|
||||||
BNE :T7
|
BNE :T7
|
||||||
@@ -410,7 +409,7 @@ OUTCHARGO CMP #$00 ; NULL
|
|||||||
AND VDUSTATUS
|
AND VDUSTATUS
|
||||||
STA VDUSTATUS ; Turn copy cursor off
|
STA VDUSTATUS ; Turn copy cursor off
|
||||||
STZ COL
|
STZ COL
|
||||||
; BRA :IDONE
|
* BRA :IDONE
|
||||||
RTS
|
RTS
|
||||||
:T7 CMP #$0C ; Ctrl-L
|
:T7 CMP #$0C ; Ctrl-L
|
||||||
BEQ :T7A
|
BEQ :T7A
|
||||||
@@ -423,13 +422,13 @@ OUTCHARGO CMP #$00 ; NULL
|
|||||||
TAX
|
TAX
|
||||||
STA $C00C,X
|
STA $C00C,X
|
||||||
:T7A JSR CLEAR
|
:T7A JSR CLEAR
|
||||||
* BRA :IDONE
|
* BRA :IDONE
|
||||||
RTS
|
RTS
|
||||||
:T8 CMP #$1E ; Home
|
:T8 CMP #$1E ; Home
|
||||||
BNE :T9
|
BNE :T9
|
||||||
STZ ROW
|
STZ ROW
|
||||||
STZ COL
|
STZ COL
|
||||||
* BRA :IDONE
|
* BRA :IDONE
|
||||||
RTS
|
RTS
|
||||||
:T9
|
:T9
|
||||||
CMP #$1F ; TAB
|
CMP #$1F ; TAB
|
||||||
@@ -450,7 +449,7 @@ OUTCHARGO CMP #$00 ; NULL
|
|||||||
:T9B CMP #$7F ; Delete
|
:T9B CMP #$7F ; Delete
|
||||||
BNE :T10
|
BNE :T10
|
||||||
JSR DELETE
|
JSR DELETE
|
||||||
; BRA :IDONE
|
* BRA :IDONE
|
||||||
RTS
|
RTS
|
||||||
:T10 CMP #$20
|
:T10 CMP #$20
|
||||||
BCC :IDONE
|
BCC :IDONE
|
||||||
@@ -478,13 +477,13 @@ VDU09 LDA COL
|
|||||||
BEQ SCROLL
|
BEQ SCROLL
|
||||||
INC ROW
|
INC ROW
|
||||||
:DONE RTS
|
:DONE RTS
|
||||||
; BRA :DONE
|
* BRA :DONE
|
||||||
:S2 INC COL
|
:S2 INC COL
|
||||||
BRA :DONE
|
BRA :DONE
|
||||||
SCROLL JSR SCROLLER
|
SCROLL JSR SCROLLER
|
||||||
* STZ COL
|
* STZ COL
|
||||||
JSR CLREOL
|
JSR CLREOL
|
||||||
;:DONE
|
*:DONE
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
* Scroll whole screen one line
|
* Scroll whole screen one line
|
||||||
@@ -535,3 +534,5 @@ SCNTAB DW $800,$880,$900,$980,$A00,$A80,$B00,$B80
|
|||||||
DW $828,$8A8,$928,$9A8,$A28,$AA8,$B28,$BA8
|
DW $828,$8A8,$928,$9A8,$A28,$AA8,$B28,$BA8
|
||||||
DW $850,$8D0,$950,$9D0,$A50,$AD0,$B50,$BD0
|
DW $850,$8D0,$950,$9D0,$A50,$AD0,$B50,$BD0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
2
loader.s
2
loader.s
@@ -111,3 +111,5 @@ START JSR ROMMENU
|
|||||||
CANTOPEN ASC "Unable to open ROM file"
|
CANTOPEN ASC "Unable to open ROM file"
|
||||||
DB $00
|
DB $00
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -119,3 +119,5 @@ MSG8 ASC " 8. USERROM2.ROM"
|
|||||||
DB $00
|
DB $00
|
||||||
ROM8 STR "USERROM2.ROM"
|
ROM8 STR "USERROM2.ROM"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
42
mainmem.s
42
mainmem.s
@@ -5,6 +5,9 @@
|
|||||||
* This code is mostly glue between the BBC Micro code
|
* This code is mostly glue between the BBC Micro code
|
||||||
* which runs in aux mem and Apple II ProDOS.
|
* which runs in aux mem and Apple II ProDOS.
|
||||||
|
|
||||||
|
* 24-Aug-2021 AUXTYPE set from load address
|
||||||
|
|
||||||
|
|
||||||
* ProDOS MLI command numbers
|
* ProDOS MLI command numbers
|
||||||
QUITCMD EQU $65
|
QUITCMD EQU $65
|
||||||
GTIMECMD EQU $82
|
GTIMECMD EQU $82
|
||||||
@@ -198,6 +201,7 @@ MAKEDIR >>> ENTMAIN
|
|||||||
LDA $BF93
|
LDA $BF93
|
||||||
STA CREATEPL+11
|
STA CREATEPL+11
|
||||||
JSR CRTFILE
|
JSR CRTFILE
|
||||||
|
LDA #$02
|
||||||
:EXIT >>> XF2AUX,OSFILERET
|
:EXIT >>> XF2AUX,OSFILERET
|
||||||
|
|
||||||
* ProDOS file handling to rename a file
|
* ProDOS file handling to rename a file
|
||||||
@@ -454,6 +458,7 @@ TELL >>> ENTMAIN
|
|||||||
* Return A=0 if successful
|
* Return A=0 if successful
|
||||||
* A=1 if file not found
|
* A=1 if file not found
|
||||||
* A=2 if read error
|
* A=2 if read error
|
||||||
|
* TO DO: change to $01, $80, some other $80+n
|
||||||
LOADFILE >>> ENTMAIN
|
LOADFILE >>> ENTMAIN
|
||||||
STZ :BLOCKS
|
STZ :BLOCKS
|
||||||
LDA #<MOSFILE
|
LDA #<MOSFILE
|
||||||
@@ -546,6 +551,7 @@ COPYFB PHA
|
|||||||
* Return A=0 if successful
|
* Return A=0 if successful
|
||||||
* A=1 if unable to create/open
|
* A=1 if unable to create/open
|
||||||
* A=2 if error during save
|
* A=2 if error during save
|
||||||
|
* TO DO: change to $01, $80, some other $80+n
|
||||||
SAVEFILE >>> ENTMAIN
|
SAVEFILE >>> ENTMAIN
|
||||||
LDA #<MOSFILE ; Attempt to destroy file
|
LDA #<MOSFILE ; Attempt to destroy file
|
||||||
STA DESTPL+1
|
STA DESTPL+1
|
||||||
@@ -565,9 +571,9 @@ SAVEFILE >>> ENTMAIN
|
|||||||
STA CREATEPL+3
|
STA CREATEPL+3
|
||||||
LDA #$06 ; Filetype BIN
|
LDA #$06 ; Filetype BIN
|
||||||
STA CREATEPL+4
|
STA CREATEPL+4
|
||||||
LDA FBSTRT ; Auxtype = start address
|
LDA FBLOAD ; Auxtype = load address
|
||||||
STA CREATEPL+5
|
STA CREATEPL+5
|
||||||
LDA FBSTRT+1
|
LDA FBLOAD+1
|
||||||
STA CREATEPL+6
|
STA CREATEPL+6
|
||||||
LDA #$01 ; Storage type - file
|
LDA #$01 ; Storage type - file
|
||||||
STA CREATEPL+7
|
STA CREATEPL+7
|
||||||
@@ -713,6 +719,24 @@ UPDFB LDA #<MOSFILE
|
|||||||
STZ FBLOAD+3
|
STZ FBLOAD+3
|
||||||
STZ FBEXEC+2
|
STZ FBEXEC+2
|
||||||
STZ FBEXEC+3
|
STZ FBEXEC+3
|
||||||
|
LDA GINFOPL+3 ; Access byte
|
||||||
|
CMP #$40 ; Locked?
|
||||||
|
AND #$03 ; ------wr
|
||||||
|
PHP
|
||||||
|
STA FBEND+0
|
||||||
|
ASL A ; -----wr-
|
||||||
|
ASL A ; ----wr--
|
||||||
|
ASL A ; ---wr---
|
||||||
|
ASL A ; --wr----
|
||||||
|
PLP
|
||||||
|
BCS :UPDFB2
|
||||||
|
ORA #$08 ; --wrl---
|
||||||
|
:UPDFB2 ORA FBEND+0 ; --wrl-wr
|
||||||
|
STA FBEND+0
|
||||||
|
STZ FBEND+1 ; TO DO: get mdate
|
||||||
|
STZ FBEND+2
|
||||||
|
STZ FBEND+3
|
||||||
|
|
||||||
JSR OPENFILE ; Open file
|
JSR OPENFILE ; Open file
|
||||||
BCS :ERR
|
BCS :ERR
|
||||||
LDA OPENPL+5 ; File ref number
|
LDA OPENPL+5 ; File ref number
|
||||||
@@ -727,12 +751,6 @@ UPDFB LDA #<MOSFILE
|
|||||||
LDA GMARKPL+4
|
LDA GMARKPL+4
|
||||||
STA FBSTRT+2
|
STA FBSTRT+2
|
||||||
STZ FBSTRT+3
|
STZ FBSTRT+3
|
||||||
LDA #$33 ; 'W/R' attribs
|
|
||||||
STA FBEND+0
|
|
||||||
STZ FBEND+1
|
|
||||||
STZ FBEND+2
|
|
||||||
STZ FBEND+3
|
|
||||||
LDA #$33 ; W/R attributes
|
|
||||||
LDA OPENPL+5 ; File ref numbre
|
LDA OPENPL+5 ; File ref numbre
|
||||||
STA CLSPL+1
|
STA CLSPL+1
|
||||||
JSR CLSFILE
|
JSR CLSFILE
|
||||||
@@ -928,8 +946,12 @@ FBLOAD DW $0000 ; Load address
|
|||||||
DW $0000
|
DW $0000
|
||||||
FBEXEC DW $0000 ; Exec address
|
FBEXEC DW $0000 ; Exec address
|
||||||
DW $0000
|
DW $0000
|
||||||
FBSTRT DW $0000 ; Start address for SAVE
|
FBSIZE
|
||||||
|
FBSTRT DW $0000 ; Size / Start address for SAVE
|
||||||
DW $0000
|
DW $0000
|
||||||
FBEND DW $0000 ; End address for SAVE
|
FBATTR
|
||||||
|
FBEND DW $0000 ; Attributes / End address for SAVE
|
||||||
DW $0000
|
DW $0000
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user