home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / S / ZEN2.LBR / BIOS85.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  42KB  |  1,762 lines

  1.     TITLE    'CP/M-85 BIOS (8085 CODE PORTION)     10 MAR 83'
  2. ;***
  3. ;
  4. ;    THIS IS THE 8085 CODED PORTION OF THE BIOS FOR CP/M-85.
  5. ;    IT RESIDES IN THE FILE 'BIOS85.SYS'.
  6. ;
  7.  
  8. TRUE    EQU    1
  9. FALSE    EQU    0
  10.  
  11. ASM86    EQU    FALSE
  12. REL0    EQU    TRUE
  13.  
  14.  
  15.  
  16.  
  17. ;***    MACROS
  18. ;
  19.  
  20.  
  21. ;**    EXTRA PSEUDO OPS FOR USE WITH MAC
  22. ;
  23.  
  24. RB    MACRO    A
  25.     DS    A
  26.     ENDM
  27.  
  28. RW    MACRO    A
  29.     DS    2*A
  30.     ENDM
  31.  
  32.  
  33.  
  34.  
  35.  
  36. ;***    EQUATES
  37. ;
  38.  
  39.  
  40. ;**    Z-MACHINE MEMORY MAP UTILIZATION EQUATES
  41. ;
  42.  
  43. BOOTORG    EQU    0400H            ;BOOT CODE LOAD ADDRESS
  44. BCODEL    EQU    256+32            ;MAXIMUM BOOT CODE LENGTH
  45.  
  46. BLDR88    EQU    BOOTORG+BCODEL        ;BIOS LOADER (8088 PORTION)
  47. BLDR88L    EQU    64            ;MAXIMUM BIOS LOADER (8088) LENGTH
  48.  
  49. B88STK    EQU    2*1024            ;8088 STACK AREA
  50.  
  51. B88DAT    EQU    B88STK            ;MONITOR ROM DATA AREA START ADDR
  52.  
  53. BIOS88    EQU    4*1024            ;WHERE 8088 CODE OF BIOS WILL RESIDE
  54.  
  55. BLDRP0    EQU    16*1024            ;BIOS LOADER PAGE ZERO BIAS VALUE
  56.  
  57.     IF    REL0
  58. BLOADER    EQU    0000H            ;WHERE BOOT CODE LOADS BIOS LOADER
  59.     ENDIF
  60.     IF    NOT REL0
  61. BLOADER    EQU    0100H            ;WHERE BOOT CODE LOADS BIOS LOADER
  62.     ENDIF
  63. BLDR85L    EQU    8*128-BCODEL-BLDR88L    ;MAXIMUM BIOS LOADER (8085) LENGTH
  64.  
  65. BOOT85    EQU    0000H            ;WHERE 8085 STARTS AFTER PROCESSOR SWAP
  66.  
  67. SWISWAP    EQU    0FEH            ;SWI FOR SWAPPING PROCESSORS
  68. SWAPVEC    EQU    SWISWAP*4        ; VECTOR ADDRESS
  69.  
  70.  
  71. BIAS    EQU    0
  72. ;**    CP/M-85 SYSTEM EQUATES
  73. ;
  74.  
  75. ;    OS VALUES
  76.  
  77. CCPL    EQU    0800H            ;LENGTH OF CCP
  78. BDOSL    EQU    0E00H            ;LENGTH OF BDOS
  79.  
  80. ;    RESERVED LOCATIONS IN PAGE ZERO
  81.  
  82.     ORG    BIAS
  83. BOOT    RB    3            ;JUMP TO WARM START ENTRY
  84. IOBYTE    RB    1            ;IOBYTE
  85. DFTDRV    RB    1            ;CURRENT EFAULT DRIVE
  86. BDOS    RB    3            ;JUMP TO BDOS
  87. INT1    RB    8            ;INTERRUPT LOCATION 1
  88. INT2    RB    8            ;INTERRUPT LOCATION 2
  89. INT3    RB    8            ;INTERRUPT LOCATION 3
  90. INT4    RB    8            ;INTERRUPT LOCATION 4
  91. INT5    RB    8            ;INTERRUPT LOCATION 5
  92. INT6    RB    8            ;INTERRUPT LOCATION 6 (RESERVED)
  93. INT7    RB    8            ;INTERRUPT LOCATION 7 (USED BY DDT)
  94. BSCR    RB    16            ;16 BYTE SCRATCH AREA FOR BIOS
  95.     RB    12            ;12 BYTES NOT USED BUT RESERVED
  96. TFCB    RB    36            ;TRANSIENT DEFAULT FCB
  97. TFCB2    EQU    TFCB+16            ;TRANSIENT 2ND FILENAME
  98. TBUFF    RB    128            ;DEFAULT DISK BUFFER
  99. TPA    RB    0            ;START OF TRANSIENT PROGRAM AREA
  100.  
  101. ;    HEATH PAGE ZERO LOCATIONS
  102.  
  103.     IF    ASM86
  104.     ORG    OFFSET INT1+3
  105.     ENDIF
  106.     IF    NOT ASM86
  107.     ORG    INT1+3
  108.     ENDIF
  109. TICCNT    RW    2            ;32 BIT TIMER TIC COUNTER
  110. TIMEFLG    RB    1            ;TIMER 2 FLAG (0=RUNNING , 1=TIME OUT)
  111.  
  112.     IF    ASM86
  113.     ORG    OFFSET INT2
  114.     ENDIF
  115.     IF    NOT ASM86
  116.     ORG    INT2
  117.     ENDIF
  118. COMREG    RB    0            ;BIOS88 COMMUNICATION REGION
  119. COMFUNC    RB    1            ; BIOS FUNCTION VALUE = (#-CBOOT)/3
  120. COMRA    RB    1            ; (A)
  121. COMRBC    RW    0            ; (BC)
  122. COMRC    RB    1            ;  (C)
  123. COMRB    RB    1            ;  (B)
  124. COMRDE    RW    0            ; (DE)
  125. COMRE    RB    1            ;  (E)
  126. COMRD    RB    1            ;  (D)
  127. COMRHL    RW    0            ; (HL)
  128. COMRL    RB    1            ;  (L)
  129. COMRH    RB    1            ;  (H)
  130. COMWHO    RB    1            ;WHICH PROCESSOR IS RUNNING
  131.                     ; ZPSPPS5 = 8085
  132.                     ; ZPSPPS8 = 8088
  133.  
  134. BDMAP    EQU    BSCR+00H        ;DRIVE MAP (MAX OF 8 ENTRIES 0-7)
  135.     IF    ASM86
  136. BBIOS    EQU    WORD PTR BSCR+0EH    ;TRUE ADDRESS FOR START OF BIOS
  137.     ENDIF
  138.     IF    NOT ASM86
  139. BBIOS    EQU    BSCR+0EH        ;TRUE ADDRESS FOR START OF BIOS
  140.     ENDIF
  141.  
  142. ;    CP/M FUNCTIONS
  143.  
  144. RESET    EQU    0            ;SYSTEM RESET
  145. RDCON    EQU    1            ;READ CONSOLE
  146. WRCON    EQU    2            ;WRITE CONSOLE
  147. RDRDR    EQU    3            ;READ READER
  148. WRPUN    EQU    4            ;WRITE PUNCH
  149. WRLST    EQU    5            ;WRITE LIST
  150. DCONIO    EQU    6            ;DIRECT CONSOLE I/O (2)
  151. IOSTAT    EQU    7            ;INTERROGATE I/O STATUS
  152. ASTAT    EQU    8            ;ALTER I/O STATUS
  153. PRCONB    EQU    9            ;PRINT CONSOLE BUFFER
  154. RDCONB    EQU    10            ;READ CONSOLE BUFFER
  155. CCSTAT    EQU    11            ;CHECK CONSOLE STATUS
  156. LDH    EQU    12            ;LIFT DISK HEAD
  157. CPMVER    EQU    LDH            ;GET CP/M VERSION (2)
  158. RDS    EQU    13            ;RESET DISK SYSTEM
  159. SELDSK    EQU    14            ;SELECT DISK
  160. OPEN    EQU    15            ;OPEN FILE
  161. CLOSE    EQU    16            ;CLOSE FILE
  162. S1ST    EQU    17            ;SEARCH FIRST
  163. SNXT    EQU    18            ;SEARCH NEXT
  164. DELETE    EQU    19            ;DELETE FILE
  165. READ    EQU    20            ;READ RECORD
  166. WRITE    EQU    21            ;WRITE RECORD
  167. CREATE    EQU    22            ;CREATE FILE
  168. RENAME    EQU    23            ;RENAME FILE
  169. ILOG    EQU    24            ;INTERROGATE LOGIN
  170. IDSK    EQU    25            ;INTERROGATE DISK
  171. SETDMA    EQU    26            ;SET DMA ADDRESS
  172. IALLOC    EQU    27            ;INTERROGATE ALLOCATION
  173. WPD    EQU    28            ;WRITE PROTECT DISK
  174. GROV    EQU    29            ;GET READ/ONLY VECTOR
  175. SFA    EQU    30            ;SET FILE ATTRIBUTES
  176. GADPB    EQU    31            ;GET ADDR OF DPB
  177. SGUSR    EQU    32            ;SET/GET USER CODE
  178. READRR    EQU    33            ;READ RANDOM RECORD
  179. WRITERR    EQU    34            ;WRITE RANDOM RECORD
  180. CFSIZE    EQU    35            ;COMPUTE FILE SIZE
  181. SRR    EQU    36            ;SET RANDOM RECORD
  182. RESDRV    EQU    37            ;RESET DRIVE
  183. WRITERZ    EQU    40            ;WRITE RANDOM WITH ZERO FILL
  184.  
  185. ;    BIOS ENTRY POINTS.
  186. ;      GIVEN AS DISPLACEMENTS FROM WARM BOOT ENTRY POINT WHOSE
  187. ;      ADDRESS IS USUALLY AT LOCATION BOOT+1.
  188. ;      TO COMPUTE DISPLACEMENTS FROM VALUE STORED AT 'BBIOS'
  189. ;      SUBTRACT 'CBOOT'.  EG. DISPLACEMENT FOR WARM BOOT = WBOOT-CBOOT
  190.  
  191. CBOOT    EQU    -0003H            ;COLD BOOT
  192. WBOOT    EQU    0000H            ;WARM BOOT
  193. CONST    EQU    0003H            ;CONSOLE STATUS
  194. CONIN    EQU    0006H            ;CONSOLE INPUT
  195. CONOUT    EQU    0009H            ;CONSOLE OUTPUT
  196. LSTOUT    EQU    000CH            ;LIST OUTPUT
  197. PUNOUT    EQU    000FH            ;PUNCH OUTPUT
  198. RDRIN    EQU    0012H            ;READER INPUT
  199. HOME    EQU    0015H            ;HOME DISK
  200. SETDSK    EQU    0018H            ;SET (SELECT) DISK DRIVE
  201. SETTRK    EQU    001BH            ;SET TRACK NUMBER
  202. SETSEC    EQU    001EH            ;SET SECTOR NUMBER
  203. SDMA    EQU    0021H            ;SET DMA ADDRESS
  204. BREAD    EQU    0024H            ;READ SELECTED SECTOR
  205. BWRITE    EQU    0027H            ;WRITE SELECTED SECTOR
  206. BLSTST    EQU    002AH            ;CHECK LIST DEVICE STATUS
  207. BSECTRN    EQU    002DH            ;SECTOR TRANSLATE ROUTINE
  208. BFMT    EQU    0030H            ;FORMAT
  209. BRDTRK    EQU    0033H            ;READ TRACK
  210. BWRTRK    EQU    0036H            ;WRITE TRACK
  211. BWPC    EQU    0039H            ;WRITE PROTECT CHECK
  212. BCBD    EQU    003CH            ;CLEAR BUFFERS FOR DRIVE
  213.  
  214. ;    BIOS WRITE TYPES
  215.  
  216. BWRNOR    EQU    0            ;NORMAL WRITE
  217. BWRDIR    EQU    1            ;WRITE TO A DIRECTORY SECTOR
  218. BRWUA1    EQU    2            ;WRITE TO 1ST SECTOR OF UNALLOC BLOCK
  219.  
  220. ;    FILE CONTROL BLOCK
  221.  
  222.     ORG    0
  223. FCBDN    RB    1            ;DISK NAME
  224. FCBFN    RB    8            ;FILE NAME
  225. FCBFNL    EQU    8            ;FILE NAME LENGTH
  226. FCBFT    RB    3            ;FILE TYPE
  227. FCBFTL    EQU    3            ;FILE TYPE LENGTH
  228. FCBRO    EQU    FCBFT+0            ;R/O FLAG
  229. FCBROF    EQU    10000000B        ; R/O FLAG VALUE
  230. FCBSYS    EQU    FCBFT+1            ;SYS FLAG
  231. FCBSYSF    EQU    10000000B        ; SYS FLAG VALUE
  232. FCBEX    RB    1            ;EXTENT
  233.     RB    1
  234. FCBRWF    RB    1            ;R/W FLAG
  235. FCBRWFF EQU    10000000B        ; R/W FLAG VALUE
  236. FCBRC    RB    1            ;RECORD COUNT
  237. FCBDM    RB    16            ;DISK ALLOCATION MAP
  238. FCBNR    RB    1            ;NEXT RECORD TO BE READ OR WRITTEN
  239. FCBLS    EQU    33            ;FCB LENGTH FOR SEQUENTIAL I/O
  240. FCBRR    RB    3            ;RANDOM RECORD POINTER
  241. FCBLR    EQU    36            ;FCB LENGTH FOR RANDOM I/O
  242.  
  243.  
  244.  
  245. ;**    CHARACTER I/O TABLE DEFINITIONS
  246. ;
  247.  
  248.     ORG    0
  249.  
  250. ;    TABLE
  251.  
  252. CIOTBL    RB    0
  253.  
  254. CIOBP    RB    1            ;BASE PORT
  255. CIOBR    RW    1            ;BAUD RATE
  256. CIOF1    RB    1            ;FLAG BYTE 1
  257. CIOF2    RB    1            ;FLAG BYTE 2
  258. CIOIM    RB    1            ;INPUT READY MASK
  259. CIOIPM    RB    1            ;INPUT READY POLARITY MASK
  260. CIOOM    RB    1            ;OUTPUT READY MASK
  261. CIOOPM    RB    1            ;OUTPUT READY POLARITY MASK
  262. CIOECNT    RB    1            ;# OF CHARACTERS BEFORE SENDING <ETX>
  263. CIOECTR    RB    1            ;CHARACTER COUNTER FOR SENDING <ETX>
  264. CIONCHR    RB    1            ;SEND NULLS AFTER THIS CHARACTER
  265. CIONCNT    RB    1            ;# OF NULLS TO SEND
  266. CIONCTR    RB    1            ;NULL COUNTER
  267. CIOVAL1    RB    1            ;DEVICE DEPENDANT VALUE 1
  268. CIOVAL2    RB    1            ;DEVICE DEPENDANT VALUE 2
  269. CIOVAL3    RB    1            ;DEVICE DEPENDANT VALUE 3
  270. CIOVAL4    RB    1            ;DEVICE DEPNEDANT VALUE 4
  271. CIOVAL5    RB    1            ;DEVICE DEPENDANT VALUE 5
  272. CIOVAL6    RB    1            ;DEVICE DEPENDANT VALUE 6
  273. CIOVAL7    RB    1            ;DEVICE DEPENDANT VALUE 7
  274. CIOVAL8    RB    1            ;DEVICE DEPENDANT VALUE 8
  275. CIOIN    RW    1            ;ADDRESS OF DEVICE INIT ROUTINE
  276. CIOIS    RW    1            ;ADDRESS OF INPUT INPUT STATUS ROUTINE
  277. CIOID    RW    1            ;ADDRESS OF INPUT DATA ROUTINE
  278. CIOOS    RW    1            ;ADDRESS OF INPUT OUTPUT STATUS ROUTINE
  279. CIOOD    RW    1            ;ADDRESS OF OUTPUT DATA ROUTINE
  280.  
  281.     IF    ASM86
  282. CIOTBLL    EQU    OFFSET $-OFFSET CIOTBL    ;LENGTH OF CIO TABLE
  283.     ENDIF
  284.     IF    NOT ASM86
  285. CIOTBLL    EQU    $-CIOTBL        ;LENGTH OF CIO TABLE
  286.     ENDIF
  287.  
  288. ;    FLAG BYTE 1
  289.  
  290. CIOSPI    EQU    00000001B        ;STRIP PARITY BIT ON INPUT
  291. CIOSPO    EQU    00000010B        ;STRIP PARITY BIT ON OUTPUT
  292. CIOMLI    EQU    00000100B        ;MAP LOWER CASE ON INPUT
  293. CIOMLO    EQU    00001000B        ;MAP LOWER CASE ON OUTPUT
  294. CIOEAH    EQU    00010000B        ;USE <ETX>/<ACK> HANDSHAKING
  295. CIODCH    EQU    00100000B        ;USE <DC1>/<DC3> HANDSHAKING
  296.  
  297. ;    FLAG BYTE 2
  298.  
  299. CIOW4A    EQU    CIOEAH            ;<ETX> SENT, WAITING FOR <ACK>
  300. CIOW4D    EQU    CIODCH            ;WAITING FOR <DC1>
  301.  
  302.  
  303.  
  304. ;**    DEFINITION OF LOCATIONS AT THE HEAD OF THE BIOS FOR CP/M-85
  305. ;
  306. ;  * * *   N O T E   * * *
  307. ;
  308. ;    IF THE BIOS IS ALTERED, THEN THIS FILE MUST ALSO BE UPDATED.
  309. ;
  310.  
  311. BVERSN    EQU    101            ;VERSION # FOR CURRENT BIOS
  312.                     ; USE THIS EQUATE IN USER PROGRAMS
  313.                     ;  THAT WISH TO KNOW VERSION #
  314.                     ;   THEY WERE ASSEMBLED FOR
  315. BREVSN    EQU    ' '            ;REVISION LETTER
  316.  
  317. BMO    EQU    03            ;DATE
  318. BDY    EQU    10
  319. BYR    EQU    83
  320.  
  321. NDRIVES    EQU    6            ;MAXIMUM NUMBER OF DRIVE TABLES
  322.  
  323. ;
  324.  
  325.     ORG    0042H            ;SKIP BIOS JUMP VECTOR CODE
  326.  
  327. BIOSVER    RB    1            ;BIOS VERSION
  328. DEFIOB    RB    1            ;DEFAULT I/O BYTE
  329.  
  330. MODE    RB    1            ;MODE FLAGS BYTE
  331.  
  332. BSIZE    RB    1            ;BIOS SIZE IN PAGES
  333. BEND    RW    1            ;ENDING ADDR OF BIOS + 1
  334. HECNT    RW    1            ;HARD ERROR COUNT (SINCE COLD BOOT)
  335. SECNT    RW    1            ;SOFT ERROR COUNT (SINCE COLD BOOT)
  336. NDISKS    RB    1            ;NUMBER OF DISK POSSIBLE IN THIS BIOS
  337.  
  338. ;    AUTO EXEC COMMAND BUFFERS
  339.  
  340. AUTOCBC    RB    41            ;COLD BOOT AUTO COMMAND
  341. AUTOWBC    RB    41            ;WARM BOOT AUTO COMMAND
  342.  
  343. ;  CHARACTER I/O TABLES
  344.  
  345. CRTTBL    RB    CIOTBLL            ;CRT: (KEYBOARD/DISPLAY)
  346. SERATBL    RB    CIOTBLL            ;SERIAL PORT A
  347. SERBTBL    RB    CIOTBLL            ;SERIAL PORT B
  348. PPRTTBL    RB    CIOTBLL            ;PARALLEL PRINTER PORT
  349. DUMMYTBL RB    CIOTBLL            ;DUMMY UNIT
  350.  
  351. ;    DISK PARAMETER ENTRY TABLES
  352.  
  353. DPEBASE    RB    0            ;START OF DISK PARAMETER ENTRY TABLES
  354.  
  355.  
  356.  
  357. ;**    6821 PERIPHERAL INTERFACE ADAPTER EQUATES
  358. ;
  359.  
  360. ;    REGISTER DISPLACEMENTS
  361.  
  362. PIADATA    EQU    0            ;PERIPHERAL DATA REGISTER A
  363. PIADDRA    EQU    0            ;DATA DIRECTION REGISTER A
  364. PIACTLA    EQU    1            ;CONTROL REGISTER A
  365. PIADATB    EQU    2            ;PERIPHERAL DATA REGISTER B
  366. PIADDRB    EQU    2            ;DATA DIRECTION REGISTER B
  367. PIACTLB    EQU    3            ;CONTROL REGISTER B
  368.  
  369. ;    CONTROL WORD FORMAT
  370.  
  371. PIAC1    EQU    00000011B    ;CONTROL OF CA1(CB1) INTERRUPT LINE
  372. PIAC10    EQU    00H        ; ACTIVE TRANSITION 1->0
  373.                 ;  IRQ PIN IS DISABLED
  374. PIAC11    EQU    01H        ; ACTIVE TRANSITION 1->0
  375.                 ;  IRQ PIN IS ENABLED
  376. PIAC12    EQU    02H        ; ACTIVE TRANSITION 0->1
  377.                 ;  IRQ PIN IS DISABLED
  378. PIAC13    EQU    03H        ; ACTIVE TRANSITION 0->1
  379.                 ;  IRQ PIN IS ENABLED
  380.  
  381. PIADDAC    EQU    00000100B    ;DATA DIRECTION ACCESS CONTROL BIT
  382.                 ; 0=DATA DIRECTION REG , 1=PERIPHERAL DATA REG
  383.  
  384. PIAC2    EQU    00111000B    ;CONTROL OF CA2(CB2)
  385.                 ; INPUT MODES
  386. PIAC20    EQU    00H        ;  ACTIVE TRANSITION 1->0
  387.                 ;   IRQ PIN IS DISABLED
  388. PIAC21    EQU    08H        ;  ACTIVE TRANSITION 1->0
  389.                 ;   IRQ PIN IS ENABLED
  390. PIAC22    EQU    10H        ;  ACTIVE TRANSITION 0->1
  391.                 ;   IRQ PIN IS DISABLED
  392. PIAC23    EQU    18H        ;  ACTIVE TRANSITION 0->1
  393.                 ;   IRQ PIN IS ENABLED
  394.                 ; OUTPUT MODES
  395. PIAC24    EQU    20H        ;  0 ON R(W) OPERATION , 1 ON ACTIVE CA1(CB1)
  396. PIAC25    EQU    28H        ;  0 ON R(W) OPERATION , 1 ON E AFTER DESELECT
  397. PIAC26    EQU    30H        ;  RESET
  398. PIAC27    EQU    38H        ;  SET
  399.  
  400.  
  401. PIAIRQ2    EQU    01000000B        ;IRQ FOR CA2(CB2)
  402. PIAIRQ1    EQU    10000000B        ;IRQ FOR CA1(CB1)
  403.  
  404.  
  405.  
  406. ;**    EP2DEF -- EQUATES FOR ENHANCED PROGRAMMABLE COMMUNICATION
  407. ;           INTERFACE CHIP 2661-2.
  408. ;
  409.  
  410. ;    PORT DISPLACEMENTS
  411.  
  412. EPDATA    EQU    0        ;DATA
  413. EPSTAT    EQU    1        ;STATUS
  414. EPSYN    EQU    1        ;SYN1/SYN2/DLE
  415. EPMODE    EQU    2        ;MODE
  416. EPCMD    EQU    3        ;COMMAND
  417.  
  418. ;    STATUS REGISTER
  419.  
  420. EPTXR    EQU    00000001B    ;TRANSMITTER READY
  421. EPRXR    EQU    00000010B    ;RECEIVER READY
  422. EPTXE    EQU    00000100B    ;TRANSMITTER EMPTY
  423. EPDSC    EQU    00000100B    ;DATA SET CHANGE
  424. EPPE    EQU    00001000B    ;PARITY ERROR
  425. EPOE    EQU    00010000B    ;OVERRUN ERROR
  426. EPFE    EQU    00100000B    ;FRAME ERROR
  427. EPSD    EQU    00100000B    ;SYNC DETECTED
  428. EPDCD    EQU    01000000B    ;DATA CARRIER DETECT
  429. EPDSR    EQU    10000000B    ;DATA SET READY
  430.  
  431. ;    MODE REGISTER 1
  432.  
  433. EPMBRF    EQU    00000011B    ;MODE AND BAUDRATE FACTOR
  434. EPS1X    EQU    000H        ;  SYNCHRONOUS 1X RATE
  435. EPA1X    EQU    001H        ;  ASYNCHRONOUS 1X RATE
  436. EPA16X    EQU    002H        ;  ASYNCHRONOUS 16X RATE
  437. EPA64X    EQU    003H        ;  ASYNCHRONOUS 64X RATE
  438.  
  439. EPCL    EQU    00001100B    ;CHARACTER LENGTH
  440. EPCL5    EQU    000H        ;  LENGTH 5
  441. EPCL6    EQU    004H        ;  LENGTH 6
  442. EPCL7    EQU    008H        ;  LENGTH 7
  443. EPCL8    EQU    00CH        ;  LENGTH 8
  444.  
  445. EPPC    EQU    00010000B    ;PARITY CONTROL (0=DISABLED , 1=ENABLED)
  446. EPPT    EQU    00100000B    ;PARITY TYPE (0=ODD , 1=EVEN)
  447.  
  448. EPASBL    EQU    11000000B    ;ASYNCHRONOUS STOP BIT LENGTH
  449. EPSB1    EQU    040H        ;  LENGTH 1
  450. EPSB15    EQU    080H        ;  LENGTH 1.5
  451. EPSB2    EQU    0C0H        ;  LENGTH 2
  452.  
  453. EPSTC    EQU    01000000B    ;SYNCHRONOUS TRANSPARENCY CONTROL
  454.                 ; (0=NORMAL , 1=TRANSPARENT)
  455. EPNSC    EQU    10000000B    ;NUMBER OF SYNC CHARACTERS
  456.                 ; (0=DOUBLE , 1=SINGLE)
  457.  
  458. ;    MODE REGISTER 2
  459.  
  460. EPBRS    EQU    00001111B    ;BAUD RATE SELECTION
  461. EPMR2U    EQU    11110000B    ;SEE TEXT
  462.  
  463. ;    COMMAND REGISTER
  464.  
  465. EPTXEN    EQU    00000001B    ;TRANSMITTER ENABLE
  466. EPDTR    EQU    00000010B    ;DATA TERMINAL READY
  467. EPRXEN    EQU    00000100B    ;RECEIVER ENABLE
  468. EPSBRK    EQU    00001000B    ;SEND BREAK (ASYNC)
  469. EPSDLE    EQU    00001000B    ;SEND DLE (SYNC)
  470. EPRESE    EQU    00010000B    ;RESET STATUS ERRORS
  471. EPRTS    EQU    00100000B    ;REQUEST TO SEND
  472.  
  473. EPOM    EQU    11000000B    ;OPERATING MODE
  474. EPNORM    EQU    000H        ;  NORMAL
  475. EPOM1    EQU    040H        ;  MODE 1
  476. EPOMLL    EQU    080H        ;  LOCAL LOOP BACK
  477. EPOMRL    EQU    0C0H        ;  REMOTE LOOP BACK
  478.  
  479. ;    BAUDRATE SELECTION VALUES
  480.  
  481. EPB455    EQU    0        ;45.5
  482. EPB050    EQU    1        ;50
  483. EPB075    EQU    2        ;75
  484. EPB110    EQU    3        ;110
  485. EPB134    EQU    4        ;134.5
  486. EPB150    EQU    5        ;150
  487. EPB300    EQU    6        ;300
  488. EPB600    EQU    7        ;600
  489. EPB120    EQU    8        ;1200
  490. EPB180    EQU    9        ;1800
  491. EPB200    EQU    10        ;2000
  492. EPB240    EQU    11        ;2400
  493. EPB480    EQU    12        ;4800
  494. EPB960    EQU    13        ;9600
  495. EPB192    EQU    14        ;19200
  496. EPB384    EQU    15        ;38400
  497.  
  498.  
  499.  
  500. ;**    Z207 EQUATES
  501. ;
  502.  
  503. ;    PORT ASSIGNMENTS
  504.  
  505. FDBASE    EQU    0B0H        ;BASE PORT ADDRESS
  506. FDCMD    EQU    FDBASE        ;1797 COMMAND REGISTER
  507. FDSTA    EQU    FDBASE        ;     STATUS REGISTER
  508. FDTRK    EQU    FDBASE+1    ;     TRACK REGISTER
  509. FDSEC    EQU    FDBASE+2    ;     SECTOR REGISTER
  510. FDDAT    EQU    FDBASE+3    ;     DATA REGISTER
  511. FDCON    EQU    FDBASE+4    ;DISK CONTROL PORT
  512. FDAS    EQU    FDBASE+5    ;AUX STATUS PORT
  513.  
  514. ;    COMMANDS
  515.  
  516. FDCRST    EQU    000H        ;RESTORE
  517. FDCSEK    EQU    010H        ;SEEK
  518. FDCSTP    EQU    020H        ;STEP
  519. FDCSTI    EQU    040H        ;STEP IN
  520. FDCSTO    EQU    060H        ;STEP OUT
  521. FDCRDS    EQU    080H        ;READ SECTOR
  522. FDCWRS    EQU    0A0H        ;WRITE SECTOR
  523. FDCRDA    EQU    0C0H        ;READ ADDRESS
  524. FDCRDT    EQU    0E0H        ;READ TRACK
  525. FDCWRT    EQU    0F0H        ;WRITE TRACK
  526. FDCFI    EQU    0D0H        ;FORCE INTERRUPT
  527.  
  528. ;    TYPE 1 COMMAND FLAGS
  529.  
  530. FDFUTR    EQU    00010000B    ;UPDATE TRACK REGISTER
  531. FDFHLB    EQU    00001000B    ;HEAD LOAD AT BEGINNING
  532. FDFVRF    EQU    00000100B    ;VERIFY FLAGS
  533.  
  534. ;    TYPE 1 COMMAND STEP RATE FLAGS
  535.  
  536. FDFSRM    EQU    00000011B    ;STEP RATE MASK
  537. FDFS6    EQU    00000000B    ;STEP RATE  6(3) MS
  538. FDFS12    EQU    00000001B    ;          12(6)
  539. FDFS20    EQU    00000010B    ;          20(10)
  540. FDFS30    EQU    00000011B    ;          30(15)
  541.  
  542. ;    TYPE 2&3 COMMAND FLAGS
  543.  
  544. FDFMRF    EQU    00010000B    ;MULTIPLE RECORD FLAG
  545. FDFSLF    EQU    00001000B    ;SECTOR LENGTH FLAG
  546. FDFDLF    EQU    00000100B    ;30 MS DELAY
  547. FDFSS1    EQU    00000010B    ;SELECT SIDE 1
  548. FDFDDM    EQU    00000001B    ;DELETED DATA MARK
  549.  
  550. ;    TYPE 4 COMMAND FLAGS
  551.  
  552. FDFINI    EQU    00000000B    ;TERMINATE WITH NO INTERRUPT
  553. FDFII0    EQU    00000001B    ;NOT READY TO READY TRANSITION
  554. FDFII1    EQU    00000010B    ;READY TO NOT READY TRANSITION
  555. FDFII2    EQU    00000100B    ;INDEX PULSE
  556. FDFII3    EQU    00001000B    ;IMMEDIATE INTERRUPT
  557.  
  558. ;    STATUS FLAGS
  559.  
  560. FDSNRD    EQU    10000000B    ;NOT READY
  561. FDSWPV    EQU    01000000B    ;WRITE PROTECT VIOLATION
  562. FDSHLD    EQU    00100000B    ;HEAD IS LOADED
  563. FDSRTE    EQU    00100000B    ;RECORD TYPE
  564. FDSWTF    EQU    00100000B    ;WRITE FAULT
  565. FDSSEK    EQU    00010000B    ;SEEK ERROR
  566. FDSRNF    EQU    00010000B    ;RECORD NOT FOUND
  567. FDSCRC    EQU    00001000B    ;CRC ERROR
  568. FDSTK0    EQU    00000100B    ;FOUND TRACK 0
  569. FDSLDT    EQU    00000100B    ;LOST DATA
  570. FDSIND    EQU    00000010B    ;INDEX HOLE
  571. FDSDRQ    EQU    00000010B    ;DRQ
  572. FDSBSY    EQU    00000001B    ;BUSY
  573.  
  574. ;    INFO RETURNED BY A READ ADDRESS COMMAND
  575.  
  576. FDRATRK    EQU    0        ;TRACK
  577. FDRASID    EQU    1        ;SIDE
  578. FDRASEC    EQU    2        ;SECTOR
  579. FDRASL    EQU    3        ;SECTOR LENGTH
  580. FDRACRC    EQU    4        ;2 BYTE CRC
  581. FDRAL    EQU    6        ;LENGTH OF READ ADDRESS INFO
  582.  
  583. ;    DISK HEADER SECTOR LENGTH VALUES
  584.  
  585. FDSL128    EQU    0        ;SECTOR LENGTH 128
  586. FDSL256    EQU    1        ;SECTOR LENGTH 256
  587. FDSL512    EQU    2        ;SECTOR LENGTH 512
  588. FDSL1K    EQU    3        ;SECTOR LENGTH 1024
  589.  
  590. ;    CONTROL REGISTER FLAGS
  591.  
  592. CONDS    EQU    00000011B    ;DRIVE SELECT BITS
  593. CONDS8    EQU    00000100B    ;0=5 1/4" , 1=8"
  594. CONDSEN    EQU    00001000B    ;DRIVE SELECT ENABLE
  595. CONPC    EQU    00010000B    ;WRITE PRE-COMPENSATION
  596.                 ; 5 1/4"  0=YES , 1=NO
  597.                 ; 8"  0=ALL TRACKS , 1=TRACKS 44-76
  598. CON5FS    EQU    00100000B    ;5 1/4" FAST STEP
  599. CONWE    EQU    01000000B    ;ENABLE WAIT FOR DRQ OR IRQ
  600. CONSD    EQU    10000000B    ;ENABLE SINGLE DENSITY
  601.  
  602. ;    AUXILARY STATUS REGISTER FLAGS
  603.  
  604. ASIRQ    EQU    00000001B    ;1797 INTERRUPT REQUEST
  605. ASMO    EQU    00000010B    ;5 1/4" MOTOR ON
  606. AS96T    EQU    00001000B    ;5 1/4" DRIVES ARE 96TPI
  607. AS5PC    EQU    00010000B    ;5 1/4" DRIVES NEED WRITE PRE-COMPENSATION
  608. AS2S    EQU    01000000B    ;SELECTED 8" DRIVE CONTAINS 2 SIDED MEDIA
  609. ASDRQ    EQU    10000000B    ;1797 DRQ
  610.  
  611. ;    MISCELLANEOUS VALUES
  612.  
  613. NTRKS37    EQU    40        ;# TRACKS SINGLE DENSITY 5 1/4" (48 TPI)
  614. NTRKD37    EQU    80        ;# TRACKS DOUBLE DENSITY 5 1/4" (96 TPI)
  615. NTRK837    EQU    77        ;NUMBER OF TRACKS 8"
  616. NSBT37    EQU    52        ;NUMBER OF CP/M RECORDS TO BE LOADED AT BOOT
  617.  
  618.  
  619.  
  620. ;**    Z217 EQUATES
  621. ;
  622.  
  623. WINSPT    EQU    18            ;# PHYSICAL SECTORS PER TRACK
  624. WICSZ    EQU    512            ;CELL SIZE USED
  625.  
  626. ;*    PORT ASSIGNMENTS
  627.  
  628. WIPBASE    EQU    0AEH            ;BASE PORT
  629. WIPCMD    EQU    WIPBASE+0        ; COMMAND
  630. WIPSTAT    EQU    WIPBASE+0        ; HARDWARE STATUS
  631. WIPRES    EQU    WIPBASE+1        ; RESET
  632. WIPINTA    EQU    WIPBASE+1        ; INTERRUPT ACKNOWLEDGE/HARDWARE STATUS
  633.  
  634. ;*    HARDWARE STATUS REGISTER
  635.  
  636. WISINT    EQU    10000000B        ;INTERRUPT PENDING
  637. WISBUSY    EQU    01000000B        ;BUSY
  638. WISBM    EQU    00100000B        ;BURST MODE
  639. WISTMA    EQU    00010000B        ;TMA IN PROGRESS
  640. WISERR    EQU    00001000B        ;ERROR
  641. WISIERR    EQU    00000100B        ;IMMEDIATE MODE ERROR
  642. WISPAUS    EQU    00000010B        ;PAUSED
  643. WISDONE    EQU    00000001B        ;DONE
  644.  
  645. ;*    DIRECT MODE COMMANDS
  646.  
  647. WISETUP    EQU    08H            ;SETUP
  648. WIEXEC    EQU    10H            ;EXECUTE
  649. WIPAUS    EQU    18H            ;PAUSE
  650. WICONT    EQU    20H            ;CONTINUE
  651.  
  652. ;*    CONTROL BLOCK COMMANDS
  653.  
  654. WIRECAL    EQU    00H            ;RECALIBRATE
  655. WISTAT    EQU    01H            ;STATUS
  656. WIWRL    EQU    10H            ;WRITE LOGICAL
  657. WIRDL    EQU    11H            ;READ LOGICAL
  658. WISEKL    EQU    13H            ;SEEK LOGICAL
  659. WIFMTD    EQU    20H            ;FORMAT DRIVE
  660. WIFMTT    EQU    21H            ;FORMAT TRACK
  661. WISDP    EQU    22H            ;SET DRIVE PARAMETERS
  662. WIWRA    EQU    30H            ;WRITE ABSOLUTE
  663. WIRDA    EQU    31H            ;READ ABSOLUTE
  664. WISEKA    EQU    33H            ;SEEK ABSOLUTE
  665.  
  666. ;*    FORMAT OF COMMANDS
  667.  
  668. ;        TYPE 0 & 1
  669.  
  670.     ORG    0
  671. WI01BLK    RB    0
  672. WI01OP    RB    1            ;COMMAND OP CODE
  673. WI01DHS    RB    1            ;BIT 7-5 -- DRIVE SELECT
  674.                     ;    4-0 -- HIGH BYTE OF LOG SECTOR #
  675. WI01D    EQU    11100000B        ;  DRIVE SELECT MASK
  676. WI01HS    EQU    00011111B        ;  HIGH BYTE OF LOG SECTOR # MASK
  677. WI01MS    RB    1            ;MIDDLE BYTE OF LOGICAL SECTOR #
  678. WI01LS    RB    1            ;LOW BYTE OF LOGICAL SECTOR #
  679. WI01SC    RB    1            ;SECTOR COUNT
  680. WI01HT    RB    1            ;HIGH BYTE OF DATA TMA ADDRESS
  681. WI01MT    RB    1            ;MIDDLE BYTE OF DATA TMA ADDRESS
  682. WI01LT    RB    1            ;LOW BYTE OF DATA TMA ADDRESS
  683. WI01HN    RB    1            ;HIGH BYTE OF NEXT COMMAND ADDRESS
  684. WI01MN    RB    1            ;MIDDLE BYTE OF NEXT COMMAND ADDRESS
  685. WI01LN    RB    1            ;LOW BYTE OF NEXT COMMAND ADDRESS
  686. WI01FLG    RB    1            ;FLAGS
  687. WI01EEC    RB    1            ;ERROR CODE
  688. WI01EDH    RB    1            ;BIT 7-5 -- DRIVE SELECT
  689.                     ;    4-0 -- HIGHT BYTE OF LOG SECTOR #
  690. WI01ED    EQU    11100000B        ;  ERROR DRIVE SELECT MASK
  691. WI01EHS    EQU    00011111B        ;  ERROR HIGH BYTE OF LOG SECTOR # MASK
  692. WI01EMS    RB    1            ;ERROR MIDDLE BYTE OF LOGICAL SECTOR #
  693. WI01ELS    RB    1            ;ERROR LOW BYTE OF LOGICAL SECTOR #
  694.     IF    ASM86
  695. WI01BKL    EQU    OFFSET $ - OFFSET WI01BLK
  696.     ENDIF
  697.     IF    NOT ASM86
  698. WI01BKL    EQU    $-WI01BLK
  699.     ENDIF
  700.     IF    WI01BKL NE 16
  701. %:    TYPE 0 & 1 COMMAND BLOCK IS WRONG LENGTH
  702.     ENDIF
  703.  
  704. ;        TYPE 2
  705.  
  706.     ORG    0
  707. WI2BLK    RB    0
  708. WI2OP    RB    1            ;COMMAND OP CODE
  709. WI2DH    RB    1            ;BIT 7-5 -- DRIVE SELECT
  710.                     ;    2-0 -- (MAX) HEAD #
  711. WI2D    EQU    11100000B        ;  DRIVE SELECT MASK
  712. WI2H    EQU    00000111B        ;  HEAD # MASK
  713. WI2HMC    RB    1            ;HIGH BYTE OF MAX CYLINDER #
  714. WI2LMC    RB    1            ;LOW BYTE OF MAX CYLINDER #
  715. WI2HRWC    RB    1            ;HIGH BYTE OF RWC CYLINDER #
  716. WI2LRWC    RB    1            ;LOW BYTE OF RWC CYLINDER #
  717. WI2HPC    RB    1            ;HIGH BYTE OF PRE-COMP CYLINDER #
  718. WI2LPC    RB    1            ;LOW BYTE OF PRE-COMP CYLINDER #
  719. WI2SR    RB    1            ;STEP RATE (LSB = 20uS)
  720. WI2ECC    RB    1            ;ECC SPAN
  721. WI2CSIF    RB    1            ;BIT 6   -- CELL SIZE
  722.                     ;    4-0 -- INTERLEAVE FACTOR
  723. WI2CS    EQU    01000000B        ;  CELL SIZE MASK
  724. WI2CS5    EQU    00000000B        ;    CELL SIZE =  512 BYTES/LOG SECTOR
  725. WI2CS1K    EQU    01000000B        ;    CELL SIZE = 1024 BYTES/LOG SECTOR
  726. WI2IF    EQU    00011111B        ;  INTERLEAVE FACTOR MASK
  727. WI2FC    RB    1            ;FILL CHARACTER
  728. WI2EEC    RB    1            ;ERROR CODE
  729. WI2EHS    RB    1            ;BIT 7-5 -- ERROR HEAD #
  730.                     ;    4-0 -- ERROR SECTOR #
  731. WI2EH    EQU    11100000B        ;  ERROR HEAD # MASK
  732. WI2ES    EQU    00011111B        ;  ERROR SECTOR # MASK
  733. WI2EHC    RB    1            ;ERROR HIGH BYTE OF CYLINDER #
  734. WI2ELC    RB    1            ;ERROR LOW BYTE OF CYLINDER #
  735.     IF    ASM86
  736. WI2BLKL    EQU    OFFSET $ - OFFSET WI2BLK
  737.     ENDIF
  738.     IF    NOT ASM86
  739. WI2BLKL EQU    $-WI2BLK
  740.     ENDIF
  741.     IF    WI2BLKL NE 16
  742. %:    TYPE 2 COMMAND BLOCK IS WRONG LENGTH
  743.     ENDIF
  744.  
  745. ;        TYPE 3
  746.  
  747.     ORG    0
  748. WI3BLK    RB    0
  749. WI3OP    RB    1            ;COMMAND OP CODE
  750. WI3DH    RB    1            ;BIT 7-5 -- DRIVE SELECT
  751.                     ;    2-0 -- HEAD #
  752. WI3D    EQU    11100000B        ;  DRIVE SELECT MASK
  753. WI3H    EQU    00000111B        ;  HEAD # MASK
  754. WI3HC    RB    1            ;HIGH BYTE OF CYLINDER #
  755. WI3LC    RB    1            ;LOW BYTE OF CYLINDER #
  756. WI3S    RB    1            ;SECTOR #
  757. WI3HT    RB    1            ;HIGH BYTE OF DATA TMA ADDRESS
  758. WI3MT    RB    1            ;MIDDLE BYTE OF DATA TMA ADDRESS
  759. WI3LT    RB    1            ;LOW BYTE OF DATA TMA ADDRESS
  760. WI3HN    RB    1            ;HIGH BYTE OF NEXT COMMAND ADDRESS
  761. WI3MN    RB    1            ;MIDDLE BYTE OF NEXT COMMAND ADDRESS
  762. WI3LN    RB    1            ;LOW BYTE OF NEXT COMMAND ADDRESS
  763. WI3FLG    RB    1            ;FLAGS
  764. WI3EEC    RB    1            ;ERROR CODE
  765. WI3EHS    RB    1            ;BIT 7-5 -- ERROR HEAD #
  766.                     ;    4-0 -- ERROR SECTOR #
  767. WI3EH    EQU    11100000B        ;  ERROR HEAD # MASK
  768. WI3ES    EQU    00011111B        ;  ERROR SECTOR # MASK
  769. WI3EHC    RB    1            ;ERROR HIGH BYTE OF CYLINDER #
  770. WI3ELC    RB    1            ;ERROR LOW BYTE OF CYLINDER #
  771.     IF    ASM86
  772. WI3BLKL    EQU    OFFSET $ - OFFSET WI3BLK
  773.     ENDIF
  774.     IF    NOT ASM86
  775. WI3BLKL    EQU    $-WI3BLK
  776.     ENDIF
  777.     IF    WI3BLKL NE 16
  778. %:    TYPE 3 COMMAND BLOCK IS WRONG LENGTH
  779.     ENDIF
  780.  
  781. ;        COMMAND BLOCK FLAG BYTE
  782.  
  783. WIFINTE    EQU    10000000B        ;INTERRUPTS ENABLED
  784. WIFBM    EQU    01000000B        ;USE BURST MODE TMA
  785. WIFIPCC    EQU    00100000B        ;IGNORE PAUSE AND CONTINUE COMMANDS
  786. WIFIDR    EQU    00000100B        ;DISABLE RETRIES
  787. WIFDECC    EQU    00000010B        ;DISABLE ECC
  788. WIFCHN    EQU    00000001B        ;CHAIN NEXT COMMAND IMMEDIATELY
  789.  
  790. ;*    FORMAT OF STATUS RETURNED BY 01 COMMAND
  791.  
  792.     ORG    0
  793. WISBLK    RB    0
  794. WISFLG    RB    1            ;FLAG BYTE
  795. WISDR    EQU    00000100B        ;  BIT 2 -- DRIVE READY
  796. WISACC    EQU    00000010B        ;      1 -- ACCESSED
  797. WISSC    EQU    00000001B        ;      0 -- SEEK COMPLETE
  798. WISHMC    RB    1            ;HIGH BYTE OF MAX CYLINDER #
  799. WISLMC    RB    1            ;LOW BYTE OF MAX CYLINDER #
  800. WISHRWC    RB    1            ;HIGH BYTE OF RWC CYLINDER #
  801. WISLRWC    RB    1            ;LOW BYTE OF RWC CYLINDER #
  802. WISHPC    RB    1            ;HIGH BYTE OF PRE-COMP CYLINDER #
  803. WISLPC    RB    1            ;LOW BYTE OF PRE-COMP CYLINDER #
  804. WISHCC    RB    1            ;HIGH BYTE OF CURRENT CYLINDER #
  805. WISLCC    RB    1            ;LOW BYTE OF CURRENT CYLINDER #
  806. WISSR    RB    1            ;STEP RATE (LSB = 20uS)
  807.     RB    1            ;RESERVED
  808. WISIF    RB    1            ;INTERLEAVE FACTOR
  809. WISCS    RB    1            ;CELL SIZE
  810. WISCS5    EQU    1            ;  =  512 BYTES/LOG SECTOR
  811. WISCS1K    EQU    2            ;  = 1024 BYTES/LOG SECTOR
  812. WISMH    RB    1            ;MAX HEAD #
  813. WISFC    RB    1            ;FILL CHARACTER
  814.     RB    1            ;RESERVED
  815.     IF    ASM86
  816. WISBLKL    EQU    OFFSET $ - OFFSET WISBLK
  817.     ENDIF
  818.     IF    NOT ASM86
  819. WISBLKL    EQU    $-WISBLK
  820.     ENDIF
  821.     IF    WISBLKL NE 16
  822. %:    STATUS BLOCK IS WRONG LENGTH
  823.     ENDIF
  824.  
  825. ;*    ERROR CODES
  826.  
  827. WIENE    EQU    00H            ;NO ERROR
  828. WIEDNR    EQU    01H            ;DRIVE NOT READY
  829. WIENSC    EQU    02H            ;NO SEEK COMPLETE
  830. WIENT0    EQU    03H            ;NO TRACK 0
  831. WIENI    EQU    04H            ;NO INDEX
  832. WIENDS    EQU    05H            ;NO DRIVE SELECT
  833. WIEHNF    EQU    10H            ;HEADER ADDRESS MARK NOT FOUND
  834. WIESEK    EQU    11H            ;SEEK ERROR (BAD CYLINDER # IN HEADER)
  835. WIESNF    EQU    12H            ;SECTOR NOT FOUND
  836. WIEECCH    EQU    13H            ;ECC ERROR IN HEADER
  837. WIEDNF    EQU    14H            ;DATA ADDRESS MARK NOT FOUND
  838. WIENECC    EQU    15H            ;NONCORRECTABLE ECC ERROR IN DATA FIELD
  839. WIEECC    EQU    16H            ;CORRECTABLE ECC ERROR IN DATA FIELD
  840. WIEWF    EQU    17H            ;WRITE FAULT
  841. WIEIOP    EQU    20H            ;ILLEGAL OP CODE
  842. WIEIDA    EQU    21H            ;ILLEGAL DISK ADDRESS
  843. WIEFMTP    EQU    22H            ;FORMAT PROTECTED
  844. WIEWRP    EQU    23H            ;WRITE PROTECTED
  845. WIEMISC    EQU    30H            ;MISCELLANEOUS ERROR
  846. WIEDIAG    EQU    40H            ;ERROR DURING DIAGNOSTIC
  847. WIEPNA    EQU    80H            ;PARTION NOT ASSIGNED
  848. WIESNWP    EQU    81H            ;SECTOR NOT WITHIN PARTITION
  849.  
  850. ;*    CP/M RELATED VALUES
  851.  
  852. WIRPS    EQU    WICSZ/128        ;CP/M RECORDS PER SECTOR
  853. WIRPT    EQU    WIRPS*WINSPT        ;CP/M RECORDS PER TRACK
  854. WINST    EQU    1            ;# OF SYSTEM TRACKS
  855. WINSYS    EQU    WINST*WINSPT        ;# SECTORS IN SYSTEM TRACK(S)
  856.  
  857. WIMIN    EQU    1024/WICSZ*64+WINSYS    ;MINIMUM # USEABLE SECTORS
  858. WIMAX    EQU    1024/WICSZ*8*1024+WINSYS ;MAX # USEABLE SECTORS
  859.  
  860.  
  861.  
  862. ;**    DISK PARAMETER TABLE EQUATES
  863. ;
  864.  
  865. ;    DISK PARAMETER ENTRY DESCRIPTION
  866.  
  867.     ORG    0
  868. DPEXLT    RW    1        ;SECTOR TRANSLATE TABLE ADDRESS
  869.     RW    3
  870. DPEDIRB    RW    1        ;DIRECTORY BUFFER ADDRESS
  871. DPEDPB    RW    1        ;DISK PARAMETER BLOCK ADDRESS
  872. DPECSV    RW    1        ;CHECKSUM VECTOR ADDRESS
  873. DPEALV    RW    1        ;ALLOCATION VECTOR ADDRESS
  874. DPEHTH    RB    8        ;HEATH EXTENSIONS
  875. DPEL    EQU    24        ;LENGTH OF DISK PARAMETER ENTRY
  876.  
  877. ;    HEATH EXTENSIONS
  878.  
  879. DPEFLAG    EQU    DPEHTH+0    ;FLAGS
  880. DPETYPE    EQU    11100000B    ;BIT 7-5 = DEVICE TYPE
  881. DPENE    EQU    00000000B    ; NON-EXISTENT
  882. DPEZ207    EQU    00100000B    ; Z207
  883. DPEZ217    EQU    01000000B    ; Z217
  884. DPE48RO    EQU    00010000B    ;BIT 4 -- FOR Z207
  885.                 ;  48 TPI MEDIA IN 96 TPI DRIVE (R/O)
  886. DPE96T    EQU    00001000B    ;BIT 3 -- 0=48 TPI DRIVE  1=96 TPI DRIVE
  887. DPEASGN    EQU    00001000B    ;BIT 3 -- FOR Z217 WINCHESTER DISK
  888.                 ;         0=UNASSIGNED A PARTITION
  889.                 ;         1=ASSIGNED A PARTITION
  890. DPET0SD    EQU    00000100B    ;BIT 2 -- 1=TRACK 0 IS SINGLE DENSITY
  891. DPEDD    EQU    00000010B    ;BIT 1 -- 0=SINGLE DENSITY  1=DOUBLE
  892. DPELSIO    EQU    00000010B    ;BIT 1 -- Z217 LOGICAL SECTOR I/O
  893. DPE2S    EQU    00000001B    ;BIT 0 -- 0=SINGLE SIDED  1=DOUBLE
  894. DPEPRIM    EQU    00000001B    ;BIT 0 -- Z217 PRIMARY DPE FOR UNIT
  895.  
  896. DPEUNIT    EQU    DPEHTH+1    ;UNIT SELECT VALUE
  897. DPERPS    EQU    DPEHTH+2    ;CP/M RECORDS PER PHYSICAL SECTOR
  898. DPERPAB    EQU    DPEHTH+3    ;CP/M RECORDS PER ALLOCATION BLOCK
  899. DPETRK    EQU    DPEHTH+4    ;TRACK COUNTER
  900. DPEUNK    EQU    10000000B    ; TRACK POSITION UNKNOWN
  901. DPELPB    EQU    DPEHTH+4    ;Z217 LOWER PARTITION BOUNDARY (LOG SECTOR #)
  902. DPESEK    EQU    DPEHTH+5    ;MOTOR SPEED AND SEEK SPEED
  903.                 ;BIT 3-0 = SEEK SPEED VALUE
  904. DPEFS    EQU    01000000B    ;BIT 6 = FAST STEP FOR Z207
  905. DPEMO    EQU    10000000B    ;BIT 7 = MOTOR UP TO SPEED FLAG
  906.                 ;  0=1 SEC  1=250 MSEC
  907. DPEUPB    EQU    DPEHTH+6    ;Z217 UPPER PARTITION BOUNDARY + 1
  908. DPEFLG2    EQU    DPEHTH+6    ;2ND FLAG BYTE
  909. DPEHLS    EQU    00000100B    ;BIT 2  DRIVE HAS HEAD LOAD SELONOID
  910. DPEIMG    EQU    00000010B    ;BIT 1  IMAGINARY DRIVE
  911. DPE96TM    EQU    00000001B    ;BIT 0  0=48 TPI MEDIA  1=96 TPI MEDIA
  912. DPELUN    EQU    DPEHTH+7    ;LAST LOGICAL UNIT MOUNTED
  913. DPELOG    EQU    11110000B    ; CP/M LOGICAL DRIVE NAME FOR THIS ENTRY
  914. DPEREAL    EQU    00001111B    ; FOR IMAGINARY DRIVE, LOGICAL DRIVE NAME
  915.                 ;  FOR CORRESPONDING REAL DRIVE
  916. DPEMNT    EQU    00001111B    ; FOR REAL DRIVE, LOGICAL DRIVE NAME FOR
  917.                 ;  CURRENLY MOUNTED DISK
  918.  
  919. DPEHL    EQU    8        ;LENGTH OF HEATH EXTENSION
  920.  
  921. ;    DISK PARAMETER BLOCK
  922.  
  923.     ORG    0
  924. DPBSPT    RW    1        ;SECTORS PER TRACK
  925. DPBBSH    RB    1        ;BLOCK SHIFT FACTOR
  926. DPBBLM    RB    1        ;BLOCK MASK
  927. DPBEXM    RB    1        ;EXTENT MASK
  928. DPBDSM    RW    1        ;TOTAL # OF BLOCKS - 1
  929. DPBDRM    RW    1        ;# OF DIRECTORY ENTRIES - 1
  930. DPBAL0    RB    1        ;INITIAL AL0 VALUE
  931. DPBAL1    RB    1        ;INITIAL AL1 VALUE
  932. DPBCKS    RW    1        ;SIZE OF DIRECTORY CHECK VECTOR
  933. DPBOFF    RW    1        ;NUMBER OF SYSTEM TRACKS
  934. DPBL    EQU    15        ;LENGTH OF DISK PARAMETER BLOCK
  935.  
  936.  
  937.  
  938. ;**    Z-MACHINE PORT ASSIGNMENTS
  939. ;
  940.  
  941.  
  942. ZVIDEO    EQU    0D8H        ;VIDEO 68A21
  943. ZCRTC    EQU    0DCH        ;VIDEO 6845 CRTC
  944. ZLPEN    EQU    0DEH        ;LIGHT PEN COUNTER
  945. ZGDP    EQU    0E0H        ;GENERAL DATA PORT (68A21)
  946. ZTIMER    EQU    0E4H        ;8253 TIMER
  947. ZSERA    EQU    0E8H        ;SERIAL A
  948. ZSERB    EQU    0ECH        ;SERIAL B
  949. Z8259AS    EQU    0F0H        ;8259A SLAVE
  950. Z8259AM    EQU    0F2H        ;8259A MASTER
  951. ZKEYBD    EQU    0F4H        ;KEYBOARD
  952. ZTSTAT    EQU    0FBH        ;TIMER STATUS
  953. ZMCL    EQU    0FCH        ;MEMORY CONTROL LATCH
  954. ZHAL    EQU    0FDH        ;HI-ADDRESS LATCH
  955. ZPSP    EQU    0FEH        ;PROCESSOR SWAP PORT
  956. ZDIPSW    EQU    0FFH        ;DIP SWITCHES
  957.  
  958. ;    MEMORY CONTROL LATCH
  959.  
  960. ZMCLMS    EQU    00000011B    ;MAP SELECT MASK
  961. ZMS0    EQU    000H        ; MAP SELECT 0
  962. ZMS1    EQU    001H        ; MAP SELECT 1
  963. ZMS2    EQU    002H        ; MAP SELECT 2
  964. ZMS3    EQU    003H        ; MAP SELECT 3
  965.  
  966. ZMCLRM    EQU    00001100B    ;MONITOR ROM MAPPING
  967. ZRM0    EQU    000H        ; POWER UP MODE - ROM EVERYWHERE ON READS
  968. ZRM1    EQU    004H        ; ROM AT THE TOP 8K OF EVERY 64K
  969. ZRM2    EQU    008H        ; ROM AT THE TOP 8K OF THE 8088'S ADDR SPACE
  970. ZRM3    EQU    00CH        ; DISABLE ROM
  971.  
  972. ZMCLP    EQU    00110000B    ;PARITY HANDLING
  973. ZMCLPZ    EQU    00010000B    ; 0=SET PARITY TO THE ZERO STATE
  974. ZMCLPK    EQU    00100000B    ; 0=DISABLE PARITY CHECKING CIRCUITRY
  975.  
  976. ;    HI-ADDRESS LATCH
  977.  
  978. ZHAL85    EQU    11111111B    ;8085 MASK
  979. ZHAL88    EQU    00001111B    ;8088 MASK
  980.  
  981. ;    PROCESSOR SWAP PORT
  982.  
  983. ZPSPPS    EQU    10000000B    ;PROCESSOR SELECT (0=8085 , 1=8088)
  984. ZPSPPS5    EQU    000H        ; SELECT 8085
  985. ZPSPPS8    EQU    080H        ; SELECT 8088
  986. ZPSPGIS    EQU    00000010B    ;GENERATE INTERRUPT ON SWAPPING
  987. ZPSPI88    EQU    00000001B    ;8088 PROCESSES ALL INTERRUPTS
  988.  
  989.  
  990.  
  991.  
  992. ;**    Z-100 GENERAL DATA PORT DEFINITIONS
  993. ;
  994. ;    HARDWARE IS A 6821
  995. ;
  996.  
  997. ;    PORT ASSIGNMENTS
  998.  
  999. GDPDATA    EQU    ZGDP+PIADATA        ;DATA PORT A
  1000. GDPDDRA    EQU    ZGDP+PIADDRA        ;DATA DIRECTION PORT A
  1001. GDPCTLA    EQU    ZGDP+PIACTLA        ;CONTROL PORT A
  1002. GDPDATB    EQU    ZGDP+PIADATB        ;DATA PORT B
  1003. GDPDDRB    EQU    ZGDP+PIADDRB        ;DATA DIRECTION PORT B
  1004. GDPCTLB    EQU    ZGDP+PIACTLB        ;CONTROL PORT B
  1005.  
  1006. ;    CONTROL PORT A ASSIGNMENTS
  1007.  
  1008. GDPCAV    EQU    PIAC12+PIAC23+PIADDAC    ;INITIALIZATION VALUE
  1009. LPENSI    EQU    PIAIRQ1            ;CA1 = LIGHT PEN STROBE
  1010.                     ;      INTERRUPT ON 0->1
  1011. VSYNCI    EQU    PIAIRQ2            ;CA2 = VERTICAL SYNC
  1012.                     ;      INTERRUPT ON 0->1
  1013.  
  1014. ;    DATA DIRECTION PORT A ASSIGNMENTS
  1015.  
  1016. GDPDDAV    EQU    10101111B
  1017.  
  1018. ;    DATA PORT A ASSIGNMENTS
  1019.  
  1020. PPRTM10    EQU    00000011B        ;PRINTER D1-D0 MASK
  1021. PPRTSTB    EQU    00000100B        ;PRINTER STROBE (OUTPUT ACTIVE LOW)
  1022. PPRTPRM    EQU    00001000B        ;PRINTER PRIME (OUTPUT ACTIVE LOW)
  1023. VSYNC    EQU    00010000B        ;VERTICAL SYNC (INPUT ACTIVE HIGH)
  1024. VSYNCE    EQU    00100000B        ;VERT SYNC TO CA2 (0=DISABLE, 1=ENABLE)
  1025. LPEN    EQU    01000000B        ;LIGHT PEN SWITCH (INPUT ACTIVE HIGH)
  1026. LPENSE    EQU    10000000B    ;LIGHT PEN STROBE TO CA1 (0=DISABLE, 1=ENABLE)
  1027.  
  1028. ;    CONTROL PORT B ASSIGNMENTS
  1029.  
  1030. GDPCBV    EQU    PIAC12+PIAC20+PIADDAC    ;INITIALIZATION VALUE
  1031. PRTACKI    EQU    PIAIRQ1            ;CB1 = PRINTER ACKNOWLEDGE
  1032.                     ;      NO INTERRUPT ON 0->1
  1033. PRTBSYI    EQU    PIAIRQ2            ;CB2 = PRINTER BUSY
  1034.                     ;      NO INTERRUPT ON 1->0
  1035.  
  1036. ;    DATA DIRECTION PORT B ASSIGNMENTS
  1037.  
  1038. GDPBDDV    EQU    11111100B
  1039.  
  1040. ;    DATA PORT B ASSIGNMENTS
  1041.  
  1042. PPRTBSY    EQU    00000001B        ;PRINTER BUSY (INPUT ACTIVE HIGH)
  1043. PPRTFLT    EQU    00000010B        ;PRINTER FAULT (INPUT ACTIVE LOW)
  1044. PPRTM72    EQU    11111100B        ;PRINTER D7-D2 MASK
  1045.  
  1046.  
  1047.  
  1048. ;**    Z-MACHINE KEYBOARD DEFINITIONS
  1049. ;
  1050.  
  1051. ;    PORT ASSIGNMENTS
  1052.  
  1053. ZKEYBDD    EQU    ZKEYBD+0        ;DATA
  1054. ZKEYBDC    EQU    ZKEYBD+1        ;COMMAND
  1055. ZKEYBDS    EQU    ZKEYBD+1        ;STATUS
  1056.  
  1057. ;    STATUS REGISTER
  1058.  
  1059. ZKEYOBF    EQU    00000001B        ;OUTPUT BUFFER FULL
  1060. ZKEYIBF    EQU    00000010B        ;INPUT BUFFER FULL
  1061.  
  1062. ;    COMMANDS
  1063.  
  1064. ZKEYRES    EQU    000H            ;RESET
  1065. ZKEYARO    EQU    001H            ;AUTOREPEAT ON
  1066. ZKEYARF    EQU    002H            ;AUTOREPEAT OFF
  1067. ZKEYKCO    EQU    003H            ;KEY CLICK ON
  1068. ZKEYKCF    EQU    004H            ;KEY CLICK OFF
  1069. ZKEYCF    EQU    005H            ;CLEAR FIFO
  1070. ZKEYCLK    EQU    006H            ;CLICK
  1071. ZKEYBEP    EQU    007H            ;BEEP
  1072. ZKEYEK    EQU    008H            ;ENABLE KEYBOARD
  1073. ZKEYDK    EQU    009H            ;DISABLE KEYBOARD
  1074. ZKEYUDM    EQU    00AH            ;KEY UP/DOWN MODE
  1075. ZKEYNSM    EQU    00BH            ;NORMAL SCAN MODE
  1076. ZKEYEI    EQU    00CH            ;ENABLE INTERRUPTS
  1077. ZKEYDI    EQU    00DH            ;DISABLE INTERRUPTS
  1078.  
  1079. ;    SPECIAL KEYS
  1080.  
  1081. ZKEYBRK    EQU    0AAH            ;BREAK KEY
  1082.  
  1083.  
  1084. ;**    MISCELLANEOUS EQUATES
  1085.  
  1086.     IF    REL0
  1087.     ORG    0000H
  1088.     ELSE
  1089.     ORG    0100H
  1090.     ENDIF
  1091. BIOSORG    EQU    $
  1092. CCPORG    EQU    BIOSORG-BDOSL-CCPL    ;ORIGIN FOR CCP
  1093. CCPAUTO    EQU    CCPORG            ; ENTRY TO CCP FOR AUTO EXEC COMMAND
  1094. CCPNORM    EQU    CCPORG+3        ; NORMAL ENTRY TO CCP
  1095. CCPCMD    EQU    CCPORG+7        ; BUFFER FOR AUTO EXEC COMMAND
  1096. AUTOCL    EQU    40            ; MAX COMMAND LENGTH
  1097. BDOSORG    EQU    BIOSORG-BDOSL        ;ORIGIN FOR BDOS
  1098. BDOSE    EQU    BDOSORG+6        ; ENTRY TO BDOS
  1099.  
  1100. MIJMP    EQU    0C3H            ;8080 'JMP' INSTRUCTION
  1101.  
  1102.  
  1103.     PAGE
  1104. ;**    BIOS JUMP VECTORS
  1105. ;
  1106.  
  1107.     JMP    CBOOTE            ;COLD BOOT ENTRY
  1108.     JMP    WBOOTE            ;WARM BOOT
  1109.     JMP    CONSTE            ;CONSOLE STATUS
  1110.     JMP    CONINE            ;CONSOLE INPUT
  1111.     JMP    CONOUTE            ;CONSOLE OUTPUT ENTRY
  1112.     JMP    LSTOUTE            ;LIST OUTPUT
  1113.     JMP    PUNOUTE            ;PUNCH OUTPUT
  1114.     JMP    RDRINE            ;READER INPUT
  1115.     JMP    HOMEE            ;HOME HEAD ENTRY
  1116.     JMP    SETDSKE            ;SET DISK ENTRY
  1117.     JMP    SETTRKE            ;SET TRACK ENTRY
  1118.     JMP    SETSECE            ;SET SECTOR ENTRY
  1119.     JMP    SETDMAE            ;SET DMA ENTRY
  1120.     JMP    READE            ;READ CP/M SECTOR ENTRY
  1121.     JMP    WRITEE            ;WRITE CP/M SECTOR ENTRY
  1122.     JMP    LSTSTE            ;LIST STATUS
  1123.     JMP    SECTRNE            ;SECTOR TRANSLATE ENTRY
  1124.     JMP    FORMATE            ;FORMAT
  1125.     JMP    RDTRKE            ;READ TRACK
  1126.     JMP    WRTRKE            ;WRITE TRACK
  1127.     JMP    WPCE            ;WRITE PROTECT CHECK
  1128.     JMP    CLRBUFD            ;CLEAR BUFFERS FOR DRIVE
  1129.  
  1130.     PAGE
  1131. ;**    BIOS HEADER TABLES
  1132. ;
  1133.  
  1134.     DB    BVERSN            ;BIOS VERSION
  1135.     DB    00010101B        ;DEFAULT I/O BYTE
  1136. XMODE    DB    0            ;MODE FLAGS
  1137.     DB    (BIOSEND-BIOSORG+256)/256    ;BIOS SIZE IN PAGES
  1138.     DW    BIOSEND            ;ENDING ADDR OF BIOS + 1
  1139.     DW    0            ;HARD ERROR COUNT (SINCE COLD BOOT)
  1140.     DW    0            ;SOFT ERROR COUNT (SINCE COLD BOOT)
  1141.     DB    NDRIVES            ;NUMBER OF DRIVES POSSIBLE IN THIS BIOS
  1142.  
  1143. ;    AUTO EXEC COMMAND BUFFERS
  1144.  
  1145. ACBC    DB    0            ;COLD BOOT AUTO COMMAND
  1146.     DS    AUTOCL
  1147. AWBC    DB    0            ;WARM BOOT AUTO COMMAND
  1148.     DS    AUTOCL
  1149.  
  1150. ;    CHARACTER I/O DEVICE TABLES
  1151.  
  1152. XCRTTBL    DS    0            ;CRT: TABLE
  1153.     DB    0
  1154.     DW    0
  1155.     DB    0,0
  1156.     DB    0FFH,0
  1157.     DB    0,0
  1158.     DB    0,0
  1159.     DB    0,0,0
  1160.     DB    0,0,0,0,0,0,0,0
  1161.     DW    0,0,0,0,0
  1162.     IF    $-XCRTTBL NE CIOTBLL
  1163. %:    CRT: CIO TABLE IS NOT CORRECT
  1164.     ENDIF
  1165.  
  1166. TTYTBL    DS    0            ;TTY: (SERIAL PORT A)
  1167.     DB    ZSERA
  1168.     DW    EPB480
  1169.     DB    0,0
  1170.     DB    EPRXR,0
  1171.     DB    EPDCD+EPTXR,0
  1172.     DB    0,0
  1173.     DB    0,0,0
  1174.     DB    EPSB1+EPCL8+EPA16X
  1175.     DB    070H
  1176.     DB    EPNORM+EPRTS+EPRESE+EPRXEN+EPDTR+EPTXEN
  1177.     DB    0,0,0,0,0
  1178.     DW    0,0,0,0,0
  1179.     IF    $-TTYTBL NE CIOTBLL
  1180. %:    TTY: CIO TABLE IS NOT CORRECT
  1181.     ENDIF
  1182.  
  1183. UL1TBL    DS    0        ;UC1: , UR1: , UP1: , UL1: (SERIAL PORT B)
  1184.     DB    ZSERB
  1185.     DW    EPB300
  1186.     DB    0,0
  1187.     DB    EPDSR+EPDCD+EPRXR,0
  1188.     DB    EPDSR+EPDCD+EPTXR,0
  1189.     DB    0,0
  1190.     DB    0,0,0
  1191.     DB    EPSB1+EPCL8+EPA16X
  1192.     DB    070H
  1193.     DB    EPNORM+EPRTS+EPRESE+EPRXEN+EPDTR+EPTXEN
  1194.     DB    0,0,0,0,0
  1195.     DW    0,0,0,0,0
  1196.     IF    $-UL1TBL NE CIOTBLL
  1197. %:    UL1: CIO TABLE IS NOT CORRECT
  1198.     ENDIF
  1199.  
  1200. LPTTBL    DS    0        ;LPT: (GENERAL DATA PORT PARALLEL PRINTER)
  1201.     DB    0
  1202.     DW    0
  1203.     DB    0,0
  1204.     DB    0,0
  1205.     DB    PPRTBSY,PPRTBSY
  1206.     DB    0,0
  1207.     DB    0,0,0
  1208.     DB    LPENSE+VSYNCE+PPRTPRM+PPRTSTB
  1209.     DB    GDPDDAV
  1210.     DB    GDPCAV
  1211.     DB    0
  1212.     DB    GDPBDDV
  1213.     DB    GDPCBV
  1214.     DB    0,0
  1215.     DW    0,0,0,0,0
  1216.     IF    $-LPTTBL NE CIOTBLL
  1217. %:    LPT: CIO TABLE IS NOT CORRECT
  1218.     ENDIF
  1219.  
  1220. XDUMMY    DS    0            ;DUMMY UNIT
  1221.     DB    0
  1222.     DW    0
  1223.     DB    0,0
  1224.     DB    0,0
  1225.     DB    0,0
  1226.     DB    0,0
  1227.     DB    0,0,0
  1228.     DB    0,0,0,0,0,0,0,0
  1229.     DW    0,0,0,0,0
  1230.     IF    $-XDUMMY NE CIOTBLL
  1231. %:    DUMMY CIO TABLE IS NOT CORRECT
  1232.     ENDIF
  1233.  
  1234. ;    DISK PARAMETER ENTRY TABLES
  1235.  
  1236.     IF    $-BIOSORG NE DPEBASE
  1237. %:    BIOS HEADER IS NOT CORRECT
  1238.     ENDIF
  1239.  
  1240. DPE1A    DS    0            ;PHYSICAL DRIVE 0 -- Z207  5 1/4"
  1241.     DW    0,0,0,0
  1242.     DW    DIRBUF
  1243.     DW    DPB1A
  1244.     DW    CSV1A
  1245.     DW    ALV1A
  1246.     DB    DPEZ207+DPEDD
  1247.     DB    0
  1248.     DB    0
  1249.     DB    0
  1250.     DB    DPEUNK
  1251.     DB    DPEMO+FDFS6
  1252.     DB    0
  1253.     DB    0
  1254.     IF    $-DPE1A NE DPEL
  1255. %:    DPE1A IS INCORRECT LENGTH
  1256.     ENDIF
  1257.  
  1258. DPE1B    DS    0            ;PHYSICAL DRIVE 1 -- Z207  5 1/4"
  1259.     DW    0,0,0,0
  1260.     DW    DIRBUF
  1261.     DW    DPB1B
  1262.     DW    CSV1B
  1263.     DW    ALV1B
  1264.     DB    DPEZ207+DPEDD
  1265.     DB    1
  1266.     DB    0
  1267.     DB    0
  1268.     DB    DPEUNK
  1269.     DB    DPEMO+FDFS6
  1270.     DB    0
  1271.     DB    0
  1272.     IF    $-DPE1B NE DPEL
  1273. %:    DPE1B IS INCORRECT LENGTH
  1274.     ENDIF
  1275.  
  1276. DPE1C    DS    0            ;PHYSICAL DRIVE 2 -- Z207  8"
  1277.     DW    XLATE1,0,0,0
  1278.     DW    DIRBUF
  1279.     DW    DPB1C
  1280.     DW    CSV1C
  1281.     DW    ALV1C
  1282.     DB    DPEZ207+DPET0SD+DPEDD
  1283.     DB    CONPC+CONDS8+0
  1284.     DB    0
  1285.     DB    0
  1286.     DB    DPEUNK
  1287.     DB    FDFS6
  1288.     DB    DPEHLS
  1289.     DB    0
  1290.     IF    $-DPE1C NE DPEL
  1291. %:    DPE1C IS INCORRECT LENGTH
  1292.     ENDIF
  1293.  
  1294. DPE1D    DS    0            ;PHYSICAL DRIVE 3 -- Z207  8"
  1295.     DW    XLATE2,0,0,0
  1296.     DW    DIRBUF
  1297.     DW    DPB1D
  1298.     DW    CSV1D
  1299.     DW    ALV1D
  1300.     DB    DPEZ207+DPET0SD+DPEDD
  1301.     DB    CONPC+CONDS8+1
  1302.     DB    0
  1303.     DB    0
  1304.     DB    DPEUNK
  1305.     DB    FDFS6
  1306.     DB    DPEHLS
  1307.     DB    0
  1308.     IF    $-DPE1D NE DPEL
  1309. %:    DPE1D IS INCORRECT LENGTH
  1310.     ENDIF
  1311.  
  1312. DPE2A    DS    0            ;Z217 -- PARTITION 1
  1313.     DW    0,0,0,0
  1314.     DW    DIRBUF
  1315.     DW    DPB2A
  1316.     DW    0
  1317.     DW    ALV2A
  1318.     DB    DPEZ217+DPEPRIM
  1319.     DB    0
  1320.     DB    WIRPS
  1321.     DB    0
  1322.     DB    0
  1323.     DB    0
  1324.     DB    0
  1325.     DB    0
  1326.     IF    $-DPE2A NE DPEL
  1327. %:    DPE2A IS INCORRECT LENGTH
  1328.     ENDIF
  1329.  
  1330. DPE2B    DS    0            ;Z217 -- PARTITION 2
  1331.     DW    0,0,0,0
  1332.     DW    DIRBUF
  1333.     DW    DPB2B
  1334.     DW    0
  1335.     DW    ALV2B
  1336.     DB    DPEZ217
  1337.     DB    0
  1338.     DB    WIRPS
  1339.     DB    0
  1340.     DB    0
  1341.     DB    0
  1342.     DB    0
  1343.     DB    0
  1344.     IF    $-DPE2B NE DPEL
  1345. %:    DPE2B IS INCORRECT LENGTH
  1346.     ENDIF
  1347.  
  1348.     PAGE
  1349. ;**    COLD BOOT ENTRY
  1350. ;
  1351. ;    ENTRY:    NONE
  1352. ;    EXIT:    (C)=DEFAULT DRIVE # ('A:')
  1353. ;        VIA:    AUTO ON
  1354. ;            AUTO OFF
  1355. ;    USES:    ALL
  1356. ;
  1357.  
  1358. CBOOTE:
  1359.     LXI    SP,STACK        ;INIT STACK POINTER
  1360.  
  1361.     MVI    A,(CBOOT-CBOOT)/3    ;SET FUNCTION # IN SPECIAL LOCATION
  1362.     STA    BLDRP0+COMFUNC        ; SINCE COLD BOOTING FROM BIOS LOADER
  1363.     CALL    SWAP881        ;8088 CODE DOES MOST OF THE INITIALIZATION
  1364.  
  1365.     MVI    C,0            ;DEFAULT DRIVE IS 'A:'
  1366.     LXI    D,ACBC            ;POINTER TO AUTO COMMAND BUFFER
  1367.     JMP    WB1            ;MERGE WITH WARM BOOT CODE
  1368.  
  1369.  
  1370. ;**    WARM BOOT ENTRY
  1371. ;
  1372. ;    ENTRY:    NONE
  1373. ;    EXIT:    (C)=DEFAULT DRIVE #
  1374. ;        VIA:    AUTO ON
  1375. ;            AUTO OFF
  1376. ;    USES:    ALL
  1377. ;
  1378.  
  1379. WBOOTE:
  1380.     LXI    SP,STACK        ;INIT STACK POINTER
  1381.  
  1382.     MVI    A,(WBOOT-CBOOT)/3    ;SET FUNCTION #
  1383.     CALL    SWAP88            ;8088 CODES DOES MOST OF WARM BOOT
  1384.  
  1385.     LDA    DFTDRV            ;GET DEFAULT DRIVE
  1386.     MOV    C,A
  1387.     LXI    D,AWBC            ;POINTER TO AUTO COMMAND BUFFER
  1388.  
  1389. WB1:
  1390.     MVI    A,MIJMP            ;SET PAGE ZERO VALUES
  1391.     LXI    H,BIOSORG+3
  1392.     STA    BOOT
  1393.     SHLD    BOOT+1
  1394.     LXI    H,BDOSE
  1395.     STA    BDOS
  1396.     SHLD    BDOS+1
  1397.  
  1398.     LDAX    D            ;CHECK IF AUTO SHOULD BE DONE
  1399.     ORA    A
  1400.     JZ    CCPNORM            ; BR IF NO
  1401.  
  1402.     LDA    CCPCMD-1        ;FILL COMMAND BUFFER WITH NULLS
  1403.     LXI    H,CCPCMD+1
  1404. WB2:    MVI    M,0
  1405.     INX    H
  1406.     DCR    A
  1407.     JNZ    WB2
  1408.  
  1409.     LDAX    D            ;MOVE AUTO COMMAND TO CCP
  1410.     MOV    B,A            ; COMMAND BUFFER
  1411.     INR    B
  1412.     LXI    H,CCPCMD
  1413. WB3:    LDAX    D
  1414.     MOV    M,A
  1415.     INX    D
  1416.     INX    H
  1417.     DCR    B
  1418.     JNZ    WB3
  1419.  
  1420.     JMP    CCPAUTO            ;BR TO CCP ENTRY FOR AUTO
  1421.  
  1422.  
  1423. ;**    CONSOLE STATUS ENTRY
  1424. ;
  1425. ;    ENTRY:    NONE
  1426. ;    EXIT:    (A)=STATUS
  1427. ;            0=NO CHARACTER AVAILABLE , 0FFH=CHARACTER AVAILABLE
  1428. ;    USES:    ALL
  1429. ;
  1430.  
  1431. CONSTE:
  1432.     MVI    A,(CONST-CBOOT)/3    ;SET FUNCTION #
  1433.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1434.  
  1435.  
  1436. ;**    CONSOLE INPUT ENTRY
  1437. ;
  1438. ;    ENTRY:    NONE
  1439. ;    EXIT:    (A)=CHARACTER FROM CONSOLE
  1440. ;    USES:    ALL
  1441. ;
  1442.  
  1443. CONINE:
  1444.     MVI    A,(CONIN-CBOOT)/3    ;SET FUNCTION #
  1445.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1446.  
  1447.  
  1448. ;**    CONSOLE OUTPUT ENTRY
  1449. ;
  1450. ;    ENTRY:    (C)=CHARACTER
  1451. ;    EXIT:    NONE
  1452. ;    USES:    ALL
  1453.  
  1454. CONOUTE:
  1455.     MVI    A,(CONOUT-CBOOT)/3    ;SET FUNCTION #
  1456.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1457.  
  1458.  
  1459. ;**    LIST OUTPUT ENTRY
  1460. ;
  1461. ;    ENTRY:    (C)=CHARACTER
  1462. ;    EXIT:    NONE
  1463. ;    USES:    ALL
  1464. ;
  1465.  
  1466. LSTOUTE:
  1467.     MVI    A,(LSTOUT-CBOOT)/3    ;SET FUNCTION #
  1468.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1469.  
  1470.  
  1471. ;**    PUNCH OUTPUT ENTRY
  1472. ;
  1473. ;    ENTRY:    (C)=CHARACTER
  1474. ;    EXIT:    NONE
  1475. ;    USES:    ALL
  1476. ;
  1477.  
  1478. PUNOUTE:
  1479.     MVI    A,(PUNOUT-CBOOT)/3    ;SET FUNCTION #
  1480.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1481.  
  1482.  
  1483. ;**    READER INPUT ENTRY
  1484. ;
  1485. ;    ENTRY:    NONE
  1486. ;    EXIT:    (A)=CHARACTER READ FROM READER
  1487. ;    USES:    ALL
  1488. ;
  1489.  
  1490. RDRINE:
  1491.     MVI    A,(RDRIN-CBOOT)/3    ;SET FUNCTION #
  1492.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1493.  
  1494.  
  1495. ;**    SET DISK DRIVE ENTRY
  1496. ;
  1497. ;    ENTRY:    (C)=DRIVE NUMBER
  1498. ;        (E)=LSB INDICATES 1ST TIME SELECTION
  1499. ;            0=1ST TIME , 1=SUBSEQUENT TIMES
  1500. ;    EXIT:    (HL)=ADDRESS OF DPE FOR DRIVE
  1501. ;            =0 IF ERROR
  1502. ;    USES:    ALL
  1503. ;
  1504.  
  1505. SETDSKE:
  1506.     LXI    H,XLATES        ;ADDRESS OF XLATE TABLE ADDRESSES
  1507.     MVI    A,(SETDSK-CBOOT)/3    ;SET FUNCTION #
  1508.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1509.  
  1510.  
  1511. ;**    HOME HEAD ENTRY
  1512. ;
  1513. ;    ENTRY:    NONE
  1514. ;    EXIT:    NONE
  1515. ;    USES:    ALL
  1516.  
  1517. HOMEE:
  1518.     MVI    A,(HOME-CBOOT)/3    ;SET FUNCTION #
  1519.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1520.  
  1521.  
  1522. ;**    SET TRACK NUMBER ENTRY
  1523. ;
  1524. ;    ENTRY:    (BC)=TRACK NUMBER
  1525. ;    EXIT:    NONE
  1526. ;    USES:    ALL
  1527. ;
  1528.  
  1529. SETTRKE:
  1530.     MVI    A,(SETTRK-CBOOT)/3    ;SET FUNCTION #
  1531.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1532.  
  1533.  
  1534. ;**    SET SECTOR NUMMBER ENTRY
  1535. ;
  1536. ;    ENTRY:    (BC)=SECTOR NUMBER
  1537. ;    EXIT:    NONE
  1538. ;    USES:    ALL
  1539. ;
  1540.  
  1541. SETSECE:
  1542.     MVI    A,(SETSEC-CBOOT)/3    ;SET FUNCTION #
  1543.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1544.  
  1545.  
  1546. ;**    SET DMA ADDRESS
  1547. ;
  1548. ;    ENTRY:    (BC)=ADDRESS
  1549. ;    EXIT:    NONE
  1550. ;    USES:    ALL
  1551. ;
  1552.  
  1553. SETDMAE:
  1554.     MVI    A,(SDMA-CBOOT)/3    ;SET FUNCTION #
  1555.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1556.  
  1557.  
  1558. ;**    READ CP/M SECTOR ENTRY
  1559. ;
  1560. ;    ENTRY:    NONE
  1561. ;    EXIT:    (A)=ERROR CODE
  1562. ;            0=NO ERROR , 1=ERROR
  1563. ;    USES:    ALL
  1564. ;
  1565.  
  1566. READE:
  1567.     MVI    A,(BREAD-CBOOT)/3    ;SET FUNCTION #
  1568.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1569.  
  1570.  
  1571. ;**    WRITE CP/M SECTOR ENTRY
  1572. ;
  1573. ;    ENTRY:    (C)=TYPE OF WRITE
  1574. ;            0=NORMAL WRITE
  1575. ;            1=WRITE TO A DIRECTORY SECTOR
  1576. ;            2=1ST WRITE TO A SECTOR IN AN UNALLOCATED BLOCK
  1577. ;    EXIT:    (A)=ERROR CODE
  1578. ;            0=NO ERROR , 1=ERROR
  1579. ;    USES:    ALL
  1580. ;
  1581.  
  1582. WRITEE:
  1583.     MVI    A,(BWRITE-CBOOT)/3    ;SET FUNCTION #
  1584.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1585.  
  1586.  
  1587. ;**    CHECK LIST DEVICE STATUS ENTRY
  1588. ;
  1589. ;    ENTRY:    NONE
  1590. ;    EXIT:    (A)=STATUS
  1591. ;            0=NOT READY , 0FFH=READY
  1592. ;    USES:    ALL
  1593. ;
  1594.  
  1595. LSTSTE:
  1596.     MVI    A,(BLSTST-CBOOT)/3    ;SET FUNCTION #
  1597.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1598.  
  1599.  
  1600. ;**    SECTOR TRANSLATE ENTRY
  1601. ;
  1602. ;    ENTRY:    (BC)=SECTOR NUMBER
  1603. ;        (DE)=POINTER TO TRANSLATE TABLE
  1604. ;    EXIT:    (HL)=TRANSLATED SECTOR NUMBER
  1605. ;    USES:    ALL
  1606. ;
  1607.  
  1608. SECTRNE:
  1609.     MVI    A,(BSECTRN-CBOOT)/3    ;SET FUNCTION #
  1610.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1611.  
  1612.  
  1613. ;**    FORMAT ENTRY
  1614. ;
  1615. ;    ENTRY:    (C)=VERIFY FLAG  (0=NO , 1=YES)
  1616. ;    EXIT:    (A)=STATUS BYTE
  1617. ;    USES:    ALL
  1618. ;
  1619.  
  1620. FORMATE:
  1621.     MVI    A,(BFMT-CBOOT)/3    ;SET FUNCTION #
  1622.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1623.  
  1624.  
  1625. ;**    READ TRACK ENTRY
  1626. ;
  1627. ;    ENTRY:    NONE
  1628. ;    EXIT:    (A)=ERROR STATUS
  1629. ;    USES:    ALL
  1630. ;
  1631.  
  1632. RDTRKE:
  1633.     MVI    A,(BRDTRK-CBOOT)/3    ;SET FUNCTION #
  1634.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1635.  
  1636.  
  1637. ;**    WRITE TRACK ENTRY
  1638. ;
  1639. ;    ENTRY:    NONE
  1640. ;    EXIT:    (A)=ERROR STATUS
  1641. ;    USES:    ALL
  1642. ;
  1643.  
  1644. WRTRKE:
  1645.     MVI    A,(BWRTRK-CBOOT)/3    ;SET FUNCTION #
  1646.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1647.  
  1648.  
  1649. ;**    WRITE PROTECT CHECK
  1650. ;
  1651. ;    ENTRY:    NONE
  1652. ;    EXIT:    (A)=STATUS     (0=R/W , 1=R/O)
  1653. ;    USES:    ALL
  1654. ;
  1655.  
  1656. WPCE:
  1657.     MVI    A,(BWPC-CBOOT)/3    ;SET FUNCTION #
  1658.     JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1659.  
  1660.  
  1661. ;**    CLEAR BUFFERS FOR DRIVE
  1662. ;
  1663. ;    ENTRY:    NONE
  1664. ;    EXIT:    NONE
  1665. ;    USES:    ALL
  1666. ;
  1667.  
  1668. CLRBUFD:
  1669.     MVI    A,(BCBD-CBOOT)/3    ;SET FUNCTION #
  1670. ;    JMP    SWAP88            ;RETURN VIA 'SWAP88'
  1671.     IF    $ NE SWAP88
  1672. %:    SWAP88 MUST BE NEXT
  1673.     ENDIF
  1674.  
  1675.     PAGE
  1676. ;*    SWAP88 -- SWAP TO 8088 PROCESSOR
  1677. ;
  1678. ;    ENTRY:    (A)=FUNCTION #
  1679. ;    EXIT:    (A),(HL)=VALUES PASSED BACK IN COMMUNICATION REGION
  1680. ;    USES:    ALL
  1681. ;
  1682.  
  1683. SWAP88:
  1684.     STA    COMFUNC            ;SAVE FUNCTION # IN COM REGION
  1685.     SHLD    COMRHL            ;STORE (HL) IN COM REGION
  1686.     MOV    H,B            ;STORE (BC) IN COM REGION
  1687.     MOV    L,C
  1688.     SHLD    COMRBC
  1689.     XCHG                ;STORE (DE) IN COM REGION
  1690.     SHLD    COMRDE
  1691.  
  1692. SWAP881:
  1693.     DI                ;INSURE INTERRUPTS IN 8085 ARE OFF
  1694.     MVI    A,ZPSPPS5        ;TURN OFF 8088'S PROCESSING OF INT'S
  1695.     OUT    ZPSP
  1696.     MVI    A,ZPSPPS8        ;8088 PROCESSOR GETTING CONTROL
  1697.     STA    COMWHO
  1698.     OUT    ZPSP            ;SWAP PROCESSOR TO 8088
  1699.  
  1700.     LDA    COMRA            ;RETRIEVE (A)
  1701.     LHLD    COMRHL            ;RETRIEVE (HL)
  1702.  
  1703.     RET
  1704.  
  1705.     PAGE
  1706. ;**    DATA STORAGE
  1707. ;
  1708.  
  1709. XLATES    DS    0            ;XLATE TABLE ADDRESSES
  1710.     DW    0            ; NO XLATE
  1711.     DW    XLATE1            ; 8" SINGLE DENSITY
  1712.     DW    XLATE2            ; 8" DOUBLE DENSITY
  1713.  
  1714. XLATE1    DS    0        ;8" SINGLE DENSITY SECTOR TRANSLATE TABLE
  1715.     DB    1,7,13,19,25
  1716.     DB    5,11,17,23
  1717.     DB    3,9,15,21
  1718.     DB    2,8,14,20,26
  1719.     DB    6,12,18,24
  1720.     DB    4,10,16,22
  1721.  
  1722. XLATE2    DS    0        ;8" DOUBLE DENSITY SECTOR TRANSLATE TABLE
  1723.     DB    1,2,19,20,37,38
  1724.     DB    3,4,21,22,39,40
  1725.     DB    5,6,23,24,41,42
  1726.     DB    7,8,25,26,43,44
  1727.     DB    9,10,27,28,45,46
  1728.     DB    11,12,29,30,47,48
  1729.     DB    13,14,31,32,49,50
  1730.     DB    15,16,33,34,51,52
  1731.     DB    17,18,35,36
  1732.  
  1733. PATCH    DS    64            ;PATCH AREA
  1734.  
  1735. DIRBUF    DS    128
  1736.  
  1737. DPB1A    DS    DPBL
  1738. CSV1A    DS    64
  1739. ALV1A    DS    77
  1740. DPB1B    DS    DPBL
  1741. CSV1B    DS    64
  1742. ALV1B    DS    77
  1743. DPB1C    DS    DPBL
  1744. CSV1C    DS    64
  1745. ALV1C    DS    77
  1746. DPB1D    DS    DPBL
  1747. CSV1D    DS    64
  1748. ALV1D    DS    77
  1749. DPB2A    DS    DPBL
  1750. ALV2A    DS    256
  1751. DPB2B    DS    DPBL
  1752. ALV2B    DS    256
  1753.  
  1754.     DS    8            ;STACK AREA
  1755. STACK    DS    0
  1756.  
  1757. BIOSEND    EQU    $-1
  1758.  
  1759.  
  1760.     END
  1761.     77
  1762. DP