 lib environment
 lib dtab
 lib sptab
 lib pprtab
 lib inttab
 lib bfhdr
 lib blktab
 lib chrtab
 data
 sttl Device Driver Tables
 pag
 name devtab
 define

*
* System Parameters - adjust accordingly
*

SSIZE equ 1 initial stack size (*PAGSIZ)
MAXJOB equ 10 maximum simult user tasks
NBLKS equ 16 Accessable pages in address space
USRHIP equ NBLKS-1 User's highest addressable page
USRHIP_4 equ USRHIP<<4

* terminal i/o constants

OQHI equ 119 outq upper limit
OQLO equ 15 outq lower limit
CHRLIM equ 255 max characters on q

*
LIGHTS fcb 0

*
* Machine constants
*

DATBOX equ $FFF0 memory mapper regs
BLKHOL fcb $F3 black hole memory cell
DSKTRM fcb $F3
WHTHOL fcb $F4 white hole memory cell
CLOCK equ $E090 clock base
CLKSEL equ CLOCK+1 clock select and status register
CLKLAT equ CLOCK+6 clock timer latch
CLKCON equ %01000000 clock control
CLKMSK equ %10000000 clock interrupt mask
HZTIM_60 equ 120/10-1 interrupt rate (60hz)
HZTIM_50 equ 100/10-1 interrupt rate (50hz)
BASACI equ $E000
SRLPRT0 equ $E070
SRLPRT1 equ $E074
NECADR equ $E060
PIA0 equ $E082

*
* DMF2 (Floppy)
*
DMF2ADR equ $F000 dma address register
DMF2CNT equ DMF2ADR+2 dma count register
DMF2CCR equ DMF2ADR+$10 dma control register
DMF2PRI equ DMF2ADR+$14 dma priority register
DMF2INT equ DMF2ADR+$15 dma interrupt register
DMF2COM equ DMF2ADR+$20 wd command register
DMF2TRK equ DMF2ADR+$21 wd track register
DMF2SEC equ DMF2ADR+$22 wd sector register
DMF2DAT equ DMF2ADR+$23 wd data register
DMF2DRV equ DMF2ADR+$24 drive select register
DMF2LAT equ DMF2ADR+$40 controller addr latch

*
* CDS Winchester disk controller definitions
*
 base 0
CDSCMD rmb 1 disk command register
CDSADR rmb 2 disk address register
CDSFLG rmb 1 disk irq status register
 data
CDSdev fdb $F100 Drive 0
       fdb $F300 Drive 1

 ifc &a,'8'
Uni_DN equ 0 8" Floppy Diskette
 info Root device: /dev/fd0
 else
 ifc &a,'CDS'
Uni_DN equ 4 Default (hard disk)
 info Root device: /dev/hd0
 else
 ifc &a,'NO-SPR'
Uni_DN equ CDSminor
 info Root device: /dev/hd0
 info No Serial Printers
 else
 err 'Illegal root specification'
 endif
 endif
 endif

contab equ *
strm fcb 12 number of terminals
stsk fcb 48 number of tasks
siob fcb 16 number of io buffers
schl fcb 96 number of character lists
 ifnc &a,'NO-SPR'
sfdn fcb 64 number of fdn entries
 else
sfdn fcb 100 number of fdn entries (open files)
 endif
stxt fcb 20 number of text entries
smnt fcb 5 number of mounts
stim fcb 24 number of timeouts allowed
slok fcb 32 number of lock table entries
srtd fdb Uni_DN root device number
sppd fdb Uni_DN pipe device number
sswd fdb Uni_DN swap device number
stlm fcb 0 time limit in 25.6 X seconds (0 disables)
sfil fdb 500 max file size for reg user
scon fdb BASACI console terminal address (acia)
sconbr fcb 0 console baud rate value
smxj fcb MAXJOB max user task count
stmz fdb 300 time zone (minutes west of gmt)
sdlt fcb 0 daylight savings here (0 if not)
sphz fcb 0 non-zero if power line is 50HZ
stup fcb 0 auto update time (0 disables) - value*4
smxm fcb NBLKS maximum mem segments per task
FD_SRT fcb 0 Floppy Disk Seek Rate
SWTPCvii fcb $00 SWTPC S/09 system
DATsense fcb $FF SWTPC inverted DAT form
ROMmap fdb $F1F0 Map registers for ROM space ($E000-$F000)
NMIhan fdb 0 NMI handled by ROM only
SWI2han fdb 0 SWI2 also
MAXMAP fcb 0 Number of user maps

*
* Interrupt Handler Table
*    Used to decide which device generated an interrupt
* and how to process it.
*

inttab
 fcb N_intdev number of interrupt devices
* tty 0
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 0 device number
* tty 1
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$04 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 1 device number
* tty 2
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$10 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 2 device number
* tty 3
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$14 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 3 device number
* tty 4
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$20 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 4 device number
* tty 5
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$24 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 5 device number
* tty 6
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$30 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 6 device number
* tty 7
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$34 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 7 device number
* tty 8
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$40 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 8 device number
* tty 9
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$44 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 9 device number
* tty 10
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$50 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 10 device number
* tty 11
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$54 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 11 device number
 ifnc &a,'NO-SPR'
* serial printer
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb SRLPRT0 status register
 fdb 0,0 No baud rate generators
 fdb spntr interrupt routine
 fdb $0500 device number
* serial printer two
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb SRLPRT1 status register
 fdb 0,0 No baud rate generators
 fdb spntr interrupt routine
 fdb $0501 device number
* nec interface
 fcb 3,0 NEC
 fcb %10000000
 fdb NECADR+2
 fdb 0,0 No baud rate generators
 fdb neccup
 fdb $0700
* nec kludge interrupt
 fcb 3,0 NEC Kludge
 fcb %10000000
 fdb NECADR+3
 fdb 0,0 No baud rate generators
 fdb necafu
 fdb $0700
 else
* tty 12
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$60 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 12 device number
* tty 13
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$64 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 13 device number
* tty 14
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$70 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 14 device number
* tty 15
 fcb 0,0 ACIA
 fcb %10000000 int mask
 fdb BASACI+$74 status register
 fdb 0,0 No baud rate generators
 fdb tintr tty interrupt routine
 fdb 15 device number
 endif
* parallel printer
 fcb 1,0 PIA
 fcb %10000000 int mask
 fdb PIA0+1 status register
 fdb 0,0 No baud rate generators
 fdb ppint interrupt routine
 fdb $0600 device number
*
N_intdev equ (*-inttab-1)/INTSIZ
intend equ *


*
* fnttab
*
* Interrupt table for firq type interrupts.  It is
* the same as inttab above.
*

fnttab
fntend equ *


 pag

*
* Device tables
*

* Character table

chrtab
* tty device
 fdb ttopn tty open routine
 fdb ttcls tty close routine
 fdb ttrd tty read routine
 fdb ttwr tty write routine
 fdb ttspc special routine
* mem device
 fdb nuldev mem open
 fdb nuldev mem close
 fdb mdrd mem read
 fdb mdwr mem write
 fdb nuldev mem special
* null device
 fdb nuldev null dev open
 fdb nuldev null dev close
 fdb nuldrd null device read
 fdb nuldwr null device write
 fdb nuldev null special
* floppy disk (character)
 fdb fchop fd open
 fdb fchcl fd close
 fdb fchrd fd read
 fdb fchwr fd write
 fdb fchsp fd special
* cds character drivers
 fdb cdcop cds open
 fdb cdccl cds close
 fdb cdcrd cds read
 fdb cdcwr cds write
 fdb nuldev special
 ifnc &a,'NO-SPR'
* serial printer drivers
 fdb spopn serial open
 fdb spcls serial close
 fdb nodev serial read
 fdb spwrt serial write
 fdb spspc special
 else
* serial printer drivers
 fdb nodev serial open
 fdb nodev serial close
 fdb nodev serial read
 fdb nodev serial write
 fdb nodev special
 endif
* parallel printer driver
 fdb ppopn parallel open
 fdb ppcls parallel close
 fdb nodev parallel read
 fdb ppwrt parallel write
 fdb nuldev special
 ifnc &a,'NO-SPR'
* nec drivers
 fdb necopn
 fdb neccls
 fdb nodev
 fdb necwrt
 fdb nectys
 else
* nec drivers
 fdb nodev
 fdb nodev
 fdb nodev
 fdb nodev
 fdb nodev
 endif
CHRDEV equ (*-chrtab)/DEVSIZ

* Block device table

blktab
 fdb BDopen,BD0open open routine
 fdb BDclose,BD0close close routine
 fdb BDio,BD0io main io routine
 fdb dmf2dt device table pointer
 fcb BD0max max minor device number (+1)
BLKDEV equ (*-blktab)/BLKSIZ

* Block Device 0 Open Handlers
BD0open
DMF2minor equ (*-BD0open)/2
DMF2major equ 0
 fdb dmf2opn fd0
 fdb dmf2opn fd1
 fdb dmf2opn fd2
 fdb dmf2opn fd3
CDSminor equ (*-BD0open)/2
CDSmajor equ 0
 fdb cdsopen hd0
 fdb cdsopen hd1
BD0max equ (*-BD0open)/2

* Block Device 0 Close Handlers
BD0close fdb dmf2cls fd0
 fdb dmf2cls fd1
 fdb dmf2cls fd2
 fdb dmf2cls fd3
 fdb cdsclose hd0
 fdb cdsclose hd1

* Block Device 0 I/O Handlers
BD0io fdb dmf2io fd0
 fdb dmf2io fd1
 fdb dmf2io fd2
 fdb dmf2io fd3
 fdb cdsio hd0
 fdb cdsio hd1

*
* Device Tables
*

dmf2dt rzb DVTSIZ device table
cdsdt equ dmf2dt

* buffer header for character device

fchbuf rzb HDRSIZ buffer header

*
* Tables for serial printers
*

SPBFSZ equ 100 buffer size

* tables and buffers

sptabl
 fdb spbf0 buffer 0
 fdb SRLPRT0 acia 0
 fdb spbf1 buffer 1
 fdb SRLPRT1 acia 1
SPMAX equ (*-sptabl)/4-1

spbf0 rzb SPBFSZ buffer 0
spbf1 rzb SPBFSZ buffer 1

* structure storage

spstrc rzb (SPMAX+1)*SPSZ

*
* Tables for Parallel Printers
*

PPstr
 fdb PIA0 PIA address
 fcb 0 Character count
 fcb 0 Busy flag
 fdb 0,0 Queue pointers
 rzb PPBUFSIZ actual buffer
*
PPMAX equ (*-PPstr)/PPSIZ-1
