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