 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 $F400 memory mapper regs
BLKHOL fcb $FF black hole memory cell
DSKTRM fcb $FC
WHTHOL fcb $CD white hole memory cell
CLOCK equ $E490 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)
NECADR equ $E460
BASACI equ $E400
SRLPRT0 equ $E470
SRLPRT1 equ $E474
PIA0 equ $E482

*
* DMF2 (Floppy)
*
DMF2ADR equ $E000 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 $E100 Drive 0
       fdb $E300 Drive 1

contab equ *
 ifc &a,'8'
Uni_DN equ 0 8" Floppy Diskette
 info Root device: /dev/fd0
 else
Uni_DN equ 4 Default (hard disk)
 info Root device: /dev/hd0
 endif

strm fcb 12 number of terminals
stsk fcb 64 number of tasks
siob fcb 64 number of io buffers
schl fcb 96 number of character lists
sfdn fcb 64 number of fdn entries
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 $FF SWTPC MPU system
DATsense fcb $00 SWTPC non-inverted DAT form
ROMmap fdb $FFFF Map registers for ROM space ($E000-$F000)
NMIhan fdb nmihan NMI handled by ROM only
SWI2han fdb swi2han SWI2 also
MAXMAP fcb 64 Number of hardware memory 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
* 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
* 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
* 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
*
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
* serial printer drivers
 fdb spopn serial open
 fdb spcls serial close
 fdb nodev serial read
 fdb spwrt serial write
 fdb spspc special
* parallel printer driver
 fdb ppopn parallel open
 fdb ppcls parallel close
 fdb nodev parallel read
 fdb ppwrt parallel write
 fdb nuldev special
* nec drivers
 fdb necopn
 fdb neccls
 fdb nodev
 fdb necwrt
 fdb nectys
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
