 lib environment
 opt nol
 lib dtab
 lib sptab
 lib pprtab
 lib inttab
 lib bfhdr
 lib blktab
 lib chrtab
 opt lis
 sttl Device Driver Tables
 pag
 name devtab
 data
 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 swap map terminator
WHTHOL fcb $F4 white hole memory cell
CLOCK equ $E210 gimix clock base
HZTIM equ 12500+1 gimix clock rate
CLKSEL equ CLOCK+1 clock select and status register
CLKLAT equ CLOCK+6 clock timer latch
CLKCON equ %01000001 clock control (gimix)
CLKMSK equ %10000000 clock interrupt mask
*
* Device Register Definitions
*
*  DMAF2
*
DMFINT equ $F000 dma interrupt register
DMFADR equ DMFINT+2 dma address register
DMFCCR equ DMFINT+1 dma control register
DMFCOM equ DMFINT+4 wd command register
DMFTRK equ DMFINT+5 wd track register
DMFSEC equ DMFINT+6 wd sector register
DMFDAT equ DMFINT+7 wd data register
DMFDRV equ DMFINT drive select register

*
* 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

*
*  Special device addresses
*

BASACI equ $E000
SRLPRT0 equ $E070
SRLPRT1 equ $E074
PIA0 equ $E062 gimix parallel port (pia)

*
* ROM Addresses
*
Pdata jmp [$F800]
Phex jmp [$F802]
Pspace jmp [$F804]

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 - CDS Winchester drive
 endif

strm fcb 12 number of terminals
stsk fcb 48 number of tasks
siob fcb 32 number of io buffers
schl fcb 64 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 Baud Rate value for system console
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 0 non SWTPC vii system
DATsense fcb $FF SWTPC half inverted DAT form
ROMmap fdb $F1F0 Map registers for $E000-$FFFF
NMIhan fdb 0 ** ROM handles these
SWI2han fdb 0 ** Also SWI2
MAXMAP fcb 0 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+$00 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
*
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
*
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 dmfdt device table pointer
 fcb BD0max
*
BLKDEV equ (*-blktab)/BLKSIZ

* Block Device 0 Open table
BD0open
DMF2minor equ (*-BD0open)/2 Minor Device for DMF2 Floppies
DMF2major equ 0
 fdb dmfopn fd0
 fdb dmfopn fd1
 fdb dmfopn fd2
 fdb dmfopn fd3
CDSminor equ (*-BD0open)/2
CDSmajor equ 0
 fdb cdsopen hd0
 fdb cdsopen hd1
BD0max equ (*-BD0open)/2

* Block Device 0 Close Table
BD0close
 fdb dmfcls fd0
 fdb dmfcls fd1
 fdb dmfcls fd2
 fdb dmfcls fd3
 fdb cdsclose hd0
 fdb cdsclose hd1

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

*
* Device Tables
*
dmfdt rzb DVTSIZ device table
cdsdt equ dmfdt

*
* Floppy disk time-out stuff
*
FD5time equ 50 5.0 seconds
FD5cnt fcb 0

* 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
