                .DO     Internal
                .LSTON
                .Page
                .FIN
                
                .ORG    $1000 ;move this code into the eprom
                
                .DO     SystemCode
DevSubType      .Equ    $00 ;system device
                .ELSE
DevSubType      .Equ    $01 ;diagnostic device
                .FIN
                
                .BLOCK  0,2   ;reserve two bytes for the checkbyte
                .DB     0     ;bank 0
PassWord:       .DB     $F0, $78, $3C, $1E

                .DO     W_10MB
FmtDelay:       .DB     $1F     ;busy wait for a while
                .ELSE
FmtDelay:       .DB     $1F
                .FIN

                .DO     W_10MB
RWI_Cylinder    .Equ    257     ;cylinder at which to turn on RWI and PC
                .FIN
                .DO     W_20MB
RWI_Cylinder    .Equ    257     ;cylinder at which to turn on RWI and PC
                .FIN
                .DO     W_40MB
RWI_Cylinder    .Equ    514     ;cylinder at which to turn on RWI and PC
                .FIN
RWI_Value:      .DB     .HIBYTE. RWI_Cylinder, .LOWBYTE. RWI_Cylinder
                
B0_VctTab:
Start_Vector:   Jp      Start_Command
LL_Vector:      Jp      Load_Logical
LH_Vector:      Jp      Load_Header
RdL_Vector:     Jp      Rd_Leave
CS_Vector:      Jp      ClrNormStat
                 
LdPw_Vector:     Ld     !r2,#.HIBYTE. Load_PassWord
                 Ld     !r3,#.LOWBYTE. Load_PassWord
                Call    Bank_Call
                Ret
                
Free_Vector:     Ld     !r2,#.HIBYTE. Strt_FreeProcess
                 Ld     !r3,#.LOWBYTE. Strt_FreeProcess
                Call    Bank_Call
                Ret
                
ExtStk_Vector:   Ld     !r2,#.HIBYTE. Init_ExtStack
                 Ld     !r3,#.LOWBYTE. Init_ExtStack
                Call    Bank_Call
                Ret
                
ZrRd_Vector:     Ld     !r2,#.HIBYTE. Zero_RdBuf
                 Ld     !r3,#.LOWBYTE. Zero_RdBuf
                Call    Bank_Call
                Ret

ClrStat_Vector:  Ld     !r2,#.HIBYTE. ClearStatus
                 Ld     !r3,#.LOWBYTE. ClearStatus
                Call    Bank_Call
                Ret
                
SlfTst_Vector:   Ld     !r2,#.HIBYTE. SelfTest
                 Ld     !r3,#.LOWBYTE. SelfTest
                Call   Bank_Call
                Ret

SprTbl_Vector:   Ld     !r2,#.HIBYTE. Load_SprTbl
                 Ld     !r3,#.LOWBYTE. Load_SprTbl
                Call    Bank_Call
                Ret

LC_Vector:       Ld     !r2,#.HIBYTE. Load_Cache
                 Ld     !r3,#.LOWBYTE. Load_Cache
                Call    Bank_Call
                Ret
                
Scan_Vector:     Ld     !r2,#.HIBYTE. D_Scan
                 Ld     !r3,#.LOWBYTE. D_Scan
                Call    Bank_Call
                Jp      Rd_Leave

IScan_Vector:
                Ld      !r0,#DevSubType ;check for SystemCode
                Or      !r0,!r0 ;IF SystemCode THEN DevSubType = 0
                Jr      Nz,IScan_Ret
                Tm      Excpt_Stat,#PwrRst ;only do scan after power reset
                Jr      Z,IScan_SprChk
                 Ld     !r2,#.HIBYTE. Scan
                 Ld     !r3,#.LOWBYTE. Scan
                Call    Bank_Call
IScan_SprChk:    Ld     !r2,#.HIBYTE. Chk_SprCnt
                 Ld     !r3,#.LOWBYTE. Chk_SprCnt
                Call    Bank_Call
IScan_Ret:      Ret
                
WrBlk_Vector:   Call   WriteBlock
VctrB0_Ret:     Jp      Bank_Ret
                
RdBlk_Vector:   Call    ReadBlock
                Jr      VctrB0_Ret
                
SC_Vector:      Call    Srch_Cache
                Jr      VctrB0_Ret

Seek_Vector:     Ld     !r2,#.HIBYTE. Seek
                 Ld     !r3,#.LOWBYTE. Seek
                Call    Bank_Call
                Jp      Bank_Ret

ExtPush_Vector:  Ld     !r2,#.HIBYTE. Ext_Push
                 Ld     !r3,#.LOWBYTE. Ext_Push
                Call    Bank_Call
                Ret

ExtPop_Vector:   Ld     !r2,#.HIBYTE. Ext_Pop
                 Ld     !r3,#.LOWBYTE. Ext_Pop
                Call    Bank_Call
                Ret

DeviceParams:
                .DO     W_10MB
                .ASCII  'Widget-10    '
                .DB     $00, $01, $0 + DevSubType
                .DB     HiRevNumber, LoRevNumber
                .DB     $00, $4C, $00
                .DW     532 ;number of bytes per block
                .DW     514 ;number of cylinders is 514
                .DB     $02      ;number of heads is 2
                .DB     NbrSctrs
                .DB     $00, $00, 76 ;number of spare possible
                .LSTOFF
                .FIN
                .DO     Internal
                .LSTON
                .FIN
                .DO     W_20MB
                .ASCII  'Widget-20    '
                .DB     $00, $01, $10 + DevSubType
                .DB     HiRevNumber, LoRevNumber
                .DB     $00, $98, $00
                .DW     532 ;number of bytes per block
                .DW     514 ;number of cylinders is 514
                .DB     $02      ;number of heads is 2
                .DB     NbrSctrs
                .DB     $00, $00, 76 ;number of spare possible
                .LSTOFF
                .FIN
                .DO     Internal
                .LSTON
                .FIN
                .DO     W_40MB
                .ASCII  'Widget-40    '
                .DB     $00, $01, $20 + DevSubType
                .DB     HiRevNumber, LoRevNumber
                .DB     $01, $30, $00
                .DW     532 ;number of bytes per block
                .DW     1028 ;number of cylinders is 1028
                .DB     $02      ;number of heads is 2
                .DB     NbrSctrs
                .DB     $00, $00, 76 ;number of spare possible
                .LSTOFF
                .FIN
                .DO     Internal
                .LSTON
                .FIN
                
Dev_Parm_Len    .Equ    .PC. - DeviceParams
                
                .LSTOFF

                
