Merge PR 140 'More fsc updates'

This commit is contained in:
Bobbi Webber-Manners 2021-10-28 23:13:47 -04:00
parent 5d7f8cd0c6
commit 38bcf9b4dd
7 changed files with 1767 additions and 2033 deletions

Binary file not shown.

View File

@ -14,7 +14,7 @@
************************* *************************
* OSBYTE DISPATCH TABLE * * OSBYTE DISPATCH TABLE *
************************* *************************
BYTWRDADDR DW BYTE00XX ; OSBYTE 0 - Machine host BYTWRDADDR DW BYTE00 ; OSBYTE 0 - Machine host - INIT.s
DW BYTE01 ; OSBYTE 1 - User flag DW BYTE01 ; OSBYTE 1 - User flag
DW BYTE02 ; OSBYTE 2 - OSRDCH source DW BYTE02 ; OSBYTE 2 - OSRDCH source
DW BYTE03 ; OSBYTE 3 - OSWRCH dest DW BYTE03 ; OSBYTE 3 - OSWRCH dest
@ -248,14 +248,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 LDY #$04 ; Copy control block
STA OSTEXT,Y ; 0,1 => text :WORD00LP3 LDA (OSCTRL),Y ; 0,1 => text
INY ; 2 = MAXLEN STA OSTEXT,Y ; 2 = MAXLEN
CPY #$05 ; 3 = MINCHAR DEY ; 3 = MINCHAR
BCC WORD00 ; 4 = MAXCHAR BPL :WORD00LP3 ; 4 = MAXCHAR
LDY #$00 ; Initial line length = zero INY ; 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
@ -467,38 +467,3 @@ OSWORDM ASC 'OSWORD($'
DB $00 DB $00
OSBM2 ASC ').' OSBM2 ASC ').'
DB $00 DB $00

View File

@ -26,10 +26,8 @@
* 09-Sep-2021 Moved keyboard OSBYTEs to here. * 09-Sep-2021 Moved keyboard OSBYTEs to here.
* 12-Sep-2021 COPY calls new VDU entry point. * 12-Sep-2021 COPY calls new VDU entry point.
* 15-Sep-2021 INKEY(0) tests once and returns immediately. * 15-Sep-2021 INKEY(0) tests once and returns immediately.
* TO DO: CHKESC should go through translations before testing.
* TO DO: move these to VDU
* OLDCHAR EQU OSKBD1 ; *TEMP* ; character under cursor
* COPYCHAR EQU OSKBD2 ; *TEMP* ; character under copy cursor
FLASHER EQU BYTEVARBASE+176 ; VSync counter for flashing cursor FLASHER EQU BYTEVARBASE+176 ; VSync counter for flashing cursor
FXEXEC EQU BYTEVARBASE+198 FXEXEC EQU BYTEVARBASE+198
@ -56,6 +54,7 @@ WRCHHND PHA
PHX PHX
PHY PHY
* TO DO Check any output redirections * TO DO Check any output redirections
* PHA
JSR OUTCHAR JSR OUTCHAR
* TO DO Check any printer output * TO DO Check any printer output
@ -444,33 +443,3 @@ BYTE7DOK RTS
BYTE76 LDX #$00 ; Update LEDs and return X=SHIFT BYTE76 LDX #$00 ; Update LEDs and return X=SHIFT
RTS ; Not possible with Apple RTS ; Not possible with Apple

File diff suppressed because it is too large Load Diff

View File

@ -7,6 +7,8 @@
* BBC Micro 'virtual machine' in Apple //e aux memory * BBC Micro 'virtual machine' in Apple //e aux memory
*********************************************************** ***********************************************************
MAXROM EQU $F9 ; Max sideways ROM number
ZP1 EQU $90 ; $90-$9f are spare Econet space ZP1 EQU $90 ; $90-$9f are spare Econet space
; so safe to use ; so safe to use
ZP2 EQU $92 ZP2 EQU $92
@ -123,23 +125,22 @@ MOSHIGH SEI
DEX DEX
BPL :INITPG2 BPL :INITPG2
JSR ROMINIT ; Initialize sideways ROM table JSR ROMINIT ; Build list of sideways ROMs
JSR KBDINIT ; Returns A=startup MODE JSR KBDINIT ; Returns A=startup MODE
JSR VDUINIT ; Initialise VDU driver JSR VDUINIT ; Initialise VDU driver
JSR PRHELLO JSR PRHELLO
LDA #7 LDA #7
JSR OSWRCH JSR OSWRCH
JSR OSNEWL JSR OSNEWL
LDX MAXROM ; TEMP X=language to enter LDX MAXROM ; TEMP X=language to enter
CLC CLC
* OSBYTE $8E - Enter language ROM * OSBYTE $8E - Enter language ROM
* X=ROM number to select * X=ROM number to select
* *
BYTE8E PHP ; Save CLC=RESET, SEC=Not RESET BYTE8E PHP ; Save CLC=RESET, SEC=Not RESET
JSR ROMSELECT ; Bring ROM X into memory JSR ROMSELECT ; Bring ROM X into memory
STX BYTEVARBASE+$FC ; Set current language ROM STX BYTEVARBASE+$FC ; Set current language ROM
LDA #$00 LDA #$00
STA FAULT+0 STA FAULT+0
LDA #$80 LDA #$80
@ -156,27 +157,39 @@ BYTE8E PHP ; Save CLC=RESET, SEC=Not RESET
* OSBYTE $8F - Issue service call * OSBYTE $8F - Issue service call
* X=service call, Y=parameter * X=service call, Y=parameter
* *
SERVICE TAX ; Enter here with A=Service Num SERVICE TAX ; Enter here with A=Service Num
BYTE8F BYTE8F
SERVICEX LDA $F4 SERVICEX LDA $F4
PHA ; Save current ROM PHA ; Save current ROM
* LDA $E0 ; *DEBUG*
* AND #$20
* BEQ :SERVDEBUG
* TXA
* JSR PRHEX
* LDA OSLPTR+1
* JSR PRHEX
* LDA OSLPTR+0
* JSR PRHEX ; *DEBUG*
*:SERVDEBUG
TXA TXA
LDX MAXROM ; Start at highest ROM LDX MAXROM ; Start at highest ROM
:SERVLP JSR ROMSELECT ; Bring it into memory :SERVLP JSR ROMSELECT ; Bring it into memory
BIT $8006 BIT $8006
BPL :SERVSKIP ; No service entry BPL :SERVSKIP ; No service entry
JSR $8003 ; Call service entry JSR $8003 ; Call service entry
TAX TAX
BEQ :SERVDONE BEQ :SERVDONE
:SERVSKIP LDX $F4 ; Restore X=current ROM :SERVSKIP LDX $F4 ; Restore X=current ROM
DEX ; Step down to next DEX ; Step down to next
BPL :SERVLP ; Loop until ROM 0 done BPL :SERVLP ; Loop until ROM 0 done
:SERVDONE PLA ; Get caller's ROM back :SERVDONE PLA ; Get caller's ROM back
PHX ; Save return from service call PHX ; Save return from service call
TAX TAX
JSR ROMSELECT ; Restore caller's ROM JSR ROMSELECT ; Restore caller's ROM
PLX ; Get return value back PLX ; Get return value back
TXA ; Return in A and X and set EQ/NE TXA ; Return in A and X and set EQ/NE
RTS RTS
@ -191,12 +204,7 @@ BYTE00 BEQ BYTE00A ; OSBYTE 0,0 - generate error
RTS ; %000x1xxx host type, 'A'pple RTS ; %000x1xxx host type, 'A'pple
BYTE00A BRK BYTE00A BRK
DB $F7 DB $F7
HELLO ASC 'Applecorn MOS 2021-10-27' HELLO ASC 'Applecorn MOS 2021-10-28'
DB $00 ; Unify MOS messages DB $00 ; Unify MOS messages
MAXROM DB $00 ; Index of highest sideways ROM

View File

@ -16,31 +16,35 @@
* $E0-$EE Internal MOS workspace * $E0-$EE Internal MOS workspace
* $EF-$FF MOS API workspace * $EF-$FF MOS API workspace
DEBUG EQU $E0 ; $E0 *TEST* Debug flag * DEBUG EQU $00 ; $00=*OPT 255 debug code removed
DEBUG EQU $E0 ; $E0=*OPT 255 debug code included
* ; $E1 * ; $E1
FSFLAG1 EQU $E2 ; $E2 FSFLAG1 EQU $E2 ; $E2
FSFLAG2 EQU $E3 ; $E3 HOSTFS *OPT settings FSFLAG2 EQU $E3 ; $E3 HOSTFS *OPT settings
GSFLAG EQU $E4 ; $E4 GSREAD processing flags GSFLAG EQU $E4 ; $E4 GSREAD processing flags
GSCHAR EQU $E5 ; $E5 GSREAD accumulator GSCHAR EQU $E5 ; $E5 GSREAD accumulator
OSTEXT EQU $E6 ; $E6 => text string $E6 OSNUM+0 OSTEXT EQU $E6 ; $E6 => text string $E6 OSNUM+0
MAXLEN EQU OSTEXT+2 ; $E8 $E8 OSNUM+2 MAXLEN EQU OSTEXT+2 ; $E8 $E8 OSNUM+2
MINCHAR EQU OSTEXT+3 ; $E9 $E9 OSNUM+3 MINCHAR EQU OSTEXT+3 ; $E9 $E9 OSNUM+3
MAXCHAR EQU OSTEXT+4 ; $EA $EA OSPAD MAXCHAR EQU OSTEXT+4 ; $EA $EA OSPAD
OSTEMP EQU $EB ; $EB $EB OSTEMP OSTEMP EQU $EB ; $EB $EB OSTEMP
OSKBD1 EQU $EC ; $EC kbd ws OSKBD1 EQU $EC ; $EC kbd ws
OSKBD2 EQU OSKBD1+1 ; $ED kbd ws OSKBD2 EQU OSKBD1+1 ; $ED kbd ws
OSKBD3 EQU OSKBD1+2 ; $EE kbd ws OSKBD3 EQU OSKBD1+2 ; $EE kbd ws
OSAREG EQU $EF ; $EF A register OSAREG EQU $EF ; $EF A register
OSXREG EQU OSAREG+1 ; $F0 X register 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
OSROMNUM EQU $F4 ; $F4 current ROM ROMID EQU $F4 ; $F4 current ROM
* ROMTMP EQU $F5 ; $F5
OSINTWS EQU $FA ; $FA IRQ ZP pointer, use when IRQs off ROMPTR EQU $F6 ; $F6 =>
OSINTA EQU $FC ; $FC IRQ register A store * ; $F8 *TEMP* pseudo-SROM settings
FAULT EQU $FD ; $FD Error message pointer * ; $F9 *TEMP* pseudo-SROM settings
ESCFLAG EQU $FF ; $FF Escape status 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
ESCFLAG EQU $FF ; $FF Escape status
* $0200-$0235 Vectors * $0200-$0235 Vectors
@ -48,29 +52,25 @@ ESCFLAG EQU $FF ; $FF Escape status
* $0290-$02ED * $0290-$02ED
* $02EE-$02FF MOS control block * $02EE-$02FF MOS control block
USERV EQU $200 ; USER vector USERV EQU $200 ; USER vector
BRKV EQU $202 ; BRK vector BRKV EQU $202 ; BRK vector
CLIV EQU $208 ; OSCLI vector CLIV EQU $208 ; OSCLI vector
BYTEV EQU $20A ; OSBYTE vector BYTEV EQU $20A ; OSBYTE vector
WORDV EQU $20C ; OSWORD vector WORDV EQU $20C ; OSWORD vector
WRCHV EQU $20E ; OSWRCH vector WRCHV EQU $20E ; OSWRCH vector
RDCHV EQU $210 ; OSRDCH vector RDCHV EQU $210 ; OSRDCH vector
FILEV EQU $212 ; OSFILE vector FILEV EQU $212 ; OSFILE vector
ARGSV EQU $214 ; OSARGS vector ARGSV EQU $214 ; OSARGS vector
BGETV EQU $216 ; OSBGET vector BGETV EQU $216 ; OSBGET vector
BPUTV EQU $218 ; OSBPUT vector BPUTV EQU $218 ; OSBPUT vector
GBPBV EQU $21A ; OSGBPB vector GBPBV EQU $21A ; OSGBPB vector
FINDV EQU $21C ; OSFIND vector FINDV EQU $21C ; OSFIND vector
FSCV EQU $21E ; FSCV misc file ops FSCV EQU $21E ; FSCV misc file ops
BYTEVARBASE EQU $190 ; Base of OSBYTE variables BYTEVARBASE EQU $190 ; Base of OSBYTE variables
OSFILECB EQU $2EE ; OSFILE control block OSFILECB EQU $2EE ; OSFILE control block
OSGBPBCB EQU OSFILECB+1 ; OSGBPB control block OSGBPBCB EQU OSFILECB+1 ; OSGBPB control block
* $0300-$03DF * $0300-$03DF
* $03E0-$03FF Used for interfacing with ProDOS XFER * $03E0-$03FF Used for interfacing with ProDOS XFER

File diff suppressed because it is too large Load Diff