diff options
Diffstat (limited to 'docs/os12/mdfs.net/Docs/Comp/BBC/OS1-20/FC00')
-rw-r--r-- | docs/os12/mdfs.net/Docs/Comp/BBC/OS1-20/FC00 | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/docs/os12/mdfs.net/Docs/Comp/BBC/OS1-20/FC00 b/docs/os12/mdfs.net/Docs/Comp/BBC/OS1-20/FC00 new file mode 100644 index 0000000..177d500 --- /dev/null +++ b/docs/os12/mdfs.net/Docs/Comp/BBC/OS1-20/FC00 @@ -0,0 +1 @@ +************** FRED 1MHz Bus memory-mapped I/O **************************
FC00 ;test hardware
FC10-13 ;teletext
FC14-1F ;Prestel
FC20-27 ;IEEE interface
FC30 ;
FC40-47 ;winchester disc interface
FC50 ;
FC60 ;
FC70 ;
FC80 ;
FC90 ;
FCA0 ;
FCB0 ;
FCC0 ;
FCD0 ;
FCE0 ;
FCF0 ;
FCFF ;paging register for JIM expansion memory
************** JIM 1MHz Bus memory-expansion page ***********************
FD00-FF ;
FDFE ;Ecosoak Vector
************** SHEILA MOS memory-mapped I/O ***************************
;DEVICE WRITE READ
FE00 ;6845 CRTC address register
FE01 ;6845 CRTC register file
FE02 ;Border colour border colour
FE03 ;
FE04 ;
FE05 ;
FE06 ;
FE07 ;
FE08 ;6850 ACIA control register status register
FE09 ;6850 ACIA transmit data recieve data
FE0A ;
FE0B ;
FE0C ;
FE0D ;
FE0E ;
FE0F ;
FE10 ;SERIAL ULA control register
FE11 ;
FE12 ;
FE13 ;
FE14 ;
FE15 ;
FE16 ;
FE17 ;
FE18 ;68B54 ADLC Disable interrupts Econet station ID
FE19 ;
FE1A ;
FE1B ;
FE1C ;
FE1D ;
FE1E ;
FE1F ;
FE20 ;Video ULA control register
FE21 ;Video ULA palette register palette register
FE22 ;
FE23 ;
FE24 ;
FE25 ;
FE26 ;
FE27 ;
FE28 ;
FE29 ;
FE2A ;
FE2B ;
FE2C ;
FE2D ;
FE2E ;
FE2F ;
FE30 ;ROM latch paged ROM ID write only
FE31 ;ALTAIR RAM protect
FE32 ;
FE33 ;
FE34 ;Shadow RAM B+ only note different OS
FE35 ;
FE36 ;
FE37 ;
FE38 ;
FE39 ;
FE3A ;
FE3B ;
FE3C ;
FE3D ;
FE3E ;
FE3F ;
FE40 ;MOS 6522 VIA Output Register B Input Register B
FE41 ;MOS 6522 VIA Output Register A Input Register A
FE42 ;MOS 6522 VIA data direction register B
FE43 ;MOS 6522 VIA data direction register A
FE44 ;MOS 6522 VIA T1C-L latches T1 low Order counter
FE45 ;MOS 6522 VIA T1C-H counter
FE46 ;MOS 6522 VIA T1L-L low order latches
FE47 ;MOS 6522 VIA T1L-H high order latches
FE48 ;MOS 6522 VIA T2C-L latches T2C-L lo order counter
FE49 ;MOS 6522 VIA T2C-H T2 high order counter
FE4A ;MOS 6522 VIA shift register
FE4B ;MOS 6522 VIA auxilliary control register ACR
FE4C ;MOS 6522 VIA Peripheral control register PCR
FE4D ;MOS 6522 VIA Interrupt flag register IFR
FE4E ;MOS 6522 VIA Interrupt enable register IER
FE4F ;MOS 6522 VIA ORB/IRB but no handshake
FE50 ;
FE51 ;
FE52 ;
FE53 ;
FE54 ;
FE55 ;
FE56 ;
FE57 ;
FE58 ;
FE59 ;
FE5A ;
FE5B ;
FE5C ;
FE5D ;
FE5E ;
FE5F ;
FE60 ;USER 6522 VIA Output Register B Input Register B
FE61 ;USER 6522 VIA Output Register A Input Register A
FE62 ;USER 6522 VIA data direction register B
FE63 ;USER 6522 VIA data direction register A
FE64 ;USER 6522 VIA T1C-L latches T1 low Order counter
FE65 ;USER 6522 VIA T1C-H counter
FE66 ;USER 6522 VIA T1L-L low order latches
FE67 ;USER 6522 VIA T1L-H high order latches
FE68 ;USER 6522 VIA T2C-L latches T2C-L lo order counter
FE69 ;USER 6522 VIA T2C-H T2 high order counter
FE6A ;USER 6522 VIA shift register
FE6B ;USER 6522 VIA auxilliary control register ACR
FE6C ;USER 6522 VIA Peripheral control register PCR
FE6D ;USER 6522 VIA Interrupt flag register IFR
FE6E ;USER 6522 VIA Interrupt enable register IER
FE6F ;USER 6522 VIA ORB/IRB but no handshake
FE70 ;
FE71 ;
FE72 ;
FE73 ;
FE74 ;
FE75 ;
FE76 ;
FE77 ;
FE78 ;
FE79 ;
FE7A ;
FE7B ;
FE7C ;
FE7D ;
FE7E ;
FE7F ;
FE80 ;8271 FDC command register status register
FE81 ;8271 FDC parameter register result register
FE82 ;8271 FDC reset register
FE83 ;8271 FDC illegal illegal
FE84 ;8271 FDC data data
FE85 ;
FE86 ;
FE87 ;
FE88 ;
FE89 ;
FE8A ;
FE8B ;
FE8C ;
FE8D ;
FE8E ;
FE8F ;
FE90 ;
FE91 ;
FE92 ;
FE93 ;
FE94 ;
FE95 ;
FE96 ;
FE97 ;
FE98 ;
FE99 ;
FE9A ;
FE9B ;
FE9C ;
FE9D ;
FE9E ;
FE9F ;
FEA0 ;68B54 ADLC control register 1 status register 1
FEA1 ;68B54 ADLC control register 2/3 status register 2/3
FEA2 ;68B54 ADLC Tx FIFO (frame continue) Rx FIFO
FEA3 ;68B54 ADLC Tx FIFO (frame terminate) Rx FIFO
FEA4 ;
FEA5 ;
FEA6 ;
FEA7 ;
FEA8 ;
FEA9 ;
FEAA ;
FEAB ;
FEAC ;
FEAD ;
FEAE ;
FEAF ;
FEB0 ;
FEB1 ;
FEB2 ;
FEB3 ;
FEB4 ;
FEB5 ;
FEB6 ;
FEB7 ;
FEB8 ;
FEB9 ;
FEBA ;
FEBB ;
FEBC ;
FEBD ;
FEBE ;
FEBF ;
FEC0 ;7002 ADC data latch A/D start status
FEC1 ;7002 ADC hi data byte
FEC2 ;7002 ADC lo data byte
FEC3 ;
FEC4 ;
FEC5 ;
FEC6 ;
FEC7 ;
FEC8 ;
FEC9 ;
FECA ;
FECB ;
FECC ;
FECD ;
FECE ;
FECF ;
FED0 ;
FED1 ;
FED2 ;
FED3 ;
FED4 ;
FED5 ;
FED6 ;
FED7 ;
FED8 ;
FED9 ;
FEDA ;
FEDB ;
FEDC ;
FEDD ;
FEDE ;
FEDF ;
FEE0 ;TUBE FIFO1 status register
FEE1 ;TUBE FIFO1
FEE2 ;TUBE FIFO2 status register
FEE3 ;TUBE FIFO2
FEE4 ;TUBE FIFO3 status register
FEE5 ;TUBE FIFO3
FEE6 ;TUBE FIFO4 status register
FEE7 ;TUBE FIFO4
FEE8 ;
FEE9 ;
FEEA ;
FEEB ;
FEEC ;
FEED ;
FEEE ;
FEEF ;
FEF0 ;
FEF1 ;
FEF2 ;
FEF3 ;
FEF4 ;
FEF5 ;
FEF6 ;
FEF7 ;
FEF8 ;
FEF9 ;
FEFA ;
FEFB ;
FEFC ;
FEFD ;
FEFE ;
FEFF ;
********** EXTENDED VECTOR ENTRY POINTS**********************************
;vectors are pointed to &F000 +vector No. vectors may then be directed thru
;a three byte vector table whose XY address is given by osbyte A8, X=0, Y=&FF
;this is set up as lo-hi byte in ROM and ROM number
FF00 JSR &FF51 ;E USERV
FF03 JSR &FF51 ;E BRKV
FF06 JSR &FF51 ;E IRQ1V
FF09 JSR &FF51 ;E IRQ2V
FF0C JSR &FF51 ;E CLIV
FF0F JSR &FF51 ;E BYTEV
FF12 JSR &FF51 ;E WORDV
FF15 JSR &FF51 ;E WRCHV
FF18 JSR &FF51 ;E RDCHV
FF1B JSR &FF51 ;E FILEV
FF1E JSR &FF51 ;E ARGSV
FF21 JSR &FF51 ;E BGETV
FF24 JSR &FF51 ;E BPUTV
FF27 JSR &FF51 ;E GBPBV
FF2A JSR &FF51 ;E FINDV
FF2D JSR &FF51 ;E FSCV
FF30 JSR &FF51 ;E EVENTV
FF33 JSR &FF51 ;E UPTV
FF36 JSR &FF51 ;E NETV
FF39 JSR &FF51 ;E VDUV
FF3C JSR &FF51 ;E KEYV
FF3F JSR &FF51 ;E INSV
FF42 JSR &FF51 ;E REMV
FF45 JSR &FF51 ;E CNPV
FF48 JSR &FF51 ;E IND1V
FF4B JSR &FF51 ;E IND2V
FF4E JSR &FF51 ;E IND3V
;at this point the stack will hold 4 bytes (at least)
;S 0,1 extended vector address
;S 2,3 address of calling routine
;A,X,Y,P will be as at entry
FF51 PHA ;save A on stack
FF52 PHA ;save A on stack
FF53 PHA ;save A on stack
FF54 PHA ;save A on stack
FF55 PHA ;save A on stack
FF56 PHP ;save flags on stack
FF57 PHA ;save A on stack
FF58 TXA ;A=X
FF59 PHA ;save X on stack
FF5A TYA ;A=Y
FF5B PHA ;save Y on stack
FF5C TSX ;get stack pointer into X (&F2 or less)
FF5D LDA #&FF ;A=&FF
FF5F STA &0108,X ;A
FF62 LDA #&88 ;
FF64 STA &0107,X ;
FF67 LDY &010A,X ;this is VECTOR number*3+2!!
FF6A LDA &0D9D,Y ;lo byte of action address
FF6D STA &0105,X ;store it on stack
FF70 LDA &0D9E,Y ;get hi byte
FF73 STA &0106,X ;store it on stack
;at this point stack has YXAP and action address
;followed by return address and 5 more bytes
FF76 LDA &F4 ;
FF78 STA &0109,X ;store original ROM number below this
FF7B LDA &0D9F,Y ;get new rom number
FF7E STA &F4 ;store it as ram copy
FF80 STA &FE30 ;and switch ti that ROM
FF83 PLA ;get back A
FF84 TAY ;Y=A
FF85 PLA ;get back A
FF86 TAX ;X=A
FF87 PLA ;get back A
FF88 RTI ;get back flags and jump to ROM vectored entry
;leaving return address and 5 more bytes on stack
************ return address from ROM indirection ************************
;at this point stack comprises original ROM number,return from JSR &FF51,
;return from original call the return from FF51 is garbage so;
FF89 PHP ;save flags on stack
FF8A PHA ;save A on stack
FF8B TXA ;A=X
FF8C PHA ;save X on stack
FF8D TSX ; (&F7 or less)
FF8E LDA &0102,X ;STORE A AND P OVER
FF91 STA &0105,X ;return address from (JSR &FF51)
FF94 LDA &0103,X ;hiding garbage by duplicating A and X just saved
FF97 STA &0106,X ;
;now we have
;flags,
;A,
;X,
;Rom no.,
;A,
;flags,
;and original return address on stack
;so
FF9A PLA ;get back X
FF9B TAX ;X=A
FF9C PLA ;get back A lose next two bytes
FF9D PLA ;get back A lose
FF9E PLA ;get back A rom number
FF9F STA &F4 ;store it
FFA1 STA &FE30 ;and set it
FFA4 PLA ;get back A
FFA5 PLP ;get back flags
FFA6 RTS ;return and exit pulling original return address
;from stack
;FFA6 is also default input for CFS OSBPGB, VDUV, IND1V,IND2V,IND3V
;as these functions are not implemented by the OS but may be used
;by software or other filing systems or ROMs
*************************************************************************
* *
* OSBYTE &9D FAST BPUT *
* *
*************************************************************************
FFA7 TXA ;A=X
FFA8 BCS &FFD4 ;carry always set, jump to BPUT
*************************************************************************
* *
* OSBYTE &92 READ A BYTE FROM FRED *
* *
************************************************************************* ;
FFAA LDY &FC00,X ;read a byte from FRED area
FFAD RTS ;return
*************************************************************************
* *
* OSBYTE &94 READ A BYTE FROM JIM *
* *
************************************************************************* ;
;
FFAE LDY &FD00,X ;read a byte from JIM area
FFB1 RTS ;return
*************************************************************************
* *
* OSBYTE &96 READ A BYTE FROM SHEILA *
* *
************************************************************************* ;
;
FFB2 LDY &FE00,X ;read a byte from SHEILA memory mapped I/O area
FFB5 RTS ;return
*********** DEFAULT VECTOR TABLE ****************************************
FFB6 DB 36 ;length of look up table in bytes
FFB7 DB 40 ;low byte of address of this table
FFB8 DB D9 ;high byte of address of this table
**************************************************************************
**************************************************************************
** **
** OPERATING SYSTEM FUNCTION CALLS **
** **
**************************************************************************
**************************************************************************
FFB9 JMP &DC0B ;OSRDRM get a byte from sideways ROM
FFBC JMP &C4C0 ;VDUCHR VDU character output
FFBF JMP &E494 ;OSEVEN generate an EVENT
FFC2 JMP &EA1E ;GSINIT initialise OS string
FFC5 JMP &EA2F ;GSREAD read character from input stream
FFC8 JMP &DEC5 ;NVRDCH non vectored OSRDCH
FFCB JMP &E0A4 ;NVWRCH non vectored OSWRCH
FFCE JMP (&021C) ;OSFIND open or close a file
FFD1 JMP (&021A) ;OSGBPB transfer block to or from a file
FFD4 JMP (&0218) ;OSBPUT save a byte to file
FFD7 JMP (&0216) ;OSBGET get a byte from file
FFDA JMP (&0214) ;OSARGS read or write file arguments
FFDD JMP (&0212) ;OSFILE read or write a file
FFE0 JMP (&0210) ;OSRDCH get a byte from current input stream
FFE3 CMP #&0D ;OSASCI output a byte to VDU stream expanding
FFE5 BNE &FFEE ; carriage returns (&0D) to LF/CR (&0A,&0D)
FFE7 LDA #&0A ;OSNEWL output a CR/LF to VDU stream
FFE9 JSR OSWRCH ;Outputs A followed by CR to VDU stream
FFEC LDA #&0D ;OSWRCR output a CR to VDU stream
FFEE JMP (&020E) ;OSWRCH output a character to the VDU stream
FFF1 JMP (&020C) ;OSWORD perform operation using parameter table
FFF4 JMP (&020A) ;OSBYTE perform operation with single bytes
FFF7 JMP (&0208) ;OSCLI pass string to command line interpreter
*************************************************************************
* *
* 6502 Vectors *
* *
*************************************************************************
FFFA DW &0D00 ;NMI address
FFFC DW &D9CD ;RESET address
FFFE DW &DC1C ;IRQ address
That's it the end of the series and the end of Micronet.
See you on the new system or in the paper mags.
Geoff
\ No newline at end of file |