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