90
FILE: BIOS22fB PRN PAGE 002 ****f.*f.***if.f.f.f.f.i*f.*f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.i******f.*f.*****f.f.f.***f.f.f.if.*** * * * CUSTOMIZED BIOS FOR MICROMAT!DN 'DOUBLER' AS USED WITH * * (C) DR (Cl) PHOM (ON DOUBLER), * * SINGLE/DOUBLE DEN5ITY, SINGLE/DOUBLE SIDED. * f.===============================================================f. * WITH DRIVERS FOR MM MULlI 1/0 BRD IN SINGLE USER CONFIGURATION* *===============================================================* * COPYRIGHT (C) 1979, MICROMATION AND DIGITAL RE5EARCH. * * * i LAST UPDATED ON FEE 12, 198m * f. * * REVISED FOR CAVRO STD SYSTEM f. * VERSION 2.0 REV 8 OCT 26,1984 f. i * *f.f.fiff.**********f.f.*************f.f.*********************111*111*1' 0000 = f.**f.f.f.f.******f.f.f.*********f.*********f.****f.************f.f.************t*********** TRUE EQU -1 FALSE EQU 0 f.f.t**f.f.f.****************f.f.***********f.***************f.******f.*********f.f.******* iTHE FOLlOWING LABELS MAY BE USER DEFINED FOR DIFFERENT OPERATINS ENVIRONMENTS: 0038 = 0004 = MSIZE IOPROM NDRIVES EQU Eau EQU 0F000H 4 SYSTEM IN KILOBYTES THIS NUMBER MUST BE ;OFFBET FDR 5bK = 4580H ;NUMBER OF DI5K DRIVES 5UPPORTED BY ;THIS CBIOS i============================================================================== i 1/0 BYTE FOR LIST DEVIeE 15 IMPLEMENTED AS FOLLOWS: t TTV = MULTLIST (MM MULTi liO BOARD 3ERIAL PORTi!) * CRT = CONOUT (MM DOUBLER SERIAL PORT) * LPT = CENTLIST (CENTRONICS 703/779 TYPE LIST DEVIeE) * UL1 = OPTIONAL DRIVER TO BE SElECTED BV USER (SEE BELOW) f.============================================================================== f. ==>UPDATED:2-12-8m LIST DEVIeE EQUATES: (THEBE COULD BE SET FALSE ro SAVE BIOS SPACE IF USER LIST DRIVER lB TOO LARGE TO FIT OTHERWISE) 0000 = 0000 = MULTLIST CENTLIBT EQU EQU FAlSE FAlSE , LIST DEVIeE OPTIONS: SET ONlY ONE FLA6 TRUE FOR DE5IRED DRIVER AS ULI 0000 = NONE EQU FALSE ;NO ULl FUNCTION DESIRED 0000 = GODBIO EGU FALSE ; GODBOUT 1/0 BOARD AS LST: 0000 = SSMlü EQU FALSE ;SOLID BTAiE MüSIC 2S+? AS LST:

amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22fB PRN PAGE 002

****f.*f.***if.f.f.f.f.i*f.*f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.i******f.*f.*****f.f.f.***f.f.f.if.***

* ** CUSTOMIZED BIOS FOR MICROMAT!DN 'DOUBLER' AS USED WITH ** (C) DR (Cl) PHOM (ON DOUBLER), ** SINGLE/DOUBLE DEN5ITY, SINGLE/DOUBLE SIDED. *f.===============================================================f.* WITH DRIVERS FOR MM MULlI 1/0 BRD IN SINGLE USER CONFIGURATION**===============================================================** COPYRIGHT (C) 1979, MICROMATION AND DIGITAL RE5EARCH. ** *i LAST UPDATED ON FEE 12, 198m *f. ** REVISED FOR CAVRO STD SYSTEM f.

* VERSION 2.0 REV 8 OCT 26,1984 f.

i **f.f.fiff.**********f.f.*************f.f.*********************111*111*1'

0000 =f.**f.f.f.f.******f.f.f.*********f.*********f.****f.************f.f.************t***********TRUE EQU -1 FALSE EQU 0f.f.t**f.f.f.****************f.f.***********f.***************f.******f.*********f.f.*******iTHE FOLlOWING LABELS MAY BE USER DEFINED FOR DIFFERENT OPERATINS ENVIRONMENTS:

0038 =

0004 =

MSIZE

IOPROM

NDRIVES

EQU

Eau

EQU

0F000H

4

SYSTEM IN KILOBYTESTHIS NUMBER MUST BE

;OFFBET FDR 5bK = 4580H

;NUMBER OF DI5K DRIVES 5UPPORTED BY;THIS CBIOS

i==============================================================================i 1/0 BYTE FOR LIST DEVIeE 15 IMPLEMENTED AS FOLLOWS:t TTV = MULTLIST (MM MULTi liO BOARD 3ERIAL PORTi!)* CRT = CONOUT (MM DOUBLER SERIAL PORT)* LPT =CENTLIST (CENTRONICS 703/779 TYPE LIST DEVIeE)* UL1 =OPTIONAL DRIVER TO BE SElECTED BV USER (SEE BELOW)f.==============================================================================f. ==>UPDATED:2-12-8m

LIST DEVIeE EQUATES: (THEBE COULD BE SET FALSE ro SAVE BIOS SPACE IFUSER LIST DRIVER lB TOO LARGE TO FIT OTHERWISE)

0000 =0000 =

MULTLISTCENTLIBT

EQUEQU

FAlSEFAlSE

:~--~~--~--~~~-~----~~--~-----~~-~---~-~---~-~~--~~~---~---~~--~-~~--~-~--~~-~-,LIST DEVIeE OPTIONS: SET ONlY ONE FLA6 TRUE FOR DE5IRED DRIVER AS ULI

0000 = NONE EQU FALSE ;NO ULl FUNCTION DESIRED0000 = GODBIO EGU FALSE ;GODBOUT 1/0 BOARD AS LST:0000 = SSMlü EQU FALSE ;SOLID BTAiE MüSIC 2S+? AS LST:

Page 2: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22!8 PRN PAGE 003

0000 ::FFFF ::

DPIOUSERLST

EQUEQU

FALSETRUE

;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST BE IN5ERTED IN 8105 UNDER LIST:;AND INITIALIZATION CODE UNDER (COlD) BOOT

.~--~--------------~--~-----~~--~--------~--------------~------~~--~-~~~--~-~~-,

BIAS 15 ADDREaS OfFSET FROM 3400H FOR MEMORY SYSTEMSTHAN 20K (REFERRED 10 AS BTHROUGHOUT THE TEXT).

9000 ::C400 =CC06 =DA00 =

BIASCCPBDOSBIUS

EQUEQUEGUEQU

(MSIZE-20)*10243400H+BIASCCP+80bHCCP+1600H

;BASE OF CCP;BASE OF aDOS;BA8E OF BIOS

0003 ::005E ::

IOBYTE E9USIGNON EQU

0003H005EH

;INTEL 1/0 BYTE;LOCATION OF MESSAGE LEFT BV;BOOT5TRAP LOADER

CBIOS FOR MICRDMATION DOUBLE DENSITY CONTROLlER

FB00 ::F800 ::FC00 =

CONTROLLERPROMBUFF

EQUEQUEQU

0F800H ;ADDRESS OF CONTROLLERCONTROLLER ;ADDRESS OF DOUBLER PROMCONTROLLER+400H ;ADDRES5 OF SCRATCH RAM

* * * * * ** * * i * f. * * * f. * * * * * ** f * ** * f.

* i* HARDWARE PORT DEFINITIONS f

* ** * f * f. f. * * * f f. * * ** f * * * * * 1 * ** f ***

FE00 =FE00 =FE01 ::FE02 =FE05 =FE0A =

WReûNTRDSTATWRCLKUARTDATARDMARKUARTSTAT

EQUEQUEQUEQUEauEQU

CONTROLLER+600HWRCONTWRCONT+lWRCûNT+2WRCONT+5 ;LDADS THE HEADWRCONT+k1AH

* * * * * * * i * * f. * f i * f i * * * * * * f. * i i * fi­

l RAM VARIABLE DEFINITIONS

FC01 ::FC03 ::fC04 ::FC05 ::FC0A ::FC0D ::FC10 =

*** * f. f. * f. * f * f. f f * ** * * * ** ** i ** * *

DENBYTE EQU BUFF+l ;0 FOR SINGLDE DEN#, 10 FOF~ DBL.DENCTRBYTE EQU BUFF+3 ;RAM IMAGE OF RD5TAT DR WRCONTTRACK EQU BUFF+4 ;TRACK NUMBER FOR CURRENT DRIVEPRESDSK EQU BUFF+5 ;CURRENTLY LOGGED IN DRIVE NO~

SECTOR EGU BUFF+0AHNXTDISK EQU BUFF+QDH ; D~~IVE NO. FOR NEXT 1/0 (READlWRITElSTEPTIME r'l'V! BUFF+10H ;5TEP TH1E IN KSECtJ:lli

Page 3: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22/B PRN PAGE 004

FC20 = TRYl EaU BUFF+20H.... ,..l"joi = RETRYCOUNT EQU BUFF+21Ht' 1.. '" i

Fi"\l"11"l = CU~~RDRIVE EGB BUFF+22Ht..zi.i..

FC16 = DENMAP E9U BUFF+16H ~FOR EACH OF 4 DRIVES,;00 FOR SINGLE DENSITY;10H FOR (C) PROM;04H FOR <Cl}PROM FOR DOUBLE DENSITY;CBIOS ERROR CHECK;CBIOS TRK./SECTOR ERROR CHK: BYTE;CBIOS DI5K, LOG6ED IN BEFORE WARMBOOT

****************************************** *f. LIST DEVIeE EQUATES *

* *f*******f.f.*if.f.*******************f.******f.

IF (MULTLIST OR CENTLIST);ASSEMBLED ONLY FOR PORTS ON MICROMATION HUlTI 1/0 BOARD

*==============================================================================*'- PORT EQUATES:CHANGE VALUE OF UARTIC TO RE-MAP THE PORT DECODING OF 1/0 BOARDi-

l NOTEiDECODIN6 OF BOARD 1/0 SPACE oeCURS ALONG 32 PORT BOUNDRIES* (I.EliAS-A7 ARE SI6NIFICANT ADDRESS BITS FOR 1/0 BLOCKlf.==============================================================================

******f.**********fff*******************************fff*************************

UART1C EGU ;CONTROL PORT OF 8251 il (le 4B}

*******************************************************************************

BASE Eau UARTICUARTID EGU BA5E+l

UART2C EGU BA5E+4UART2D EQU BASE+5

UAF:T3C EQU BASE+8UART3D EQU BA5E+9

UART4C EGU BA5E+0CHUART4D Eau BASE+0DH

P8255 EQU BASE+10HPORTe EQU BASE+l1HPORTS EQU BASE+12HPORTA Eau BA5E+13H

RTe EQU BA5E+14HTIMER2 EQU BA5E+15HTIMER1 EQU BASE+lbHTIMER0 Egil BA5E+17H

PORT0 EGU BA5E+18HPORT 1. Eau BASE+19H

;EQUATE BASE FOR REST OF TABLE;DATA PORT OF UART Il

;UART 12 (le 5B)

;UART 13 (le 7B)

;UART 14 (le 9B)

;8255 CONTROL RES. (le lA)

;8253 TIMER/COUNTER CONTROL PORT (IC 3D);COUNTER 12;COUNTER Il;COUNTER i0

;PARALlEL OUTPUT LATeM (IC 2A);PARALLEL OUTPUT LATCH {le 3A)

Page 4: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22i8 PRN

USERPRT EQU BA5E+ICH

PAGE 005

;BASE OF USER DEFINED 1/0 PORTS (PORTS lC-lFH)

*f.******if.**************f.f.*f.*************************************f.f.*****f.fff.f.**ENDIF ;5rop CONDITIONAL ASSEMBLY

IF CENTLIST;CONDITIDNAL ASM FOR MM MULTI 1/0 BRD FOR USE WITH CENRDNICS PRINTER

COMMANDDATAPORTSTATUS

EQU P8255EQU PORT0EQU PORTe

ENDIF

;COMMAND WORD RESISTER;PARALLEL DATA OUTPUT LATCH rD PRINTER;STATUS BITS:OBFJ=BIT 7

ACK/=BIT 6; BUSY=BIT 5;END OF PORT DEFINITIONS FOR CENTLIST

IF USERLST ;AREA FOR USER LIST ROUTINE EQUATES

0020 =0020 =0021. =0022 =0023 =0030 =0031 =0032 =0033 =0080 =0040 =

TUART EauTUARTAS EQUTUARTA EQUTUARTAC EQUTUARTAfi EgilTUARTBS EQUTUARTB EQUTUARTBC EGUTUARTBM EGUTUARTBE EQUTUARTDA EQU

ENDIF

20HTUARTTUARTAS+lTUARTA+lTUARTAC+lTUART+10HTUARTBS+lTUARTB+lTUARTBC+l80H40H

** f ** * * * * * * * * i * * * f. * f. * * * ** f. * **J. ** JUMP VECTORS rD ROUTINES IN CONTROlLER PRO" ** ** * * f. * f. * * f. * * f. ** f ** *** f. * * * * * * * *

F803 :: .. CHOME EQU PROM+3 ; HOMES THE D1Sf~

F806 = CSELDSK EQU PROM+~~ ;5ELECTS DRIVE POINTED TO av CREG;AND LOADS HEAD

F809 :: CSETTRK EQU PROM+9 ;STEPS DRIVE TO TRACK (CiFB0C :: CSETSEC EQU PROM+0CH ;SET SECTDR NUMBERF80F = CSETDMA EQU PROM+0FH ;SET DMA ADDRESSFalS = DISKWRITE EQU PRDM+15H ;WRITE SECTDRFBt2 :: DI5KREAD EGU PROM+12H ;SECTDR READFBIB :: SETDEN Eau PROM+1BH ;TEST DENSITY OF CURRENT DRIVEF8lE :: WH1TEPF~OTECT EQU PRDM+IEH ;CHECK FOR WRITE PROTEeT

* f. * f. f. 1 * f * f. * * * * f. * f f. * *** * * f. * f. * *DA00 ORS BIOS ;ORIBIN OF THIS PR06RAM

Page 5: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22J8 PRN PAGE 006

** * * 1 * * * * * * * * * * * * ** * * * * * * * * * *

00m0 =0004 =0042 =mm49 =004D =

NSECTS

BOOTBA5ECPMDRIVETRACKlDENSIDESIDE

EQU

EQUEaUEQUEQUEQU

($-CCP) 1128

oBOOTBA5E+4BOOTBA5E+42HBOOTBA5E+49HBOOTBASE+4DH

;WARM START SECrOR COUNT

;BOTTOM OF USABlE MEMORY;LOC. 04 Of PAGE a0. CURRENT CPM DISK;TEMPORARY STORAGE FOR TRACK NUMBER;INFû ON DENSITY AND SIDE FOR UTILITIES

* * f. * * * * * * * ** f. * * f. * f. * * * * * * f. 1 f. * f.

i ** JUMP VECTORS FOR INDIVIDUAl SUBROUTINES ** USED BV ENTIRE SYSTEM f-

I f-

* * * * * * * ** i * i * * * i i * *** * * * ** * * *DA00 C3CADA JMP BOOT ;COLD STARTDA03 C3F0DA BWBOOT JMP WBOOT ;WARM STARTDA0b C31BDD JMP CONBT ;CONSOLE STATUSDA09 C324DD CON IN! JMP CûNIN ;CONSOLE CHARACTER INDA0C C330DD CONOUTl JMP CONOUT ;CON5ûlE CHARACTER ûUT~~A0F C33DDD JMP LIST ;LIST CHARACTER OUTDA12 C3b2rHJ~ JMP PUNCH ;PUNCH CHARACTER OUTDA15 C362DD JMP READER ;READER CHARACTER OUTDAlS C3DDDC JMP HOME ;BIOS nOVE HEAD TG HOME POSITIONDAiB C37EDC JMP SELDSK ;BIOS SELECT DI5K (DOESN'T ACTUALLY SELECTS)DAlE C3DFDC JMP SETTRK ;BIOS SET TRACKDA". C3FBDC JMP BETSEe ;BIGS SET SECTOF:HL!

DA24 C30FF8 JMP CSETDMA ;CONTROLLER SET DMA ADDRESSDA27 C3C7DB JMP READ ;BIOS READ DI5KDA2A C3A8DB J~lP WRITE ;8105 WRITE DISKDA2D C361DD JMP LI5T5T ;RETURN LIST STATUSDA30 C3E4DC JMP SECTRAN ;5EcrOR TRANSLATE

** * * * **** * * * * * * *** * * * f. f f. i * * i *i ** FIXED DI5K PARAMETER BLOCK TABLES FOR FOUR *f' DRIVE SYSTEM *f. i

i * * * * * * * * * * *** * * * * * * ***** * * f. *

DA33 = DPBASE Eau $ ;BA5E OF DI5K PARAMETER BLOCKS

DISK PARAMETER BLOCK FOR DRIVE NOl 00

DA33 73DA0000 DPE0: DWDA37 000~0000 DWDA3B 6FDD8DDA DWDA3F 0EDEEFDD DW

TRANS,0000H0000H,k1000HDIRBUF,DPB0CSV0~AL\J0

;TRANSlATE TABLE;SCRATCH AREA;DIR BUFF, PAR" BLOCK;CHECK, ALLac VECTORS

DI5K PARAMETER BLOCK FOR DRIVE NO. 01

Page 6: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22/B PRN PAGE 007

DA43 73DA0000 DPE1: DW TRANS,0000H ;TRANSLATE TABLEDA47 000000i10 DW iJmm0H,0000H ;SCRATCH AREADA4B bFDD8DDA DW DIRBUF,DPB0 ;DIR BUFF, PARM BLOCKDA4F 4DDE2EDE DW CSV1, ALVI ;CHECK, ALLOC VECTORS

DI5K PARAHETER BLOCK FOR DRIVE NO. 02

DA53 73DA0000 DPE2: DW TRANS, 8000H ;TRAN5LATE TABLEDA57 00000000 DW 0000H,0000H ;SCRATCH AREADA5B 6FDD8DDA DW DIRBUF,DPB0 ;DIR BUFF, PARK BLOCKDA5F aCDE6DDE DW CSV2,ALV2 ;CHECK , ALLOC VECTORS

1: •

~

DrSK PARAMETER BLOCK FOR DRIVE NO. 03

DA63 73DA0000 DPE3: DW TRANS,0000H ;TRANSLATE TABLEDA67 00000000 DW 0000H,0000H ;SCRATCH AREADA6B 6FDD8DDA DW DIRBUF,DPB0 ;DIR BUFF, PAR" BLOCKDA6F CBDEACDE DN CSV3,ALV3 ;CHECK, ALLOC VECTORS

SINGLE DENSITY SECTOR TRANSLATE TABLE

DA73 01010D13 TRANS: . DB l i 7,13,19 ;5ECTORS 1,2,3,4DA77 19050Bl1 DB 25,5,11,17 ;SECTORS 5,6,7,8DA7B 1703090F DB 23,3,9,15 ;5ECTURS 9,10,11,12DA7F 1502080E DB 21,2,8,14 ;SECTORS 13,14,15,16DAB3 141A060C DB 2O,26,6,12 ;SECTOR5 17,18,19,20DA87 1218040A DB 18,24,4,10 ;SECTORS 21,22,23,24DABB 1016 DB 16,22 ;SECTOR5 25,26

;DISK PARAMETER BLOCK FOR SINGLE DENSITY SINGLE SIDED DISKSWITH BLOCK SIZE BLKSZ =1024 BYTES 1 BLOCK

DPB0:

DABD lAm0 DN 26DAtiF 03 DB .,.

_.1

DA90 07 DB 7DA91 09 DB 0DA92 F200 DW 242DA94 3F00 DW 63DA9b ca DB -anr;

11L

DA97 00 DB 0DA98 1000 DW 16DA9A 0200 DW 2

;5EcrORS PER TRACK;BLOCK SHIFT FACTOR;BLOCK MASK;NULL MASK;DlSK 5IZE-l (NO. OF BLOCK5/DISK-l);NO. OF DIRECTORY ENTRIES MAX:-l;DIRECrORY ALOCATIDN SPACE "ASK~ 1 ST BYTE;5AME AS ABOVE, 2 ND BYTE;CHECK SIZE - (64 DIR ENTRIES DIV BY 4};ND. OF SYSTEM (NOT ACCESSABLE) TRACKS

DPBl : ;DI5K PARAMETER BLOCK FOR DOUBLE DEN., SINGLE SIDED DISKSWITH BLOCK SIZE BLKSZ =2048 BYTES i BLOCK

DA9C 3400 DW r:'l"j ;SECTORS PER TRACK.JL

DA9E 04 DB 4 ;BLûCK SHIFT FACTORDA9F 0F DB 15 ;BLOCK MASKDAA0 01 DB ;EXTENT MASKDAAl F200 DW 'iiP'i ;DI5K SIZE-l (NQ= OF BLûCKS/DISK-l>L'fi.

Page 7: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 810522/8 PRN

DAA3 7F00DAA5 C0DAAb 00DAA7 2000DAA9 0200

DWDBDBnwDW

11"\"'1i.t

iM.l"!l1i.

o"11"\""ii.

PAGE 008

;NO. OF DIRECTORY ENTRIES MAX.-l;DIRECrORY ALOCATION SPACE MASK, 1 ST BYTE;5AME AS ABOVE, 2 ND BYTE;CHECK SIZE;NOc OF SYSTEM (NOT ACCESSABLE) TRACKS

DPB2:

DAAB 3400DAAD 04DAAE 0FDAAF 0lDAB0 F200DAB2 7F00DAB4 C0DAB5 00DABb 2008DABB 0200

DPB3:

DABA 6800DAlle 05DABD IFnABE 03DABF F200DAC! 7F00DAC3 80DAC4 00DACS 2000DAC7 0200

PAGE

;DI5K PARAMETER BLOCK FOR SINGLE DEN., DOUBLE SIDED DI5KSWITH BLOCK SIZE BLKSl =2048 BYTES 1 BLOCK

DW 52 ;5ECTORS PER TRACKDB 4 ;BLOCK SHIFT FACTORDB j!l:' ;BLOCK MASK......1

DB ;EXTENT MASKDW 242 ;DISK SIZE-l (NO. OF BLOCKS/DISK-l)DW 1"''' ;NO. OF DIRECTORY ENTRIES MAX.-lLI

DB 192 ;DIRECTORY ALOCATION SPACE MASK, 1 ST BYTEDB 0 ;SAME AS ABOVE, 2 ND BYTEDW 7" ;CHECK SIZE.;ai,.

DW " ;NO. OF SYSTEM (NOT ACCESSABLE) TRACKS1..

;DISK PARAMETER BLOCK FOR DOUBLE DEN., DOUBLE 5IDED DI5KSWITH BLOCK SIZE BLKSI =4096 BYTES 1 BLOCK

DW 104 ;SECTORS PER TRACKDB 5 ;BLOCK SHIFT FACTORDB 7i ;BLOCK MASK.,)1

DB 3 ;EXTENT MASt<Dbl 242 ;DlSK SIZE-l (t40. OF BLOCKS/DISK-l)n

DW .. ,,"! ;NO. OF DIRECTORY ENTRIES MAX.-lJ.i..l

DB 128 ;DIRECTORY ALOCATION SPACE MA5K, 1 5T BYTEDB 0 ;SAME AS ABOVE, 2 ND BYTEDW 7"'1 ;CHECK SIZE.Ji..

DW 2 ;NO. OF SYSTEM (NOT ACCESSABLE) TRACKS

* f. * * f. t * f. * f. * * *** * * * *** * f. * f. f * * f.

* *f. END OF FIXED TABLES f

* t

* * f. * * f * * * * * * * * f. * * * * * f. * * * * * * * *

Page 8: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22i8 PRN PAGE 009

******************************************************'*** * * * * * * *********************************************************'

DAC9 FF BOOTFLAB: DB 0FFH ;SET TO 00 ON COLDBOOT

BOOT: ;5IMPLEST CASE 15 TO JUST PERFORM PARAMETER INITIALIZATION

DACA 3ECl f1VI A,0CIH ;SET IOBYTE TO: LST:=UL1:CON:=CRT:

DAce 320300 STA IOBYTE ;INITIALIZE THE lOBYTE; (l5T:=LPT:, CON:=CRT:)

DACF AF XRA A ;ZERO IN THE ACCUMDAD0 320400 STA CPMDRIVE ;LOC 0804 - CPM CURRENT DISK NO.DAD3 32C9DA STA BOOTFLAG

f------------------------------------------------------------------------------INITIALIZATION ROUTINES FOR LIST DEVIeES FOLLOW:

i------------------------------------------------------------------------------IF 60DB10 ;START CONDITIONAL FOR GODBOUT 1/0 BOARDXRA A ;INITIALIZE THE liû BOARDOUT 3 ;BY SENDING Aaa TO THE STATUS PORTENDIF ;STOP ASSEMBLIN6 FOR THE 60DBOUT ONLY

;ABOVE NOT NEEDED FOR CURRENT BOARD

IF DPlGMVI A,0EHOUT 01OUT 03"VI A,40HOUT 01OUT 03MVI A,0EEHOUT 01OUT 03MVI A,37HOUT 01OUT 03ENDIF

;UART INIT FOR DELTA PRODUCTS CPU BOARD;BRIN6 UART TO COMAND INSTRUCTION MODE;PGRT 1 15 UART ASTATUS;PORT 3 lS UART BSTATUS (ALSO TIME FILl);COMAND INSTRUCTION MODE - RESET UART

;MODE - BAUD RATE FACTOR = lbX;DISABLE PARITY, 8 BIT CHARACTER LENSTH

;COMAND INSTRUCTION MODE-TRANSM ENABLE,;DATA TERM READY, RECEIVE ENABLE, ERROR;RESET, REGUEST ro BEND (IF NEEDED);STOP ASSEMBLINS FOR THE DELTA PRODUCTS BRD.

IF MULTLIST;CONDITIDNAL ASSEMBLY FOR MICROMATION MULTI liD BOARD FûLLOWS

;MDDE SET:ASVNC,8 DATA &2 STOP BITS,NO PARITY

;WA5TE TIME AT 4MHl ••• #

A,0EEH

A~40HUART1C

;8251 UART INITIALIATION:MVI A,0EH ;THE5E FIRST TWO BYTES PUT 8251'5 IN MODE SETOUT UART1CNO?NOPMVIOUTNOPHOPMVI

Page 9: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22/B PRN PAGE 010

OUT UARTteNO?t~OP

KVI A,37H

OUT UART1C

;8253 INITIALIZATION:MVI A,0B6HOUT RTeMVI A,13OUT TIMER2XRA AOUT TIrtE~~2

ENDIF

;WASTE TIME AT 4HHZ •.••

;COMMAND WORD:ENABlE RXD &TXD, RTBf ~ DTRI;FlAES SET, ERROR FLAGS RESET .••

;5ET MODE OF 8253 COUNTER #2 (BAUD CLOCK)

;DIVIDE BV 13 OF MA5TER 2MH1. CLOCK

;END OF CONDITIDNAL ASSEMBLY

1F CEtiTLlST;8255 INITIALIZATION: SETS UP CENTRDNICS TYPE PRINTER DRIVER

MVI

OUT"VIOUTENDIF

A,0A8H

COMMANDA,0FFHDATAPORT

;DEFINE MODE: PORTA= MODEl {OUTPUT};PORTC= STATUS AAND MODE0 (INPUT);PORTB= DON:T tARE (SET TD MODES OUTPUT)

;TURN OFF DATA STROBE

;STOP CONDITIONAL ASSEMBLY FOR CENTLI5T

IF USERLST ;INSERT CUSTOM LIST DEVIeE INITIALIZATION IN THIS AREA

XRA

DAD9 D333DADB 3E01

DADb HFDAD7 D323 OUT TUARTAH

OUT TUARTBM~~H\}I A~

DADD D322 ~~ OUT TUARTACDADf D332 OUT IUARTSCDAE1~tl /~'p---M-N~I----A,10H lDAE3 Il3i~ Iv OUT TUARTAC!illiES 3E9~ef !'l\}I-!lJJjtl_~

D320 OUT TUARTASDAE9 3EC0 MVI A,0C0HDAEB D330 OUT TUARTBS

ENDIF

DAED C33DDB JMP GOCPM ;INITIALIZE AND 60 TO CP/M

WBOOT: ;SIMPLEST CASE 15 TO READ THE DI5K UNTIL ALL SECTDRS LOADED

DAF0 3EFFDAF2 32C9DA

DAF5 3100C4DAF8 0E00

MVI A,0FFHSTA BOOTFLA6 ;TELL THAT WE ARE WARM

LXI SP,ccP ;5ET UP STACK BElOW CP/MMVI C,0 ;SELECT DI5K 0

Page 10: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22!B PRN PAGE 011

DAFA CD0bFBDAFD CD03F8

CALLCALL

CSELD5KCHOME ;60 ro TRACK 00

DB00 062CDB02 0E00DB04 1602

MVI"VIMVI

B,NSECTSCf 0D,2

;B COUNTS t OF SECTORS TO LOAD;c HAB THE CURRENT TRACK HUMBER;D HAS THE NEXT SECTOR TO READ

NOTE THAT WE BEGIN BV READING TRACK 0, SECTOR 2 SINCE SECTOR 1CONTAIN5 THE COLD START LOADER, WHICH 15 SKIPPED IN AWARM START

DB06 2100C4LOADl :

DB09 C5DB0A D5DB0B ESDB0G 4ADB0D CD0CF8DB10 ClDB11 CSD812 CD0FF8

LXI H,CCP;lOAD ONE MORE SECTORPUSH BPUSH DPUSH HMOV C,DCALL CSET5ECPOP 8PUSH BCALL CSETDMA

;BASE OF CP/M (INITIAL LOAD POINT)

;SAVE SECTOR COUNT, CURRENT TRACK;5AVE NEXT SECTOR TO READ;5AVE DMA ADDRESS;GET SEcrDR ADDRESS TO RESISTER C;CONTROLLER SET SECTOR ADDRESS FROM RESISTER C;RECAlL DMA ADDRESS TO B,C;REPLACE ON STACK FOR LATER RECAlL;SET DMA ADDRESS FROM B,C

DB1S CD12F8DBiS B7DB19 C2F0DA

DRIVE SET rD 0, TRACK SET, SECTOR SET, DMA ADDRESS SETCAll DISKREAD ;DIRECT DI5K READ DF ONE SECTORORA A ;ANY ERRORS?JNZ WBOOT ;RETRY THE ENTIRE BOOT IF AN ERRDR OCCURS

BsorPM

DeRJI

NO ERRDR, "OVE TO NEXT SECTORPOP H ;RECALl DMA ADDRESSLXI D,128 ;DMA=DMA+128DAD D ;NEW DMA ADDRESS lB IN H,lPOP D ;RECALL SECTOR ADDRESSPOP B ;RECALL HUMBER OF SECTDRS REMAININ6

;AND CURRENT TRK;SECTORS=SECTORS-l;TRAN5FER TO CPf" IF ALL HAVE BEEN LDADED

D821 DlDB20 19

DBle ElDBiD 118000

DB23 05DB24 CA3DDB

DB22 Ci

DB27 14DB28 7ADB29 FE1BDB2B DA09DB

MORE SECTORS REMAIN ro lOAD, CHECK FOR TRACK CHANGEINR DMOV A,D ;SEcrOR=27?, IF 50, CHANGE TRACKSCPI 27Je LOADl ;CARRY 6ENERATED IF SECTOR(27

END OF CURRENT TRACK, GO TO NEXT TRACK

NXTTRK:DB2E 1601DB30 ae

MVIINR

;BEGIN WITH FIR5T SEcrOR OF NEXT TRACK;TRACK=TRACK+l

SAVE RESISTER STATE~ AND CHANGE TRACKSPUSH BPUSH DPUSH HCALl CSETTRK ;TRACK ADDRESS SET FROM RESISTER CPOP H

DB31 CSDB32 D5DB33 ESDB34 CD09FBDB37 ElDB38 DlDB39 Cl

POPPOP

DB

Page 11: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22/B PRN

DB3A C309DB JMP lOADl

..

PAGE 012

;FOR ANOTHER SECTOR

60CPM:END OF LOAD DPERATION. SET PARAMETERS AND GO rD CP/M

ûB3D 3EC3 Mil'! A,0C3H1 v J.

DB3F 320000 STA 0DB42 2103DA LXI H,BWBOOTDB45 220100 SHlD

DB4B 320500 5TA rJ

DB4B 21.06CC lXI H,BDOSDB4E 220600 5HLD b

DB51 018000 LXI B,80HDB54 CD0FF8 CALL CSETDMA

DB57 3AC9DA LDA BOOTFLAGliSSA FE00 CP! 0DB5C C2AlnB ,JNZ sacep

;C3 15 AJMP INSTRUCTION;FOR JMP TO WBOOT;CBIOS WBOOT ENTRY POINT;SET ADDRESS FIELD FOR JMP AT 0

;FOR JMP rD BDOS;BDOS ENTRY POINT;ADDRESS FIELD OF JUMP AT 5 TO BDOS

;DEFAULT DMA ADDREas IS BaH

;ARE WE CûLD?;NO, WE ARE WARM, SKI? INIT CYCLE

;*f***f********if**********************************f

;INIT THE IDPROM IN THE SYSTEM;BUT FIR5T WE MUST CHECK IF THERE 15 AN 1/0 PROM PRESENT,;AND MOVE THE JUMP TABLE AS REQUIRED

PROf1CHK:DB5F 2100F0 LXI H,IOPROMDBb2 7E MOV A,MDBb3 FEC3 CPI 0C3HDBb5 C2A1DB JNZ soee?DB68 2C INR LDBb9 2C INR 1

L.

DB6A 2C INR lDBbB JE MOV, A,ttDBbe FEC3 CPl 0C3HDBbE C274DB JNZ HELLODB71 CD7FDB CALL MOVECTORSDB74 0E09 HELLO MVI 1:,09DB76 i15E00 LXI D,516NONDB79 CD0bCC CALL BDOSD87(; C3A1DB ,JMP socep

;1S THE BYTE AJMP?;NO~

;MAVBE

;NO!;YES;CPM SEND MESS COMMAND;LDAD ADDR OF MESSAGE;SEND IT

MOVECTûRS:********f.f*********************************************i-f CHECKS PRO" FOR JUMP VECTOR ADDRESS AND MOVES THEM* TO 8105 IF NON-ZERO..Iff*II"II*f.i-*II*II******ffllll*II*I**f*I*lflfl*ltffl~f1

DB1F 1107F0DB82 2107DADBBS lA

LXILXI

AGA IN: lDAX

D,IOPROM + 7HH,BIOS + 7H[)

;ADDR OF NEW TABLE;WHERE THIS BIDS WANTS IT

Page 12: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22i8 PRN

DB8b FE00 CPI 0DB88 CA94DB '''1 SKIPITvi.

DB8B lA LDAX DUBac 77 MOV M,ADBSD 13 INX n

if

DBSE 23 INX HDB8F lA LDAX DD890 """1 MDV M,Aii

DB91 C39bDB Jr1P SKIP2DB94 r::"":!" 5KIPIT: INX HJ.. ...'

DB95 13 INX DDB96 :'\7 SKIP2: INX HL·j

DB97 "., INX Hi,.J

DB98 î3 INX DD899 13 INX DDB9A 7B NEXT: MOV A,EDB9B FE30 CPI 30HDB9D DAB5DB Je AGAINDBA0 C9 RET

PAGE 013

;15 THE HI BYTE 0? (IF IT 15, IT CANNDT;YES BE AREAL ADDRESS);NO, HOVE 2 BYTES

;MOVE POINTERS rD NEXT INSTRUCTION

;WHERE ARE WE?

;NDT nONE VET - LOOP AGAIN;FINI5HED - EXIT

DBAl 3A0400DBA4 4FIJBA5 C300C4

6üCCP~

LDAMOVJMP

ElCPMDRIVE

f.

;ENABLE THE INTERRUPT SYSTEM;CPM BOOT DRIVE;SEND TO THE CCP;60 TO CP/M FOR FURTHER PROCESSING

i

ERROR CHECKING READ AND WRITE RTNS FORMICROMATION CBIOS

AUGUST 1,1978

WRITEDBA8 CD5ADC CALL SETUP ;SELECT DISK, STEP TO CORRECT TRACKDBAB CD1EF8 CALL WRITEPROTECT ;SEiS Z IF DRIVE 15 PROTECTEDDBAE C2C2DB JNZ WRTOK ;IF ENABlED! CONTINUE

DBBl 1102DC LXI D,PROT~1ES ;WRITE PROTEeT MESAGEDBB4 CDb3DD CAll PRINT ;PRINT TT! ,

DBB7 CD09DA CALL CONINI ;WAIT FOR ACHAR ~ UNLOAD HEADDBBA FE03 CP! ,. ;CONTROl C?...'

DBBe CAF0DA JI WBOOT ;REBOOT IF SO, OTHERWISEDBBF C3A8DB JMP WRITE ;LOOP UNTIL NOT PROTECTED

WRTOKDBC2 3E15DBC4 C3CCDB

MVIJMP

A~DISKWRITE AND 0FFHREADWRITE

;lOW ADDRESS OF WRITE ROUTINE IN PROM

DaC7 CD5ADCDBCA 3E12

HEADCALLMVI

5ETUP ;5ELECT DRIVE, STEP TO CORRECT TRACKA~DI5KREAD AND 0FFH ;LDW ADDRESS OF READ ROUTINE IN PROM

Page 13: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22/B PRN

READWRITEDBCC 32D8DB STA RW+lDBCF AF XRA li

H

DBD0 3220FC r"-TJIo TRYl~Iti

DBD3 3221FC 5TA RETRYCOUNTRETRY:

DBD6 F3 DIDBD7 CD12F8 F~W CAlL DI5KREAD

PAGE iH4

;STORE ADDREES IN CALL INSTRUCTION

;ZERO OUT ERROR COUNTERS

;READ OR WRITE SECTDR;9ETS ZON SUCCE5SFUL READ;BETS CON TRACK ERRDR

DBDA FB ElDBDB 3E00 MVI A,0DBDD ca RI ;SUCCESSFUL READ. RETURN

;READ OR WRITE ERRDR HANDLERSDBDE DAEBDB Je TRACKEF:ROR ;READ AND WRITE SET CON TRACK ERRORDBEl 2121FC LXI H,RETRYCOUNTDBE4 34 INR M ; INCREMENT RETRYCOUNTDBE5 7E MOV A,MDBE6 Eb0F ANI 0FH ;lb TRIESDBE8 C2D6DB JNZ RETRY ;IF MORE THAN 16 RETRIE5, TRY RE5EEKIN6

TRACKERRORDBEB 2120FC LX! H,TRVIDBEE 34 INR ri ; INCREMENT NO o~ TRACK ERROR5DBEF 7E MOV A,"DBFt3 FE0A CPi 10 ;ALlOW ONLY 10 TRACK ERRORSDBf2 3E01 "VI A,l ;eP/" CONVENTION FOR PERMANENT ERRORDBF4 ca RI ;IF >10, RETURN AFAILURE

DBF5 CD03F8 CALL CHOME ;El9E, HOME THE HEADDBF8 3A4200 LDA TRACKIDBFB 4F MDV l" A

lt,H

DBFC CD09FB CALL CSETTRK ;RESEEK TO CORRECT TRACKDBFF C3DbDB JMP RETRY

PRDTMES:nC02 0D0A0A5052 DBne17 2041204E4F DBDeze 20414E4420 DBnC3C 0D0A0A284F DB

CR,LF,lF,~pROTECTED - INSERT~

t ANON-PROTECTED BISK': AND TYPE RETURN'CR,LF,LF, '{OR TYPE CTL CTO ABDRT}' ,CR,LF,'$'

DC5A 3A0DFCnC5D 4FnC5E 3A05FCDebi B9DCb2 C40bF8

*------------------------------------------------------------------SEIU?:*------------------------------------------------------------------;SELECTS REQüESTED DRIVE IF IT 15 NOT ALREADY SELECTED;STEPS TO REQUESTED TRACK;5ET5 UP CONTRDlLER TO TRANSFER DATA TO/FROM PROPER SIDE OF DISK

LDA NXTDISK ;GET NEXT DISK NO.MOV C,AlDA PRESDSK ;SET PRES D5K,CM? C ;EQUAL?CNZ CSElD5K ;IF NO, SELECT NEIl BISK

;****f.*****f.if.f.f.ff.fff.f.f**********f.

Page 14: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 31052218 PRN PAGE 015

;FIX FOR BUG IN C.l PRO";IF YOUR DOUBLER HAS ANY PROM VERSION OTHER THAN C.l, VOU DOH '1 NEED THIS

LDA RD5TAT ;6ET DRIVE STATUSANI 20H ;HEAD LOADED?CHZ CSELDSK ;IF NO, CALL CSELD5K TO LOAD HEAD

,;(C REG ALREADY HAB PROPER DI5K HUMBER);END OF FIX FOR BUG IN C.l PROM;*********************************

;6ET REQUESTED TRACK NUMBER

;SHIFT CARRY INTD BIT 0, SET CARRY =BIT 7;ROTATE IT BACK TO NORMAL

;5IDE = 00 FDR SIDE 0;5HIFT SIDE BIT INTO CARRY;COMPLEMENT CARRY

;GET TRACK 1 WE'RE ON;ARE WE ON REQUESTED TRACK?;IF NO, CALL CONTROLLER SETTRK ROUTINE

**

DCb5 3A4200 LDA TRACKlD[;68 4F MDV C,ADCt~9 3A04FC LDA TRACKDCbe B9 CMF' CDebD C409F8 CHZ CSETTRK

DC70 3A4D00 lDA BIDEDC73 0F RRCDC74 3F CHenC75 3A03FC LDA CTRBYTEDe7S 17 RAlDC79 0F RRCDC7A 3203FC aTA CTRBYTEDC1D C9 RET

* *

1/0 DRIVERS FOR THE DISK FOLLOWFOR NOW, WE WILL SIMPLY STORE THE PARAHETERS AWAY FOR USEIN THE READ AND WRITE SUBROUTINES

;VALID DRIVE NUMBER?;NO CARRY IF 4,5, •••

nC7E 210000Dcal 79nC82 FE04nca4 00

1------------------------------------------------------------------SELD5K: ;SELECT DISK GIVEN DY REGISTER Cf.------------------------------------------------------------------;DN ENTRY, BIT 0 OF RESISTER E CDNTAINS THE DRIVE STATua;81T 0 15 0 IF THE SELECTED DRIVE 15 OFF LINE (NEVER BEEN SELECTED

SINCE LAST WARM BOOTj;WE NANT TO TEST THE DENSITY OF THE Di5K IF IT 15 OFF LINE

LXi H,0100H ;ERROR RETURN CODEMDV A,CCPI NDRIVESRNC

Dcas 320DFC STA NXTDISK ;DOUBLER SCRATCH LOCa FOR MeXT DISKOP

DI5K NUMBER lB IN THE PROPER RANGE

ocsa 79nC89 iFDcaA D49CDC

MOVRAR

A,E

SETPARM

;GET DRIVE STATUS FOR EVALUATION;6ET BIT 0 - LOGIN STAT INTO CARRY;CARRY lB CLEAR IF DRIVE 15 JUST SEING;5ELECTED FOR THE FIRST TIME;SELECT DE5IRED DRIVE, TEST DENSITY

COMPUTE PROPER DiBK PARAMETER HEADER ADDRESS

Page 15: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE~ BIDB22!8 PRN

CALCDPEDeaD 3A0DFC lDA t~XTDI5K

nC90 6F MDV L,AnC91 2600 Mn~ H,0vi

nC93 29 DAD HOC94 29 DAD HDC95 29 DAD HnC96 29 DAD Iln

nC97 1133DA LXI D,DPBASEOC9A 19 DAD DDC9B C9 RET

PAGE 016

;8ET DISK, WHICH BAC AME PRESENT AFTER SEL.;L=DISK NUMBER O,1,2,3;HIGH ORDER ZERO;*2;*4;*8;*16 (SIZE OF EACH HEADERl

;HL=.DPBASE(DISKNOilb)

f------------------------------------------------------------------SETPARM: ;TEST DISK WHICH 15 BEIN6 5ELECTED FOR THE FIRST TIME*------------------------------------------------------------------

;ON ENTRY, CRES CONTAIN5 DISK NUMBER TG BE SELECTED

Dt9C CD06FB CALL CSELD5K ;5ELECT DISK ROUTINE IN PRO"DC9F CD03F8 CALL CHOME ;HDME THE DRIVEDCA2 0E02 MVI ,.. " ;5TEP TO TRACK 2lot,!

nCA4 CD09F8 CALL CSETTRK ;WHEN THE PRO" STEPS FROM TRACKS 0 OR 1;ro TRAC,:: 2, Il TESTS THE DENSITY;DENSITY INFO IN DENBYTE 15 NOW VALID

DCA? CD8DDC CALL CALCDPE ;CALCULATE DISK PARAMETER HEADER ADDRESSDCAA 0600 MtJI B,0 ;fOR DADDeAC 70 MDV M,B ;ZERO OUT SECTOR TRANSLATE POINTER IN DPEDeAD 23 INX H ;(IF DISK 15 SINGLE DENSITY, WE'LL REPLACE ITlDCAE 70 MOV M,BOCAF 3A00FE LDA RDSTAT ;CHECK FOR DOUBLE SIDED DISKnCB2 Eb40 ANI 40H ;IF BIT 6 15 LOW, DISK IS DOUBLE SIDEDDCB4 0EIE MVI C,DPB2-DPB0 ;OFFSET IN PAR" TABLE FOR DOUBLE SIDEDnCB6 CABBDC ,.,. DBL5lDD\Ji..

DCB9 0E00 11\)1 C,0 ;NO OFFSET FOR SINGLE SIDEDDBL5IDD

DCBB 3A01FC LDA DENBYTE ;NOW FIND DENSITY;FOR <C) PROM, DENBYTE, =0 FOR BD, 10H FOR DD;FDR <Cl} PROM, DENBYTE =0 FOR SD, 4 FOR DD

DCBE B7 ORA A ;DENBVTE =B?DCBF 3E8F MVI A,DPB1-DPB0 ;OfFSET IN PARM TABLE FOR DOUBLE DENSITYDCCl C2CBDC JNZ DBLDEN

;5IN6LE DENSITV.H ;NO OFFSET FOR SINGLE DENSITYH ;?OINT BACK TD BEGINNING OF DP HEADERM,TRANS AND 0FFH ;PUT IN LOW BYTE OF TRANSLATE TABLE POINTERHM,TRANS SHR 8 ;PUT IN HIGH BYTE OF TRANSLATE TABLE POINTER

DCC4 AF XRADCC5 28 DCXnCCb 3b73 MVIDCCB 23 INXnCC9 36DA MVI

DCCB al DBLDEN ADDDCCC 324900 ST:'lH

nCCF 0E09 "VIDeD! 09 DADnCD2 EB XCHG

CDENSIDEC,9B

;ADD OfFSET FOR' SIDES;5TORE IN SCRATCH FOR USE BV UTILITIES;INDEX INTD PARK HEADER TO DPB FIELD;HL NOW CONTAINS ADDRESS OF DPB ENTRY OF HEADER;SAVE IT IN DE

Page 16: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22/8 PRN PAGE 017

DCD3 4F MOV t,A ;MOVE DPB OFFSET TO CFOR DADDCD4 218DDA LXI H,DPB0 ;POINT rD BEGINNING OF PARM BLOCKSDen7 09 DAD B ;NOW HL POINT TO CORRECT PARM BLOCKDeDa EB XCHG ;NOW DE POINT TD CORRECT PAR" BlOCK

;RESTORE ADDRESS OF DPB ENTRY OF HEADER TO HlDcn9 73 MDV M,E ;PUT LOW BYTE OF DPB ADDRESS INTO DP HEADERDeDA 23 INX HDeDa 72 MDV M,D ;PUT HIGH BYTE OF DPB ADDRESS INTO DP HEADERDrue Cg RET

f------------------------------------------------------------------HOME: ;MOVE TO THE TRACK gm POSITION OF CURRENT DRIVE

TRANSLATE THIS CALL INTO ASETTRK CALL WITH PARAMETER 00f------------------------------------------------------------------

DCDD 0E00 MVI C,0

OCDF 79DCE0 324200DCE3 C9

SETTRK: ;SET TRACK GIVEN BY REGISTER CMDV A,CSTA TRACKl ;JU5T STORE TRACK NUMBERRET

******************1********1**************************li** * * * * * * ***************1*****************************1*********fi'

SECTRAti:

;SECTOR TRANSLATE ROUTINE;THIS ROUTINE HANDLES ONlY SINGLE BYTE SECTOR VALUES;AND SINGLE BYTE TRANSLATE TABLES;ON ENTRY, 8=O, C=LOGICAl SECTOR NUMBER, AND DE POINT TO

THE TRANSLATE TABLE;ON EXIT, H=0 AND L CONTAINS THE PHVSICAL SECTûR NUMBER

;IF DE=0000H, DO NOT TRANSLATE. JUST PUT MOVE BC INTO HL f

INCREMENT (TO REFERENCE TO SECTOR 1, NOT 0l, AND RETURN

;IF DE () 0000, WE ASSUME THE DI5K 15 SINGLE DENSITY;NORMALIZE CTO THE RANGE OF (0 TO 25) (BV SUBTRACTING 26 IF

t4ECESSARY);TRANSLATE WITH THE TABLE POINTED TO BV DE, AND, IF 26 WAS

SUBTRACTED, ADD IT BACK IN;RESULT l5 RETURNED IN HL (IT'S IN THE RANGE (1 rD 52»)

DCE4 69 MDV L,C ;J110VE Be (LOG SECT) TO HL (PHYS SECT)DrES 60 MDV H,B ;H 15 t~ow ZERO (BINeE BWAS)nCE6 23 INX li ;INCREMENT FOR PHYSICAl SECTOR NUMBERDCE7 7A MDV A,DDeES B3 DRA E ;DE=0000H?DCE9 CS R1 ;IF YES, RETURNd.

DCEA 2B DCX H ;DECR HL BACK TG LOGICAL SECT 1DCEB 79 1 MDV A,C

Page 17: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 810522/8 PRN PAGE 018

nCEC D61A r"!!'!' "il~Ul LO

DCEE DAF4DC Je UNDER26

DeFi 0blA MVI B,26DCF3 6F MDV L~A

UNDER2bDCF4 19 DAD DneFS 7E MOV A,MDCFb 80 ADD BneF7 2600 MVI H,0nCF9 6F MOV L,ADCFA C9 RET

;SECTDR NUMBER ( 26?

;IF NO, PUT 26 IN B {TG ADD IN LATER);PUT <C)-2b IN L REG

;NOW L 15 IN RAN6E OF 0-25;INDEX INTD TRANSLATE TABLE;GET PHYSICAl SECTOR NUMBER FROM TABLE;ADD OFFSET FOR SIDE 1

;PUT BACK IN LRES

i----------------------------------------------------------------------SET5EC: ;5ET SECTOR ROUTINE*---------------------------------------------------------------------

;GET DENSITY BYTE

;U5E SECTOR HUMBER IN ACCUMULATOR

;DOUBLE DENSITY;IF DOUBLE DENSITY, SECTOR 1 { 53?

;INITIALIZE SIDE TO 1;5IN6LE DENSITY?;MDVE SECTOR NUMBER TO ACCUMULATOR

;IF SINGLE DENSITY, SECTOR t < 27?;IF YES, SIDE=!, USE SEcrOR HUMBER IN C;SIDE 1;SET SIDE=1

;60 TO CONTROLlER SET SECTOR ROUTINE; (SECTOR HUMBER 15 IN CREG)

27

2b

CSET5EC

riAC,A

A,CSDSECT

SIDE0

;DECIDES IF DI5K 15 SINGLE OR DOUBLE SIllED;NORMAlIZES THE SECTOR NUMBER (1-26 IN SD, 1-52 IN DD};UPDATES SIDE;JUKPS TO CONTROLLER SET SEcrOR ROUTINEH,DENMAP ;POINT TO DENSITY TABLENXTDISK ;BET DISK HUMBERL ;INDEX INTO TABLEL,AA,MH,SIDEM,0A

DCFB 211bFC LXIDCFE 3A0DFC LDADD01 85 ADDDD02 bF MOVDD03 7E MOVDD04 214D00 LXIDD07 3600 "VIDJ:i09 B7 ORADDiA 79 l'tOVDD0B CAliDD '!.,

\.ft.

DDSE Db1A SUI

DD10 D618 SDSECT SUIDD12 FA18DD JM

DD1S 34 INRDDlb 3C INRDD17 4F MDV

DDlS C30CF8 SIDE0 JMP

******f.f.f.f.************************f.f.******ff.f.***ff.****fff.

* ** SIMPLE 1/0 HANDLERS (MUST BE FILLED IN BY USER) f.i *f.f.f.*******************f.f.***f.ff.lf.ff.ff.f**********f.f.ff***fil

~00D =m00A =

11,CRLF

EGUEau

HARDWARE UART CONSOLE ROUTINES0DH ;ASCII (CR)0AH ;<LF)

Page 18: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 810S22/8 PRN PAGE 019

CONST: ;CONSOLE STATUS, RETURN 0FFH IF CHARACiER READY, 00H IF NOT

DDIB 3A0AFE CONSTAT LDA UARTSTATDD1E E602 ANI .,

i.

DD20 ca R7~ L

DD21 3EFF t'lVI A,0FFHDD23 C9 RET

*' * * i * f

CONIN: ;CONSOLE CHARACTER INTO RESISTER ADD24 CDlBDD CALL CONSTATDD27 CA24DD JZ COt4INDD2A 3A02FE LDA UARTDATADD2D Eb7F ANI 7FHDD2F C9 RET

* i- f * i- f*' *

CONOUT: ;CONSOLE CHARACTER OUTPUT FROM REGISTER C

DD30 3A0AFE LDA UAF:TSTATDD33 Eb01 ANI 01DD35 CA30DD JZ CONOUTDD38 19 MDV AfCDD39 3202FE STA UARTDATADD3e C9 RET

PAGE

Page 19: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: BIOS22!B PRN

f.

PAGE 020

f.

LIST: ;THIS ROUTINE IMPLEMENTS THE 1/0 BYTE FUNCTION FOR L5T: DEVIeESi==============================================================================f. 1/0 BVTE FOR LIST DEVIeE 15 IMPLEMENTED AS FOLLOWS:* TTY =MULTLIST (MM HULTI 1/0 BOARD 5ERIAl PORTI1)* CRT =CONOUT (MM DOUBLER SERIAL PORT)* LPT =CENTLI5T (CENTRONICS 703/77q TYPE LIST DEVIeE)* ULl =ûPTIONAL DRIVER SELECTED BY USERi==============================================================================

IF NOT (BODBID OR SSMID OR DPIO OR U5ERlST OR MULTLIST OR CENTLIST)RET ;THEN RETURN BECAUSE IT 15 NOT SUPPORTEDENDIF

IF {BODBID OR SSMIO OR DPlG OR USERLST OR MULTLIST OR CENTLISTiLDA IOBYTE ;GET THE CURRENT 1/0 STATUSANI 0C0.HJZ ('MUlTLST ;Mfî NULTI 1/0 BRD SER!AL PORT AS LISTRAL ,,~-,-....

DD3D 3A0300DD40 EbC0DD42 CA5FDDDD45 17DD4b 0230DDDD49 17DD4A D260DD

11:.11"- CONDUTvil(\'"

RALJNC CENTlST

LIST1 :IF GODBIOIN 21HANI 41HCPI 1JNZ LIST1MDV A,COUT 20HENDIF

IF SSMIDIN l'1

i.

ANI 8tHCPI B0HJNZ LIST1"OV A,CCPI 0AHRZOUT "'1

.)

ENDIF

;DOUBlER CONSOLE AS LIST

;CENTRDNICS PARALLEL PRINTER DRIVER

;CONDITIGNAL FOR THE SûDBOUT 1/0 BOARD FOLLOWS:

-;B1T a 15 TRANSMITTER BUFFER EMPTY;81T 6 15 -DATA SET READY FROM PRINTER;NDT READY VET;lIST GETS CHARACTER IN CREGz;DATA PORT;BTOP ASSEMBLIN6 FOR THE aODBOUT ONLY

;LI5T ROUTINE FOR 55M 2P+25 1/0 BOARD

;PRINTER READY AND TX READY

;FOR AN AUTO LF DEVIeE

IF DPIOIti 01ANI 81HCPI 81HJNZ LIST1MDV A,COUT 00ENDIF

;LI5T ROUTINE FOR DELTA PRODUCTS CPU BOARD WITH 8251 UART;GET PRINTER STATUS;PRINTER READY AND TX READY;UART READY, DATA SET READY (BOTH);NOT READY, WAIl TILL READY

;PRINTER READY, OUTPUT DATA BYTE;5rop CONDITIONAL ASSEMBLV

Page 20: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 810522/8 PRN

IF USERLST

PAGE 021

;AREA FOR USER DEFINED LIST ROUTINE

DD4D D830DD4F E660DD51 CA4DDDDD54 79DD55 B7DD56 E25BDDDD59 Fb80

DD5B D331DD5D C9

DDSE C9

TUARTBOUT:INANIJZMOVORAJPOORI

TUARTB01:OUTRET

ENDIF

RET

MULTLST

TUARTBSTUARTBETUA~~iBOUT

A,CATUARTBOlBaH

TUARTB

;CHK STATUS;BUFFER EMPTY?;LOOP IF NOT;FETCH OUTPUT CHR;TEST PARITY;5KIP IF ALREADY nnD;INSERT PARITY BIT

;WRITE CHR;EXIT

;HEY WATCH OUT •. DON'T GET RID OF THIS <RET>

IF MUlTLI5T ;BEBIN CONDITIONAL ASSEMBLY FOR MM 1/0 BOARD SERIAL OUT

DD5F C9

INANICPIJNZMOVOUTENDIFRET

UARTIC8tH8lHMUlTLSTA,CUARTID

;GET STATUS;CHECK TO SEE IF TRAN5MITTER BUFFER 15 EMTPV-­;AND IF DSR 15 ACTIVE;WAIT TO SEND IT IF NOT'DI;GET CHARACTER TO OUTPUT;SEND Il TO LIST DEVIeE;STOP ASSEMBlING fOR THE MICROHATIDN 1/0 BOARD

CENTlSTIF CENTLISTXRA AIN STATUSRtl!HL

RALRAL'tl"J CENTL5T\IL

AKWAIT IN STATUSANI 80HCP! 80HJNZ AKWAITMOV A,CCP! 0AHRIORI 80HOUT DATAPORTOlfT PORTAUi

ANI 7FHOUT DATAPORTORI 80HOUT DATAPORTENDIF

DD60 C9 F:ET

;LIST ROUTINE FOR CENTRONICS 703/779 PRINTER;CLEAR CARRY FLA6;6ET STATUS BYTE

;CHECK BIT 5:PRINTER BUSY???

;CHECK BIT 7:/0BF??? (EMPTV=HI6H)

;6ET CHARACTER FROM CREG.;PRINTER 15 AUTO lINEFEED

;RESET DATA STRDBE BIT FIRST"$;OUT TO PRINTER;THIS SETS THE IGBF FLAG OF STATUS PORT;GENERATE DATA STROBE:BIT 7 OF PORTS

;END OF LIST ROUTINE FOR CENTRDNICS 779

Page 21: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE; BIOS22/8 PRN

ENDIF

PAGE 022

;END OF LIST DRIVER BLOCK ••• (DO NOT REMOVE~}

*'Il,LI5TST: ;RETURN LIST STATUS (0 IF NOT READY, IF READY)

DD61 AF

DD62 C9

XRAPUNCH:READER: RET

A ;0 15 ALWAYS OK TG RETURN

PRINT:DDb3 lA LDAX DDD64 FE24 CPI '$ t

DDbb ca RI

DDb7 4F MOV C,ADDbB CD0CDA CALL CONOUTlDDbB 13 INX DDDbC C3b3DD JMP PRINT

;6ET NEXT BYTE TD PRINT;END?

;OUTPUT CHARACTER TO CONSOLE;PDINT TO WEXT CHARACTER

;;********f.**********f.f.****f.****f.f.f.*********f.f.f.*****f.ff.''l'tt'f*f.

WARNIN6

END OF CODE HUST BE LESS THAN

THE VALUE OF ENDCODE

DD80 = ENDCODE EQU BIOS + 380H

f.f.f.f.f.f.f.**f.**i***f.*i*f.*f.****f.**f.*f.*f.*f.f.ff.if.f.f.f.f.f.f.i*****ffift*f'**

*i*f.*********if.f.f.i**************f.**********fff***f.****fff* t

* THE REMAINDER OF THE CBIOS 15 RESERVED UNINITIALIZED* DATA AREA, AND DOES NOT MEED TO BE APART OF THE* SYSTEM MEMORY IMAGE (THE SPACE MUST BE AVAILABLE,* HOWEVER, BETWEEN BEGDAT AND ENDDAT).

* *f.f.fff.f.f.f.*****f.f.f*****************************************

SCRATCH RAM AREA FOR BDOS USE

DDbF =DDbF

BE6DAT EQUDIRBUF DS

:;128

;BEGINING OF DATA AREA;DIREcrORV ACCESS BUFFER

DDEfDEmE

ALV0cava

DSOS

3132

;ALLOCATION VECTOR 0;CHECK VECTOR 0

Page 22: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 810522/8 PRN

DE2E ALVlDE4D CSVl

DEbD ALV2DE8C CSV2

DEAC ALV3DECB CSV3

DEEB = ENDDAT017C = DATSIZ

PAGE 023

DS 31 ;AlLOCATION VECTOR 1DS 32 ;CHECK VECTOR 1

D5 '7. ;AllOCATION VECTOR 2~.l

DS 32 ;CHECK l~ECTOR 2

DS 31 ;AlLOCATION VECTOR 3DS "1'\ ;CHECK VECTOR 3.JI.

EGU $ ;END OF DATA AREAEQU $-BEGDAT ;SIZE OF DATA AREA

DEEBf-------------------------------------

END

Page 23: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/bBIOS PRN PASE 001

tt.tl.,.l ••••••••••••••••• ' ••" ••"""""'."""'"***"lîlll'• • Ir •l CUSTOHIZED BIOS FOR MICROMATION 'DOUBLER' AS ÜSED NITH *• (C) OR <Cl} PROM (ON DOUBLER). •• SINGLE/DOUBLE DENSITY, SINGLE/DOUBLE SIDED. *l===============================================================.l NITH DRIVERS FOR ~M "ULlI 1/0 BRD IN SIN6LE USER·CONFIGURATION.t===============================================================.* COPYRIGHT (C) 1979, MICROMATION AND DIGITAL RE5EARCH. ** •t LAST UPDATED ON FEB 12, 1980 •l •t REV1SED FOR CAVRO STD SYSTE" *l VERSION 2.0 REV 6 OCT 27,1981 Jl •

"tl'tlltllt.t"'t.""'t""".""'**""l'll"t"t.,.tllllttlt.,.,••••••• l ••••••••••••*•••••••*,••••••••t",•••••••• t••••••••••••••••••••••••

0000 = TRUE EQU -1 FA(SE EQU, 0t•••••••••••••••••••** ••••••••••••••••1t••••••••*tt••• t.ta ••••••ttt••••••••••••'THE FOLlOWIN6 LABELS "AV BE USER DEFINED FOR DIFFERENT OPERATIN6 ENVIRON"ENTS:

.0038 =

fOOO =

0004 =

"SIZE

IOPROM

NDRIVES

EQU

EQU

EQU

56

OfOOOH

4

;5IZE OF OPERATIN6 SYSTE" IN Kll0BYTES; (CURRENTLY 4BK). THIS HUMBER "UST BE;CHAN6ED fOR lAR6ER SYSTEKS.

;NUMBER Of DISK DRIVES 5UPPURTED DY;THIS CBIOS

l=========================================================:::====~===============* 1/0 BYTE FOR LIST DEVIeE 15 IMPLE"ENTED AS FDllONS:• -TTY' = "ULTlIST ("M MULlI 1/0 BOARD SERIAt PORTlt)t 'CRT' = CONDUT (MM DOUBLER SERIAl PORT)* alPTn = CENTL15T (CENTRONICS 703/779 TYPE liST DEVIeE}* 'UL1- =OPTIONAl DRIVER TO BE SELECTED BY USER (SEE BÈlOW)l======~===========================================:== ===========:===~======~:=

==>UPDÀTED:2-12-S0

LIST DEVIeE EQUATES: (THESE COULD BE SET FAlSE TO SAVE BIDS ~PACE IfUSER LIST DRIVER IS TOO LARGE TO FIT OtHERNISE)

0000 =0000 =

;t1ULTLISTCENTL,~Sl .

EQUEQU

FAl5EFAL5E

;------------------------------------------------------------------------------LIST DEVICE OPTIONS: SET ONLY ONE FlA6 TRUE FOR DESIRED DRIVERAS ·ULI'

0000 ::FFFF ::0000 ::0000 =0000 ::

;NONESODBIOSS~UO

DPIOUSERlST

EQUEQUEQUEQUEQU

FALSETRUEFAL5EFAL5EFALSE

;NO ·UL1· FUNCTION DESIRED;SDDBDUT 1/0 BDARD AS L5T:;SOLID STATE "USIC 2S+P AS L5TJ;DELTA PRODUCTS CPU BOARD AS lST~

;5ET FLA6 TO INSERT USER DEflNED LST:;THIS CODE "UST BE IN5ERTED IN BI05 UNDER LIST:

Page 24: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/6BI05 PRN PAGE 002

;AND INITIALIZATION CODE UNDER (COlD) BDDT;------------------------------------------------------------------------------

'BIAS' IS ADDRESS OFFSET FROM 3400H FOR "E"ORY SYSTEMSTHAN 20K (REFERRED 10 AS IB I THROU6HOUT THE TElT).

9000 =C400 =CC06 =DAOO =

0003 =

;BIAS EQU ("511E-20)*1024CCP EQU 3400H+BIAS ;BASE OF CCPBDOS EQU CCP+S06H ;BA5E OF BDOSBIOS EQU CCP+1600H ;BASE OF BIOS;IOBYTE EQU 0OO3H ;INTEL 1/0 BYTE

CBIOS FOR MICRO"ATION DOUBLE DENSITY CONTRDLLER

Faoo =FBOO =FCOO =

CONTROLLERPRO"BUFF

EgUEQUEQU

OFBOOH ;ADDRESS Of CONTRDLlERCONTROLlER jADDRESS OF DOUBLER PRO" )CONTROlLER+400H ;ADDRESS Of SCRATCH RA"

* • * • • • • t • * • **• t • • t t t **** l • * • •• •* HARDWARE PORT DEFINITIONS •• *1 • t • t • • • t **• • • • *• • t • • • • • • t • • *

;FEOO = NRCONT EDU CONTROLLER+bOOHFEOO = RD5TAT EQU WReONTFEOl = NRCLK EQU NRCONT+lFE02 = UARTDATA EQU WRCONT+2FE05 = RD"ARK EQU NRCONT+5 ;LOADS THE HEADFEOA = UARTSTAT EQU "RCONT+OAH

l • *• l * t al. • • • • • * l • l l * • t • *t • J t

* t1 RAM VARIABLE DEFINITIons ll l'l .1. • 1 l l l l • 1 • 1 l t • • l l l l l • • *1 • t

;fCOl =. DENBVTE EQU BUFF+l ;0 fOR SIN6LDE DEN., 10 FOR DBL.DENFC03 = CTRBYTE EQU BUFF+3 ;RA" IMAGE OF RD5TAT OR WRCONTfC04 = TRACK EQU BUFF+4 ;TRACK NUMBER FOR CURRENT DRIVEFCOS = PRES~SK . ,EQU BUFF+S ;CURRENTLY LOS6ED IN DRIVE NO.FCOA :: SECT OR EQU BUFF+OAHFcon = NXTDISK EQU BUFF+ODH ;DRIYE NO. FOR NEIl 1/0 (READfWRITE)FCI0 = STEPTlt1E EQU BUFF+I0H ;SlEP 11~E IN M5ECFC16 = DENMAP ERU BUFF+16H ;fOR EACH OF 4 DRIVES,

;00 FOR SIN6LE DENSITY;10H FOR (C) PRO~

;O~H fOR «1)PRO" fOR DOUBLE DENSITYfC20 = TRYl EGU BUFF+20H ;CBIOS ERROR CHECKFC21 = RETRVCOUHT EQU BUFF+21H ;CB10S TRK./SECTDR ERRDR CHK~ BYTE

Page 25: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/6BI05 PRN PAGE 003

FC22 = CURRDRIVE E!lU BUFF+22H ;CBIOS DISK, LOSGED IN BEFORE WARnBOOT

•••••••••••••••••••••••••••••••••••••••••• •• LIST DEVI CE E9UATES •

• •t••••••••••••••••••••••••••••••••••••••• t

IF (I1ULTLIST OR CENTLISTljASSEMBLED ONLY FOR PORTS ON nICROnATION nULTI 1/0 BOARD

t==============================================================================

•• PORT E9UATES:CHANSE VALUE OF UARTIC TO RE-nAP THE PORT DECODING OF 1/0 BOARD

•• NOTE:DECODING OF BOARD 1/0 SPACE OCCURS ALONG 32 PORT BOUNDRIES• (I.E.:A5-A7 ARE SI6NIFICANT ADDRESS BITS FOR 1/0 BLOCKI.==============================================================================

UARTlC E9U 0 jCONTROl PORT OF 8251 Il (IC 4B)

.t.tt••• tt.tt ••ttt.ttttttt ••t.t•••••tt.tt.t•• tttttt.tt ••t.t •••••t••••t••tt •• t••

BASE EIW UART1C jE9UATE BASE FOR REST OF TABLEUARTlD E9U BASE+1 jDATA PORT OF UART Il

UART2C E9U BASE+4 jUARJ 12 (IC 5B)UART2D E9U BASE+5

UART3C EgU BA5E+8 ;UART 13 lIC 7BIUART3D EgU BASE+9

UART4C E!lU BASE+OCH jUART 14 (lC 9B)UART4D EgU BASE+ODH

"P8255 E9U BASE+IOH j8255 CONTROL RES. IIC lA!PORTC EOU BASE+ 11HPORTB HlU BASE+12HPORTA EgU BASE+\3H

RTC E9U BASE+\4H j8253 TlnER/COUNTER CONTROL PORT (IC 3BITIMER2 EOU BASE+15H jCOUNTER 12TIIlER\ EGU BASE+\bH jCOUNTER IlTIMERO E!lU BA5E+17H jCOUNTER 10

PORTO o'. tllU BASE+18H jPARALLEL OUTPUT LATCH (IC 2AIPORTI E!lU BASE+\9H jPARALLEL OUTPUT LAT CH (IC 3Al

USERPRT E!lU BASE+\CH jBASE OF USER DEFINED 1/0 PORTS (PORTS IC-IFH)

t•••ttt.t.t.ttt ••• tt.ttt •••• tt.tttttt.tttttttttttttttttttttttttttttttttttttttttEMDIF jSTOP CONDITIONAL ASSEMBLY

IF CENTUST

Page 26: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FllE: 22/6B10S PRN PAGE 004

;CONDITIONAL AS~ FOR "" "ULTI 1/0 BRD FOR USE NITH CENRDNICS PRINTER

COttttANDDATAPORTSTATUS

ERU P8255EQU PORTOEOU PORTe

ENDIF

;CO""AND NORD RESISTER;PARALLEL DATA OUTPUT LATeH TO PRINTER;STATUS BITS:OBF/=BIT 7

ACK/=BIT 6; BUSY=BIT 5jEND OF PORT DEFINITIONS FOR CENTlIST

IF USERLST

ENDIF

jAREA FOR USER LIST ROUTINE EQUATES

• • * l • l * • • *• • • • t • * *• ** * • * t t t l *• ** JUMP VECTORS TO ROUTINES IN CONTROLLER PRO" l

• t• ***• • • • • • t *1 * l t t • ** '* * t *•• t •

;F803 = CHOr1E EQU PRO"+3 iHO"ES THE DISKF80ô = CSELD5K EQU PRO"+6 jSELECT5 DRIVE POINTED TO BY CREG

;AND lOADS HEADF809···= CSETTRK EGU PROtt+9 iSTEP5 DRIVE TO TRACK (C)F80C = CSETSEe EQU PROtt+OCH ;5E1 S~CTOR NU"BERFBOF = CSETDKA EGU PROtt+OFH . ;SET D"A ADDRESSF8t5 = DlSKWRITE EQU PRO"+15H ;NRITE SECTORF812 = DI5KREAD EQU PROtt+12H ;SECTOR READF81D = 'SETDEN EQU PRO"+IBH ;1EST DENSITY OF CURRENT DRIYEFBIE = WRITEPROTEC1 EQU PROt1+1EH ;CHECK FOR WRITE PROTECT

* l • • 1 *t l • t * • t t • • *• • • l • • • • l • • t

DAOO OR6 BIOS jORI6IN OF THIS PR06RA"

t • *• t • t • • t • *• *• • • • • • • • t • • • • • *

002C ::

0000 ::0004 =0042 =•0049 ::004D ::

;N5ECTS;BOOTBA5ECPf1DRIVETRACKIDEN5IDESIDE

EQU

EQUEQUEQUEQUEQU

($-CCP)J128

oBOOTBASE+4BOOTBASE+42HBOOTBASE+49HBOOTBASE+4DH

;WAR" START SECTOR COUNT

;BOTTDM OF USABLE "E"ORYjlOC. 04 OF PAGE 00. CURRENT CPK nISK;1EMPORARY STORAGE FOR TRACK NU"BER;INFO ON DENSITY AND SIDE FOR UTILITIES

~ ../~

/:lN,~ t • t • • • • • • • t • t t t t t t t t t t t t • • • t t( \"1 ; • •

* JU"P VECTORS FOR INDIVIDUAL SUBROUTINES •• USED BV E"TIRE SYSTE~ •

• •••••••••••••••••••••••••••••••DAOO C3CADA J~P BOOT jCOLD START

Page 27: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/6BI05 PRN PAGE 005

DA03 C3D9DADAOb C3FFDCDA09 C30BDDDAOC C314DDDAOF C321DDDA12 C341DDDAIS C341DDDAtB C3CIDCDAIB C3b2DCDAlE t3C3DCDA2I C3DFDCDA24 C30FFBDA27 C3ABDBDA2A C38CDBDA2D C340DDDA30 C3CSDC

BWBOOT Jt1PJ"P

CONINl Jt1PCONDUTt J"P

JtlPJI'IP

. JI1P

Jt1PJ"PJ"PJt1PJKPJMPJt1PJt1PJKP

WBOOTCON5TCONlNCONOUTLISTPUNCHREADERHO"E5ELD5KSETTRK5ET5ECCSETD"AREADWRITELl5TSTSECTRAN

;WARtt START;CONSOLE STATUS;CONSOLE CHARACTER IN;CONSOLE CHARACTER OUT;LI5T CHARACTER OUT;PUNCH CHARACTER OUT;READER CHARACTER OUT;BI05 "OVE HEAD TD HO"E POSITION;B105 SELECT DI5K <nOESN'T ACTUALLY SELECTS)JBI0S SET TRACKJBI0S SEl SECTOR;CONTROLLER SET DMA ADDRESS;BI05 READ DISKjBIOS WRITE D15K;RETURN LIST STATUSjSECTDR TRANSLATE

• • * t ** t • t *• • **t • t • t • • t * ** *• **• •* FIXED DISK PARA"ETER BLOCK TABLES FOR FOUR •• DRIVE SYSTEM ** *•• •• •••• , • •*• •• • *• t t • • t • • • 1 *t

DA33 =;DPBASE EQU ;BASE Of DI5K PARA"ETER BLOCKS

Page 28: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/6BIOS PRN PAGE 006

SINGLE DENSITY BECTOR TRANSLATE TABLE

;DA73 01070D13 TRANS: DB 1,7,13,19 ;5ECTORS 1,2,3,4DA77 19050Bl1 DB 25,5,11,17 iSECTOR55,6,7,8DAJB 1703090F DB 23,3,9,15 ;SECTDRS 9,10,11,12DA7F 15020aOE DB 21,2,8,14 ;SECTDRS 13,14,15,16DA83 141AObOC DB 20,26,6,12 ;SECTORS 17,18,19,20DA87 1218040A DB 18,24,4,10 jSECTORS 21,22,23,24DABB 1016 DB 16,22 ;SECTORS 25,26

;DI5K PARA"ETE~ BLOCK FOR SINGLE DENSITY SINGLE SIDED DI5KS; WITH BLOCK SIZE BLKSI =1024 BYTES 1 BLOCKDPBO:

DA8D lAOO DW 26 jSECTOR5 fER TRACKDABF 03 DB 3 ;BLOCK SHIFT FACTORDA90 07 DB 7 ;BLOCK "A5KDA91 00 DB 0 ;NULl "A5KDA92 F200 DN 242 ;DISK SIZE-l (NO. Of BlDCKS/DISK-l)DA94 3FOO DM 63 ;NO. OF DIRECTORY ENTRIE5 "AX.-lDA96 CO DB 192 jDIREtTDRY AlDCATIDN SPACE "ASK, 1 ST BYTEDA97 00 DB 0 ;SA"E AS ABOVE, 2 ND BYTEDAlla 1000 DN 16 ;CHECK SIZE - (64 DIR ENTRIES DIV DY 4)DA9A 0200 DM 2 .;NO. OF SYSTE" (NOT ACCESSABLE) TRACK5

;DPBl: ;DI5K PARA"ETER BLOCK FOR DOUBLE DEN., SINGLE SIDED DISK5

NITH BLOCK SIZE BLKSZ =2048 BYTES 1 BLOCK

DA9C 3400 DN 52 ;SECTORS PER TRACKDA9E 04 DB 4 jBLOCK SHIFT FACTORDA9F OF DB 15 jBlOCK "ASKDAAO 01 DB 1 ;EXTENT "ASKDAAI F200 DN 242 ;DISK 511E-l <NO. OF BLOCKS/DISK-l)DAA3 7FOO DW 127 ;NO. OF DIRECTORY ENTRIES "AX.-lDAA5 CO DB 192 ;DIRECTORY ALOCATION SPACE "ASK, 1 ST BYTEDAA6 00 DB 0 ;SA"E AS ~BOVE, 2 ND BYTEDAA7 2000 DN 32 ;CHEtK SIZEDAA9 0200 DN 2 ;NO. OF SYSTE" (NOT ACCESSABLE) TRACKS

;DPB2: ;DISK PARA"ETER BLOCK FOR SINGLE DEN., DOUBLE SIDED DISKS

WITH BLOCK SIZE BLKSZ =2048 BYTES 1 BLOCK

DAAB 3400 DN 52 jSECTDRS PER TRACKDAAD 04 DB 4 ;BLOCK SHIFT FACTORDAAE OF DB " 15 jBLOCK "ASKDAAF 01 "or-DB 1 jEXTENT I1A5KDABO F200 DN 242 ;DI5K 511E-1 (NO. Of BLOCKS/DI5K-l)DAB2 7FOO DW 127 jHQ. OF DIRECTORY ENTRIES KAX.-lDAB4 CO DB 192 jDIRECTORY ALOCATION SPACE MASX, 1 ST BYTEDAB5 00 DB 0 ;SA"E AS ABOVE, 2 ND BYTEDABb 2000 DW 32 ;CHECK SIZEDAB8 0200 DW 2 ;ND. OF SYSTE" (NOT ACCESSABLE) TRACKS

;DPB3: jDISK PARAMETER 8LOCK FOR DOUBLE DEN., DOUBLE SIDED DI5K5

WITH BLOCK SIZE BLKSZ =4096 BYTES 1 BLOCK

Page 29: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 221bBIOS PRN

DADA b800DABC 05DA BD IFDABE 03DABF F200DAC1 7FOODAC3 80DAC4 00DACS 2000DAC7 0200

DWDBDBDBDMDWDBDBDWDM

PAGE 007

1045313242127128o322

jSECTORS PER TRACK;BlOCK SHIFT FACTOR;BlOCK "A5K;EXTENT "A5K;DI5K 512[-1 <NO. OF BLOCKS/DI5K-l)jNO. OF DIRECTORY ENTRIES "AX.-l .;DIRECTORY ALOCATION SPACE MASK, 1 ST BYTE;SAME AS ABOVE, 2 ND BYTEjCHECK SIlEiND. Of SYSTE" (NOT ACCESSABLE) TRACKS

.,PAGE

* t • • *• • • • *• • *• • • • l **• *• • * t l • l

• t• END Of FIXED TABLES •

• •*••• **• *•• *• ** l * • '. ***t t t * l t ••

••••••••••••••••••••••••••••••••••••••••••••••••••••••tt.

• • • • t • • *t.,.ttttt••••••tt••~.t.tt ••ttt.t••t.ttt.t ••ttt•••*t.tt,.t

DAC9 FFj

BOOTFlA6: DB OFFH jSET TO 00 ON COlDBOOT

DAtA 3ECl

DACC 320300

DACF AFDADO 320400DAD3 32C9DA

BOOT: ;SIKPLE5T CASE IS TO JUST PERFOR" PARAMETER INITIAlIZATION

"VI A,OCIH jSET IOBYTE TO: L5T:=UL1:; CON:=CRT:

STA IOBYTE ;INITIALIZE THE IOBYTE;(lST:=lPT:, CON:=CRT:)

XRA A ;ZERO IN THE ACCU"STA CPI1DRIVE ;LOC 0004 - CP" CURRENT DISK NO.STA BOOTFLA6

l------------------------------------------------------------------------------; INITIAlIIATION ROUTINES FOR LIST DEVIeES FOLLOW:t------------------------------------------------------------------------------

IF GODBIO ;START CONDITIONAL FOR 60DBOUT 1/0 BOARDXRA A jINITIALIZE THE 1/0 BOARDOUT 3 jBY SENDIN6 A00 TO THE STATUS PORT

; ~NDIF iSTDP ASSE"BLING FOR THE 60DBOUT ONLY. ;A~qYf~OT NEEDED FOR CURRENT BOARD

IF OPIO"VI A,OEHOUT 01OUT 03"VI A,40HOUT 01OUT 03t1VI A,OEEH

;UART INIT FOR DELTA PRODUCTS CPU BOARDjBRIN6 UART TO CO"AND INSTRUCTION "ODEjPDRT 1 15 UART ASTATUS;PORT 3 15 UART BSTATUS (ALSO TI"E FILL);CO"AND INSTRUCTION "ODE - RESET UART

;~ODE - BAUD RATE FACTOR = tôI

Page 30: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

.~

FllE: 22/6BI08 PRN PAGE 008

OUTOUT"VIOUTOUTENDIF

0103A,J7H0103

;DISABlE PARITY, 8 BIT CHARACTER LEN6TH;;COI'IAND INSTRUCTION MODE-TRANS" ENABLE,;DATA TER" READY, RECEIVE ENABLE, ERROR;RE5ET, REQUEST TO SEND (IF NEEDED)j5TOP ASSE"BLINB FOR THE DELTA PRODUCTS BRD.

IF t1ULTLIST;CONDITIONAL ASSEMBLY FOR "ICROMATION l'IULTI 1/0 BOARD FOLLOWS

;;NASTE Tl"E AT 4"HZ ••••

;"ODE SET:ASYNC,B DATA &2 STOP BITS,NO PARITY

;CO""AND WORD:ENABLE RXD ~ TID, RTSf l DTRI;FLABS SET, ERROR FLA6S RESET•••

;;NASTE TIKE AT 411HZ ••••

A,40HUARTIC

A,OEEHUARTIC

A,37H

;8251 UART INITIALIATION:MVI A,OEH iTHESE FIR5T TWO BYTES PUT 8251'5 IN MODE SETOUT UARTIC ;NOP ;WASTE Tl"E AT 4"HZ ••••NOP"VIOUTNOPNOPl'lVIOUTHOPHOP"VI

OUT UARTIC

;8253- INITIALIZATION:"VIOUT"VIOUTIRAOUTENDIF

A,OBôHRTCA,l~TUtER2ATI"ER2

rseT "ODE Of 8253 COUMTER 12 (BAUD CLOCK);;DIVIDE DY 13 OF "ASTER 2KHZ. ClOCK

;;END OF CONDITIONAL ASSEKBLY

IF CENTLIST;8255 INITIALIZATION: SETS UP CENTRONICS TYPE PRINTER DRIVER

KVI A,OABH

OUT CO""AND"VI A,OFFHOUT DATAPORTENDIF

iDEFINE "ODE: PORTA= "ODEt (OUTPUT);PORTC= STATUS AAND "ODEO (INPUT);PORTB= DON'T CARE (SET TO "ODEO OUTPUT);jTURN OFF DATA 5TROBE;;STD? CONDITIONAL A5SE"BLY FOR CENTL15T

IF USERLST ;IN5ERT CUSTO" LIST DEVIeE INITIALIZATION IN THIS AREA

ENDIF

DAD6 C32bDB JMP SOCP" jlNITIAlIZE AND 60 TO CP/";WBOOT: ;SIHPLE5T CASE 15 TO READ THE DISK UNTIL ALL 5ECTORS LOADED

Page 31: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/6BI05 PRN PAGE 009

DAD9 3EFF "VI A,OFFHDADB 32C9DA STA BOOTFLA6 ;TElL THAl WE ARE NAR"

DADE 3100C4 LXI SP,CCP ;5E1 UP 5lACK BELON CP,"DAEl OEOO "VI C,O jSELECT DISK 0DAE3 CnObFB CALL CSELDSKDAE6 Cn03F8 CALL CHO"E ;60 10 TRACK 00

DAE9 062C "VI B,NSEClS ;8 COUNTS 1 Of SECTOR5 TO LOADDAEB OEOO "VI C,O je HAS THE CURRENT TRACK HUMBERDAED 1602 "VI D,2 jD HA5 THE NEXl SECTDR TO READ

NOTE THAT WE BEGIN BY READING TRACK 0, SEtTOR 2 SINCE SECTOR 1CONTAINS THE COLD START LOADER, WHICH 15 SKIPPED IN ANAR" START

DAEF 2100C4

DAF2 CSDAF3 D5DAF4 E5DAF5 4ADAF6 CDOCFBDAF9 CtDAFA CSDAFB cnOFFB

LXI H,CCPLDAD1: ;lOAD ONE "ORE SECTOR

PUSH BPUSH DPUSH H"DV C,DCALl CSETSECPOP BPUSH B

.CALL CSETD"A

jBASE OF CP," (INITIAL LOAD POINT)

;SAVE SECTOR COUNT, CURRENT TRACKiSAYE NEXl SEtTDR TO READ;SAVE D"A ADDRESS;6ET 5ECTOR ADDRESS TO RESISTER CjCONTROLlER SET SECTOR ADDRESS FRDK RESISTER C;RECALl D"A ADDRESS TO B,C;REPlACE ON STACK FOR lATER RECALl;SET D~A ADDRESS FROM B,C

DAFE CD12FBDBOI B7DB02 C2D9DA

DB05 ElDBOb;.J 18000D809 19DBOA DlDDOB Cl

DBOC OS .'DBOD CA26DB

DB10 14DBI! 7rtDB12 FEIBDB14 DAF2DA

DRIVE SET TO 0, TRACK SET, SECTOR SET, D"A ADDRESS SETCALl DISKREAD ;DIRECT DI5K READ OF ONE SECTORORA A JANV ERRORS?JNZ WBOOT ;RETRY THE ENTIRE BOOT IF AN ERROR OCCURS

NO ERROR, "OVE TO NEXT SECTORPOP H jRECAlL D"A ADDRESSLXI D,128 ;DMA=D"A+128DAD D ;NEW DMA ADDRESS 15 IN H,LPOP D iRECAll SEtTOR ADDRESSPOP B. ;RECALl NU"BER OF SECTORS REMAININ6

jAND CURRENT TRKDCR B ;SECTORS=5ECTORS-lJI 60CP" jTRANSFER TO CP/" IF ALL HAVE BEEN LOADED

"ORE SECTORS RE"AIN TO LOAD, CHECK FOR TRACK CHANSEINR D-"OV A,D ;SECTOR=27?, IF 50, CHAN6E TRACKSCPI 27JC LOADl ;CARRY 6ENERATED IF SECTOR<27

END OF CURRENT TRACK, GO TO NEXT TRACK

DB17 1601DB19 OC

NXTTRK:"VIINR

D, 1C

;BE6IN WITH FIR5T SECT OR OF NEll TRAC~

;TRACK=TRACK+l

DBlA CSDBIB DS

SAVE RESISTER STATE, AND 'CHANGE TRACKSPUSH BPUSH D

Page 32: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/6B105 PRN PAGE 010

DB1C ES PUSH HDBID CD09FB CALl CSETTRK ;TRACK ADDRESS SET FRD" RESISTER CDB20 El POP HDB21 D1 POP DDB22 Cl POP BDB23 C3F2DA J~P LOADI ;FOR ANOTHER SECTOR

* • 1* * *

; END OF LOAD OPERATION, SET PARA"ETERS AND 60 TD CP,"SOCP":

DB26 3EC3 "VI A,OC3H ;C3 15 AJ"P INSTRUCTIONDB~B 320000 STA 0 ;fOR J"P 10 NaDOTDB2B 2103DA LXI H,BNBOOT ;CBI05 NBOOT ENTRY POINTDB2E 220100 SHLD 1 ;SET ADDRESS FIELD FOR J"P AT 0

DB31 320500 STA 5 ;FOR J"P TO BDOSD834 210ôCC LXI H,BDOS ;BDOS ENTRY POINTDB37 220600 SHLD b jADDRESS FIELD OF JU"P AT 5 TO BDOS

DB3A 018000 LXI B,BOH ;DEFAUlT ~A ADDRESS IS SOHDB3D CnOFFB CALL CSETDttA

DB40 3AC9DA LDA BOOTFLA6D843 FEOO CPI 0 jARE NE COLD?D845 t285DB JNZ 60CCP ;NO, NE ARE MAR", SKIP INIT CYCLE

jINIT THE IOPRO~ IN THE SYSTE"jBUT FIRST ME "UST CHECK IF THERE IS AN 1/0 PRO" PRESENT,jAND "OVE THE JU"P TABLE AS REQUIRED

PRO"CHK:DB4B 2100FO LXI H,IOPRO"DB4B 7E "DV A,"DB4C FEC3 CPI OC3HDB4E C2B5DB 'JNZ SOCCPDB51 2C INR LDB52 2C INR lDB53 2C INR L

.DB54 JE "OV A,"DBS5 FEC3 CPI OC3HD857 C285DB JNZ 60cepDBSA ~D63DB CAll t10VECTORSDB5D CDOOFO CALL IOPROH

DBbO C385DB J"P 60CCP

;IS THE BYTE AJ"P?;NO!;t1AYBE

jND!JYESjl116HT AS WELL SI6NON WHILE WE ARE HERE;(THIS 15 lAKEN CARE Of ELSEWHERE IF;THERE 15 ND IOPROK)

HOVECTORS:tt ••• t •• a••• t••••••••••••••••••••••• t ••• t••• t.,t.tt •••*tt CHECKS PROH FOR JUMP VECTOR ADDRESS AND "OVES THE"t Ta B10S IF NON-ZEROttt.tattttt.t.at.tt •• tttt •••••••••••••• ttt ••• tt •••••••••

Page 33: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/6BIOS PRN PAGE 011

DB63 1107FO LXI D,IOPRO" + 7H ;ADDR OF NEW TABLEDBbb 2107DA LXI H,BIOS + 7H jWHERE THIS BIOS NANTS IlDB69 lA AGAIN: LDAX DDB6A FEOO CPI 0 ;IS THE HI BYTE O? (IF IT 15, Il CANNOTDBbC CA7BDB JZ SKIPIT ;YES BE AREAL ADDRESS)DB6F lA lDAX D ;NO, MOVE 2 BYTESDB70 77 "OV ",ADB7! 13 INX DD872 23 INX HDB73 tA LDAX DDB74 77 "OV ",ADB75 C37ADB JMP SKIP2 ;MOVE POINTERS 10 NEXI INSTRUCTIO~

DB78 23 SKIPIT: INX HDB79 13 INX DDB7A 23 SKIP2: IHX HDB7B 23 INX HDB7C 13 INX DDB7D 13 INX DDB7E 7B NEll: "OV A,E ;NHERE ARE NE?DB7F FE30 CPI 30HDBBI DA69DB Je A6AIN ;NOT DONE VET - lOOP A6AINDB84 C9 REl ;FINI5HED - EXIT

Page 34: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/bBIOS PRN PAGE 012

READDBAB CD3EDC CALl SETUP ;SElECl DRIVE, SlEP ID CORRECT lRACKD8AE 3E12 "VI A,DISKREAD AND OFFH ;lDW ADDRESS OF READ ROUTINE IN PROM

READWRITEDBBO 32BCDB STA RN+l ;STORE ADDRESS IN CALl INSTRUCTIONDBB3 AF XRA ADBB4 3220FC STA TRYl jZERO OUT ERROR COUNTERSDBB7 3221FC STA RETRYCOUNT

RETRV:DBBA F3 DIDBBB CD12FB RN CALL DISKREAD jREAD OR NRITE SECTOR

;SETS ZON,SUCCESSFUl READJSETS CON TRACK ERRDR

DBBE FB ElDBBF 3EOO "VI A,ODDt! CS RZ jSUCCESSFUL READ. RETURN

;READ OR WRITE ERROR HANDlERSDBC2 DACFDB Je TRACKERROR ;READ AND WRITE SET CON TRACK ERRDRDBCS 2121FC LXI H,RETRYCOUNTDBCS 34 INR ft ;INCREMENT RETRYCOUNTDBC9 7E MDV A,"DBCA EbOF ANI OFH ;16 TRIESDsee C2BADB JNZ REIRY ;IF "ORE THAN 16 RETRIES, TRV RESEEKIN6

TRACKERRORDB'CF 2120FC LXI H,TRYlDBD2"34 INR " ;INCRE"ENT NO OF TRACK ERRDRSnBD3 JE "DY A,"'DBD4 FEOA CPI 10 ;ALLOW ONlY 10 TRACK ERRORSDBD6 3E01 "VI A,l ;CP/" CONVENTION FOR PER"ANENT ERRORDBDB ca RZ jIF )10, REIURN AFAIlURE

DBD9 cn03FB CALL CHO"E jELSE, HOttE THE HEADDBDC ·.3A4200 LDA TRACKIDBDF 4F MDV C,ADBEO CD09FB CAlL CSETTRK ;RESEEK TO CORRECT TRACKDBE3 C3BADB J"P RETRY

PROTHES:DBEb ODOAOA5052 DB

'DBFB 2041204E4F DBDelO 20414E4420 DBDC20 onoAOA284F DB

CR,LF,lF,'PROTECTED - IN5ERT') ANON-PROTECTED DISK'J AND TYPE RETURN'CR,LF,LF,'(OR TYPE CTL CTO ABOR1)',CR,LF,'.'

;t------------------------------------------------------------------SETU~;,,/·

*---~--------------------------------------------------------------;SELECTS REQUESTED DRIVE IF Il IS NOl ALREADY SELECTED;STEPS TO REQUESTED TRACK;SETS UP CONTROLLER TO TRAN5FER DATA TO/FRO" PROPER SIDE OF DI5K

OC3E 3AODFCDC41 4FDC42 3A05FCDC45 B9

LDAMDVlDACM?

NXTDISK,C,APRESDSKC

;6ET NEXT DI5K NO.

;6E1 PRES DSK.jEQUAL?

Page 35: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/6BI05 PRN PASE 013

DC46 C40bF8 CNZ CSELD5K ;IF NO, SELECT MEXl DI5Kjttt.tltt•• t.*._•• tt•••• ,t••••••• t;FIX FOR BUS IN Cil PRO";IF YOUR DOUBLER HAS ANY PROM VERSION OTHER TH AN C.1, VOU DON'T MEED THIS

lDA RD5TAT ;6ET DRIVE STATUSANI 20H jHEAD LOADED?CNZ CSELD5K ;IF NO, CALL CSELDSK rD LOAD HEAD

; j(C REG AlREADY HAS PROPER DISK HUMBER);END OF FIX FOR BUS IN Cil PRO" 'j.talt••••• t•• tt ••••••••••, •• tt.tt

DC49 3A4200 lDA TRACKI ;6ET REQUESTED TRACK NU"BERDC4C 4F "OV ,C,ADC4D 3A04FC lDA TRACK ;6ET TRACK 1 WE'RE ONDCSO 89 C"P C jARE NE ONREQUESTED TRACK?DeSl C409FB CNZ CSETTRK jIF NO, CALl CONTROLlER 5ETTRK ROUTINE

nCS4 3A4DOO lDA SIDE ;SIDE =00 FOR SIDE 0DeS7 OF RRC ;SHIFT SIDE BIT INTO CARRYDC58 3F c~c ;COMPLE"ENT CARRYDC59 3A03FC lDA CTRBYTEDC5C 17 RAL ;SHIFT CARRY INTO BIT 0, SET CARRY =BIT 7DC5D OF RRC ;RDTATE Il BACK TO NORMALDCSE 3203FC 5TA CTRBYTEOC61 C9 RET

• •t •

1/0 DRIVERS fOR THE DI5K FOLlOWFOR NOM, NE NILl SI"PLY STORE THE PARA"ETERS AMAY FOR USEIN THE READ AND NRITE SUBROUTINES

;VALID DRIVE HUMBER?jNO CARRY IF 4,5, •••

DCb2 210000'DC65 79DC66 FE04DC68 DO,

.-------~-----------------------------.-----------------------------~ElDSK: ;5ELECT.DISK 6IVEN~BY REstSTER C.------------~--'-,~,;:-----------------------------------------------;ON ENTRY, BIT 0 OF RE6ISTER E CONTAINS THE DRIVE STATUS;811 0 IS 0 IF THE SElECTED DRIVE IS ·OFF LIME' (HEVER BEEN SELECTED; SINeE LAST MAR" BOOT);WE NANT 10 TEST THE DENSITY Of THE DISK IF IT 15 OFF lINE

LXI H,OOOOH ;ERROR RETURN CODE"DV A,eCPI NDRIYESRNC

DC69 320DFC STA NXTDISK ;DrnJBLER SCRATCH LOC. FOR NEll DISKOP,,"/

DISK NU"BER 15 IN THE PROPER RANGE

DCbC 7BDCbD IFDCbE D4BODC

"DV A,ERARCNe SETPAR"

;6ET DRIVE STATUS FOR EVALUATION;6ET BIT 0 - LOSIN STAT INTO CARRYjCARRY 15 CLEAR IF DRIVE 15 JUST BE1N6;SELECTED FOR THE FIR51 TI"E;5ELECT DE5JRED DRIVE, TEST DENSITY

CO"PUTE PROPER DI5K PARAMETER HEADER ADDRESS

Page 36: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/6BI0S PRN PASE 014

DC7l 3AODFCDC74 6FDC75 2600DC77 29DC7S 29DC79 29De7A 29DC7B 1133DADC7E 19DC7F C9

;CALCDPE

LDAMDV"VIDADDADDADDADLXIDADRET

NXTDISKL,AH,OHHHHD,DPBASED

j6ET DI5K, WHICH BACAME PRESENT AFTER SEL.;L=DI5K NUMBERO,1,2,3;HI6H ORDER ZEROj'2;'4;*8j'16 (SIZE OF EACH HEADER)

jHL=.DPBASE(DISKNotlbl

l------------------------------------------------------------------SETPAR": ;TE5T DISK WHICH 15 BEIN6 SELECTED FOR THE FIRST T1"E*------------------------------------------------------------------

;DN ENTRV, CRES CONTAINS DISK NUKBER TD BE SElECTED

DCSO CD06FB CAll CSELD5K ;SElECT DI5K ROUTINE IN PRO"DC83 cn03FB CALL CHOt1E ;HO"E THE DRIVEDC86 OE02 "VI C,2 ;STEP TO TRActe 2Dt8S CD09FB CALL CSETTRK jWHEN THE PRO" STEPS FRD" TRACKS 0 OR 1 .

;TO TRACK 2, 1T TESTS THE DENSITY;DEN5ITY INFO IN DENBYTE IS NOW VALID

DCBB CD71DC CALl CALCDPE ;CAlCUlATE DISK PAR~"ETER HEADER ADDRESSDtBE 0600 "VI B,O ;fOR DADDC90 70 "OV tI,B ilERO OUT SECTOR TRANSLATE POINTER IN DPEDCllt 23 INX H ;(IF DISK lS SINGLE DENSITY, NE'lL REPLACE IT)»C92 70 "OV tI,BOC93 3AOOFE LDA RDSTAT ;CHECK FOR DOUBLE SIDED BISKDC96 E640 ANI 40H ;IF BIT b 15 LOW, D15K IS DOUBLE 5IDEDDC98 OEtE "VI C,DPB2-DPBO jOFF5ET IN PARM TABLE FOR DOUBLE SIDEDDC9A CA9FDC JI DBlSIDD

DC9D OEOO "VI C,O ;NO OFFSET FOR SIN6LE 51DEDDBL5IDD

DC9F 3A01FC lDA DENBYTE ;NDW FIND DENSITY;FOR (C) PROM, DENBYTE =0 FOR SD, 10H FOR DD;FOR (Cl) PRO", DENBYTE =0 FOR SD, 4 FOR DD

DeAl B7 ORA A ;DENBYTE =01DCA3 3EOF "VI A,DPBI-DPBO jOFF5ET IN PARM TABLE FOR DOUBLE DENSI1YDCA5 C2AFDC JNZ DBLDEN

• ;SIN6LE DENSITY •DCAB AF XRA A ;ND OFFSET FOR SINGLE DENSITYnCA9 "2B Del H ;POINT BACK TO BE6INNINB Of DP HEADERDCAA 3673 ,/t1VI ",TRANS AND OFFH jPUT IN LOW BYTE OF TRANSLATE TABLE POINTERDCAC 23 INX HDeAD 3bDA "VI M,TRANS SHR B jPUT IN HI6H BYTE OF TRANSLATE TABLE POINTER

DCAF 81 DBLDEN ADD C jADD OFFSET FOR 1 5IDE5DCBO 324900 STA DEHSIDE iSTORE IN SCRATCH FOR USE BY UTIlITIESOCB3,OE09 "VI C,9 jINDEX INTO PARM HEAD ER TO DPB FIELDDCB5 09 DAD B ;HL NOW CONTAINS ADDRESS Of DPB ENTRY OF HEADERDCB6 fB XCH6 jSAVE IT IN DE

Page 37: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/68105 PRN PAGE 015

DCB7 4F MDV C,A ;~OVE DPB OfFSET TO CFOR DADnCB8 21BDDA LXI H,DPBO ;PDINT TD BE6INNIN6 OF PAR" BLOCKSDCBB 09 DAD B ;NDW HL POINT TO CORRECT PAR" BLOCKDrBe EB XCHS jNDN DE POINT TD CORRECT PAR" BLOCK

jRESTORE ADDRESS Of DPB ENTRY OF HEADER TO HLDeBn 73 "DV ",E ;PUT LON BYTE OF DPB ADDRESS INTO DP HEADERDCDE 23 INX HDCBF 72 J10V ",D jPUT HISH BYTE OF DPB ADDRESS INTO DP HEADERDeco C9 RET

;,------------------------------------------------------------------HOJ1E: . ;MOVE TO THE TRACK 00 POSITION OF CURRENT DRIVE; TRANSLATE THIS CAlL INTO ASETTRK CALl NITH PARA"ETER 00.------------------------------------------------------------------

DCCl OEOO "VI c,o

DCC3 79DCC4 324200DCC7 C9

5ETTRK: ;SET TRACK GIVEN BY RE6ISTER C"DV A,CSTA TRACKI jJUST STORE TRACK NU"BERRET

•••l't.t••••••••••• ,••••••••••••••••• ,••t ••••••••••••••••* • t t t • * •••*t•••••••••••••••••••••••••••••••••••••••••••••••••••••

SECTRAN:

;SECTOR TRANSLATE ROUTINE;THI5 ROUTINE HANDlES.ONLY SINGLE BYTE SECTOR VALUESjAND SINGLE BYTE TRANSLATE TABLESiON ENTRY, 8=0, C=L06ICAl SECIOR NU"BER, AND DE POINT TO; THE TRANSLATE TABLEiON EXIT, H=O AND l CONTAINS THE PHYSICAL 5ECTOR NU"BER

;IF DE=OOOOH, DO NOT TRANSLATE. JUST PUT "OVE Be INTO HL,INCREMENT '10 REFERENCE TO SfCTOR 1, NOT 0), AND RETURN

;IF DE (> 0000, NE ASSU"E THE DISK 18 SINGLE DENSITY;NORHALIZE CTO THE RANGE OF <0 TO 25) (BV SUBTRACTIN6 26 IF

. ; NECESSARY);TRANSLATE WITH THE TABLE POINTED TO BV DE, AND, IF 26 WAS; SUBTRACTED, ADD Il BACK IN;RESUlT IS RETURNED IN Hl (lT'5 IN THE RAN6E <1 TO 52»

ncca 69 MDV L,e ;"OVE Be (LOG SECT) TO HL (PHYS SECT)DCC9 60 "DV H,B ;H IS NON ZERO (SINCE BWAS)OCCA 23 INX H ;INCRE"ENT FOR PHYSICAL SECTOR NUKBERDCCB 7A "Dl,' A,DDcec 83 DRA E jDE=OOOOH?Deco ce RZ jIF YES, RETURN

•DceE 2B Del H ~DECR Hl BACK TO LD6ICAL SECT 1DCCF 79 MDV A,CDCOO D61A SUI 26 jSECTOR NU"BER < 26?

Page 38: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 221bBIOS PRN PAGE 016

DCD2 DADBDC Je UNDER26

DCD5 061A "VI B,26 ;IF NO, PUT 26 IN B (TO ADD IN LATER)DeD7 6F "QV l,A ;PUT (C)-26 IN LRES

UNDER2b ;NOW L 15 IN RAN6E OF 0-25Dena 19 DAD D ;INDEX INTO TRANSLATE TABLEDCD9 7E MDV A," ;6ET PHYSICAl SECTOR NU"BER FROK ~ABlEDCDA BO ADD B ;ADD OFFSET FOR SIDE 1DCDB 2600 "VI H,ODCDD bF "OV L,A ;PUT BACK IN l REGDCDE C9 RET

.-------------,------------------------------------------------------SET5EC: jSET SECTOR ROUTINEl---------------------------------------------------------------------

;DECIDES IF DISK IS SINGLE OR DOUBLE SIDED;NORMALIZES THE SECTOR NU"BER (1-26 IN SD, 1-52 IN DD)jUPDATES 'SIDE;JUt1PS TO CONTROLLER SET SECTDR ROUTINE

DCDF 2116FC LXI H,DENJ1AP iPOINT 10 DENSITY TABLEDCE2 3AODFC LDA NXTDISK j6ET DI5K NUt1BERneES 85 ADD l ;INDEX INTO TABLEDCEb bF "DV l,AOCE7 7E MDV A," j6ET DENSITY BYTEDCE8 214DOO LXI H,SlDEDCEB 3600 "VI ",0 ;INITIALIZE SIDE TD 0DCED B7 ORA A ;SIN6LE DENSITY?DtEE 79 "av A,e ;"DVE SECTOR HUMBER TO ACCU~ULATOR

DCEF CAF4DC JZ SDSECT;DOUBLE DENSITY

DCF2 DblA SUI 26 ;IF DOUBLE DENSITY, 5ECTOR J ( 53?

DCF4 D61B 505ECT SUI 27 ;lF SINBLE DENSITY, SECTOR 1 < 27?DCFb FAFCDC J" SIDEO ;IF YES, SIDE=O, USE SECTOR HUMBER IN C

;SIDE 1DCF9 34 INR " ;5ET SIDE=lDCFA 3C INR ADeFB ~F "OV C,A JUSE SECTOR NU"BER IN ACCUMULATOR

DCFC C30CFB SIDEO J"P CSETSEC ;60 10 CONTRDLLER SET SECTDR ROUTINEj (SECTOR HUMBER 15 IN CRES)

la•••••*t •• lttt.ttt•••••• t••••••••• tl ••••••••••••••••• tta.t tt SI"PLE ]/0 HANDlERS ("UST BE FILLED IN BY USER) •

• •tt.t ••• , ••••••••••••••••••••••• , •• , •••••••••••,t•••••• ,tt

OOOD =OOOA =

;CRLF

EQUEQU

HARDWARE UART CONSOLE ROUTINESODH JASel! <CR)OAH ; <LF) .

Page 39: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/6BIOS' PRN PAGE 017

CONST: ;CONSOLE STATUS, RETURN OFfH IF CHAR ACTER READY, OOH IF NOT;

DCFF 3AOAFE CONSTAT LDA UARTSTATDD02 Eb02 ANI 2DD04 CS RZDD05 3EFF "VI A,OFFHDD07 C9 RET

• • • •DDOB CDFFDCDDOB CA08DDDDOE 3A02FEDDl1 Eb7FDD13 C9

;CONIN: ;CONSOLE CHARACTER INTO RE6ISTER A

CALL CONSTATJZ CONINLDA UARTDATAANI 7FHRET

*;CONOUT: ;CONSOLE CHARACTER OUTPUT FRD" RE6ISTER C

DD14 3AOAFEDD17 EbOlDD19 CA14DDDDtC 79DDID 3202FEDD20 C9

;PAGE

lDAANIJI"OVSTARET

UARTSTAT01CDNOUTA,CUARTDATA

;LIST: ;1H15 ROUTINE I"PLE"ENTS THE 1/0 BYTE FUNCTION FOR l5T: DEVICES*==============================================================================* 1/0 BYTE FOR LIST DEVIeE 15 IMPLE"ENTED AS FOLLONS:* IllY· ="ULTLIST ("" MULTI 1/0 BOARD SERIAL PORTI1)t ·CRT- = CONOUT ("" DOUBLER SERIAL PORT)t -LPTa = CENTLIST (CENTRONICS 703/779 TYPE LIST DEVIeE)• IULI- = OPTIONAL DRIVER SELECTED BY USERt==============================================================================

IF NOT (60DB10 OR SSMIO OR OPIO OR USERLST OR MULTLIST OR CENTlIST)RET ;THEN RETURN BECAUSE Il 15 NOT SUPPORTEDENDIF

IF ,(SODBIO OR SSKIO OR OPIO OR USERLST OR MULTlIST OR CENTLIST)DD21 3A0300DD24 E6CODD2b CA3EDDDD29 17DD2A D21~DD

DD2D 17DD2E D23FDD

LDAANIJZRALJNCRALJNC

IOBYTEOCOHMULTLST

CONOUT

CENTLST

;6E1 THE CURRENT 1/0 STATUS

;MM MULTI 1/0 BRD 5ERIAL PORT AS LIST

;DOUBLER CONSOLE AS LIST

;CENTRONICS PARALLEL PRINTER DRIVER

LIST1:IF GODBIO ;CONDITIDNAl FOR THE 60DBOUT 1/0 BOARD FOLLOWS:

Page 40: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/6BI05 PRN

DD31 DB21DD33 E641DD35 FEOIDD37 C231DDDD3A 79DD3B D320

PAGE 018

IN 21HANI 41HCPl 1JNZ LIST!MDV A,COUT 20HENDIF

IF SSMIOIN 2ANI 8lHCPI aOHJNZ LIST1"aV A,CCPI OAHRZOUT 3ENDIF

;BIT 0 15 TRANSMITTER BUFFER E"PTYiBIT 6 IS -DATA SET READY FROM PRINTER;NOT READY YET;LIST BETS CHARACTER IN CREG.;DATA PORT .;SlOP ASSEKBLIN6 FOR THE 60DBOUT ONLY

;lIST ROUTINE FOR 55" 2P+2S 1/0 BOARD

jPRINTER READV AND TX READY

jFOR AN AUTO lF DEVIeE

DD3D C9

IF DPlGIN 01ANI 8tHCPI 81HJNZ LIST!"DV A,e- -OUT 00ENDIF

IF USERLSTENDIF

RE;r

jLI5T ROUTINE FOR DELTA PRODUCTS CPU BOARD WITH 8251 UART;6ET PRINTER STATUS;PRINTER READY AND TX READY;UART READY, DATA SET READY (BOTH);NOT READY, WAIl TILL READY

;PRINTER READY, OUTPUT DATA BYTE;STOP CONDITIDNAL ASSE"BLY

;AREA FOR USER DEFINED LIST ROUTINE

;HEY WATCH DUT •. DON'T 6ET RID OF THIS-(RET>

"ULTlSTIF "UlTLIST ;BE6IN CONDITIDNAL ASSE"BLY FOR MM 1/0 BOARD SERIAL OUT

CENTL5TrF CENTLIST

DD3E C9.

INANICPIJNZ

"OVOUTENDIFRET

IRAINRALRALRAlJe

AKWAIT INANICPI

":'UARTIC81H8tHMULTLSTA,CUARTID

ASTATUS

CENTLSTSTATUSBOHBOH

;6ET STATUS;CHECK TO SEE IF TRANS"ITTER BUFFER 15 E"TPY-­;AND IF D5R 15 ACTIVE;WAIT TO SEND IT IF NOT •.•;6ET CHARACTER TD OUTPUT;SEND Il TO LIST DEVIeE;STOP ASSEMBLIN6 FOR THE MICRDHATION 1/0 BOARD

;LIST ROUTINE FOR CENTRONIes 703/779 PRINTER;CLÉAR CARRY FLA6;6ET STATUS BYTE

;;CHECK BIT 5:PRINTER BUSY???

;jCHECK BIT 7:/0BF??? (EMPTY=HI6H)

Page 41: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 221bBIOï PRN PASE 019

JNZ A~WAIT ;"DV A,e ;GET CHARACTER FRO" CRES.CPI OAH ;PRINTER IS AUTO LINEFEEDRZORI BOH ;RESET DATA STROBE BIT FIRST•••OUT DATAPORT JOUT TO PRINTEROUT PORTA ;THI5 SETS THE IOBF FlAS OF STATUS PORTANI 7FH ;6ENERATE DATA STROBE:BIT 7 OF PORTOOUT DATAPORTORI aOHOUT DATAPORT ;ENDIF jEND OF LIST ROUTINE FOR CENTRONICS 779

DD3F C9 RET

ENDIF jEND OF LIST DRIVER BLOCK••• (DO NOT RE"OVE.)

*;lIST5T: iRETURN LIST STATUS (0 IF NOT READY, 1 IF READYl

DD40 AF

ID41 C9

XRAPUNCH:READER: RET

A ;0 15 ALWAYS OK TO RETURN

PRINT:DD42 lA LDAX DDD43 FE24 CPI

' .'DD45 ca RI

DD46 4F "OV C,ADD47 CDOCDA CALL CONOUTtDD4A 13 INX DDD4B C342DD J"P PRINT

;6E1 NEXT BYTE TO PRINTjEND?

;OUTPUT CHARACTER TO CONSOLE;POINT TO NEIT CHARACTER

;

j"ttta"I""""""""""""""""""""""t.t••• tt.*

NARNIN6

END Of CODE "UST BE LESS THAN

THE VALUE OF END CODE

DDBO =;ENDCODE EQU BIOS + 380H

.tt.t•• tt •• ttta.tttttt.tt ••• ttttt.'tttttttttttttttttttttt• t.t THE RE"AINDER OF THE CBIOS IS RESERVED UNINITIALIIEDa DATA AREA, AND DOES NoT NEED TO BE APART OF THE• SYSTE" "EMORY I"A6E (THE SPACE "UST BE AVAILABLE,t HOWEVER, BETWEEN 'BE6DAT' AND 'ENDDA1').

Page 42: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

-FILE: 22/bBIOS PRN PAGÉ 020

t tl •• ll'••••••••••••••••••• t•••••• t* ••• t*••••••••••••••••••

SCRATCH RA" AREA FOR BDOS USE;

DD4E = BE6DAT EQU $ ;BE6ININ6 OF DATA AREADD4E DIRBUF OS 128 ;DIRECTORY ACCESS BUFFER

j

DDCE ALVO DS 31 jALLOCATION VECTOR 0DDED CSVO DS 32 jCHECK VECTOR 0

j

DEOD ALVI DS 31 ;ALLOCATION VECTOR 1DE2C CSV1 DS 32 jCHECK VECTOR 1

j

DE4C ALV2 DS 31 ;ALLOCATION VECTOR 2DEbB CSV2 DS 32 ;CHECK VECTOR 2

;DEBB AlV3 DS 31 ;AllOCATlnN VECTOR 3DEAA CSV3 DS 32 jCHECK VECTOR 3

;DECA = ENDDAT EQU S JEND OF DATA AREA017C = DATSIZ EQU $-BE6DAT iSIZE Of DATA AREA

;.-------------------------------------

OEtA ENDD869 A6AIN DDCE ALVO DEOD AlVl DE4C ALV2 DEBB ALV3CC06 BOOS DD4E BE6DAT 9000 BIAS DAOO BIOS 0000 BOOTBASEDACA 800T DAC9 BOOTFLA6 FCOO BUFF DA03 BWBOOT DC7! CALCDPEC400 CCP OOOO\CENTLIST DD3F CENTLST F803 CHOME DA09 CONIN1DDoe CONIN DAOC tONOUl1 DD14 CONOUT DCFF CONST DCFF CONSTATF800 CONTROLLER 0004 PMDRIVE OOOD CR FB06 CSElD5K F80F CSETD"AFaoc CSETSEC FB09 CSETTRK DDED CSVO DE2C CSV1 DE6B CSV2DEAA CSV3 fC03 CTRBYTE fC22 CURRDRIVE 017C DATSIZ DCAF DBLDENDC9F DBL5IDD FCOI DENBYTE FC16 DEN"AP 0049 DEN5IDE DD4E DIRBUFFB12 DI5KREAD FB15 DISKWRITE DABD DPBO DA9C DPBl DAAB DPB2DABA DPB3 DA33 DPBASE DA33 DPEO DA43 DPE1 DA53 DPE2DA63 DPE3 0000 DPIO DD80 ENDCODE DECA ENDDAT 0000 FALSED885 60CCP DB2b SOCP" FFFF GOD810 DCCI HO"E 0003 IOBYTEFOOO IOPROM OOOA LF DD21 LIST DD31 LISTl DD40 LISTSTDAF2 LOAD1 DBb3 "OVECTORS 0038 "SIZE 0000 ttULTLIST DD3E ttULTlST0004 NDRIVES DBlE NEll 0000 NONE 002C N5ECTS FCOD NXTDISKD817 NX~TRK FCOS PRESDSK DD42 PRINT F800 PROM DB48 PRO"CHKDBEb PROTMES DD41 PUNCH FEOS RD"ARK FEOO RDSTAT DBAB READDD41 READER DBBO READWRITE FC21 RETRYCOUNT DBDA RETRY DBBB HWDCF4 SD5ECT FCOA ,SB:TOR Dcee SECTRAN DC62 SELDSK FBtB SETDENDCSO SE1PARM DCDr SET5EC DCC3 SETTRK DC3E SETUP 004D SIDEDCfC SIDEO DB7A SKIP2 DB78 SKIPIT 0000 SSt1IO FCIO STEPTI"EFC04 TRACK 0042 TRACKI DBCF TRACKERROR DA73 TRANS FFFF TRUEFC20 TRYI FE02 UARTDATA FEOA UARTSTAT DeDB UNDER26 0000 USERLSTDAD9 WBOOT FEOl NRCLK FEOO WRCONl DBse WRITEF81E WRITEPROTECT .DBAb WRTOK

Page 43: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FllE: IHSIO PRN PAGE 001

;SPECIAL PRO" FOR 510 BOARD ON IMSAI

;; SYSTE" RA" EQUATESj

; SYSTE" DI5K LAYOUT EQUATES;

005E = SI6NDN EQU OSEH0005 = BDOS EQU 5

;0000 = NBOOT EQU 00000000 = CRTS EQU OOH0001 = CRT EGU 01H0002 = RDR EQU 02H0000 = . RDRS EQU OOH0010 = SICBD EQU 10H0013 = SIOSt EQU SIOBD"30015 = SIOS2 EQU 5108D+50018 = SIoe EQU SIOBD"S0012 = TTY EQU SlOBD+20013 = TTYS E{lU SIOBD+30014 = "ODE" .EQU 510BI)+40015 = MODE"S EQU SIOBD+-S

;; 1/0 STATUS BITS

;; EQUATES FOR ASCII CHARACTERS;

0001 = SOH EQU 01H0003 = CTRLC EQU 03H0008 = BS EQU OBH0009 = TAB EQU OCJHOOOA = lF EQU OAHOOOC = " FF Enu (lCHOOOD = CR EQU ODH091A = CTRlZ EQU lAH

'0018 = tSC EQU IBH005F = UNDERllNE E(lU 5FH007F =• RUBOUT EQU 7FH

FOOO ORS OFOOOH

; ENTRY POINT TABLE

;LOCATION OF BOOTSTRAP MESSAGE

;CRT STATUS PORTjCRT 1/0 PORT;PAPER TAPE READER INPUT PORT;PAPER TAPE READER STATUS;BA5E PORT 1 OF SIO BOARD;STATUS PORT OF l"SAI 5ERIAl 1/D BOARD TO INIT.;STATUS PORT OF TOTHER;CONTROL PORT FOR SIO BOARD (BOTH CHANNELS)jDIABlO PRINTER 1/0 PORT;DIABlO STATUS PORT;"ODEIt. 1/0 PORTj"ODE" STATUS PORT

fOOO C36bFOF003 C30000fOOb 000000f009 000000FOOC 000000

;ENTAB JMPWBOTE J.MP

DBDBDB

INITIONBDDT00,00,0000,00,0000,00,00

;COLD START.;CO~E HERE TO INITIAlE REBODT (VIA LOC 0)j'J"P CONST~T

;JMP CONIN;Jr1P CONDUT

Page 44: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 1"510 PRH PAGE 002

FOOF C351FO Jr1P LISTF012 C361FO JMP PUNCHFOl5 C3b2FO Jr1P READERFOIS 000000 DB 00,00,00 ;J"P HOMEF01B 000000 DB 00,00,00 ;J"P SELDSKFOiE 000000 DB 00,00,00 i Jt1P SETTRKf021 000000 DB 00,00,00 ;J"P SETSECF024 000000 DB 00,00,00 ;J"P SETDMAF027 000000 DB 00,00,00 jJI1P READF02A 000000 DB 00,00,00 ;Jt1P WRITEF02D C349FO J"P lISTSTF030 000000 DB 00,00,00 ;J"P SECTRANF033 C366FO J"P INITIO iCBIOS 1/0 EXTERNAL INITIAlIZATION ENTR~f03b C363FO J"? Hl" ;FOR RE5TART 7: BIVE ERROR "ESSA6EF039 = ENDTB: EQU S ;END OF JUKP VECTOR

PHYSICAl DEVIeE ROUTINES

;; TELETYPE INPUT;TTYIN:

F039 CD44FOF03C CA39FOF03F DB12F041 Eb7Ff043 C9

CAlL TTYSTATJI TTYIN ;WAIT FOR ACHAR TO BE AYAIlABlEIN TTY ;INPUT ITANI 7FH ;RE"OVE PARITYRET

;TTYSTAT: jU5ED HERE AND IN CONSTAT ABOVE

F044 DB13 IN TTYS j6ET STATUSF04b E602 ANI 02H ;t1ASK BITf04B C9 RET ;A 15 NON-O IF CHAR AVAILABLE

;; TI 810 PRINTER DRIVER;

f049 DB13, L15T5T: IN TTYSf.04B Ebao ANI aOHF04D cs RI ;BUSYF04E 3EFF "VI A,OFFHFOSO Ci RET jNDT BUSY

LIST:FOS1 CD49FO CALL LlST5TfOS4 CA51FO ,/'JZ LISTFOS7DB13 IN TTYS ;5TATUSf059 OF RRC ;TEST BIT 0rOSA D251FO JNC LIST ;WAIT TILL READY TO ACCEPT CHARACTERF05D 79 "DV A,CfOSE D312 OUT TTY jOUTPUT THE CHARACTERrObO C9 RETfOb1 C9 PUNCH: RET

Page 45: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 1"510 PRN PAGE 003

F062 C9 READER: RET

;; .allt.tl•••• lltt •••••••••••••••••••••••••••••t.*.*.;; STARTUP ~ RE5TART STUFF;;;;;;;;RESTART 7 ROUTINE. PRESU"ABLY "EANS J"P TO NON-EXISTENT "EMORY;; TYPES ·CRASH- AND TOP OF STACK (PRESUMED TD BE PC);; AND BYTE TOP OF STACK POINTS TO;;

f063 C30000 NX": J"P WBOOT ;POP B ;6ET PC Of CRASH (OR MAYBE BARBA6E)LXI SP,100H iSET UP STACK BELON 100H

; PUSH B iSAVE THAT PCjTYPE -CRASH-

LXI H,NX""SGCALL CONO"SG

jTYPE NHAT IS PROBABLY THE PC Of THE PROBLEMPOP H ;6ET WHAT MAS ON STACK AT ENTRY TD NI""GY A,H ;HI OROER BYTECALL HOUT ;HE1 OUTPUT A"DV A,l jLD ORDER BYTE

; CALL HOUT;;TYPE BYTE TOP OF STACK-l POINTS TO: THIS "16HT BE THE INSTRUCTION; jTHAT CAUSED CRASH (RST-7, ETC)

"VI C,' J

CALL -CONDUT ;TYP~ ASPACEDel H ;POINT ONE LESSMDV A," ;6ET BYTE

; CALL HOUT jOUTPUT IT;;REBOOT THE SYSTEM, SAKE AS ANY WARM RESTART

JI1P WBOOT;;j;

;~ ; JOUT OF LINE STUFF FOR NX"

;6ET ACHAR Of MESSA6E;5ET FLA65

;DONE IF 0 BYTEC,A ;10 (-REG fOR CONDUTCONOUT jOU1PUT IT ON CONSOLEH ;POINT NEIT CHARACTERCONOMSG ;KEEP OUTPUTTIN6 TO END

;;;;TYPE MESSAGE HL POINTS TO ON CONSOLE.;CONOtt56:

"DVORARZ"OV

,/tALLINXJMP

TER"INATED BV 0 BYTE

;;;;HEX OUTPUT (A) TO CONSOLEjHOUT: PUSH PSW

RRCRRCRRC

Page 46: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

jMASK 4 BITSilS Il AOR BI6SER

FILE: IMSIO PRN

RRCCALL

; POP;HDUTNIBL:

ANICPIJI1

; ADI;HNBll: AD!

MDVJMP

;;;;jj

PAGE 004

HOUTHIBLPSW

OFH10HNBLI ; IF NO'A'-'O'-10 iVES, ADD DIFFERENCE BETWEEN ASCII AAND 9+1'0' ;CONVERT Il TO ASCII CHARACTERC,A ;TO CRE6ISTER FOR tONDUlCONOUr ;PRINT Il AND RETRURN

;; COLD BOOT INITIAlIZATION;;jCOLDBOOT:;;;; ;INITIALIZE IOBYT FRD" SNITCHES;;

INCPIJNZ .

; "VI;COlDBT1:5TA

"VIJI1P

;;; ;j60CPtt;

OFFHOFFHCOlDBTlA,PORTFFIOBYTD,OFFH60CP"

jDEFAUlT IOBYTE IF NO PORT FF

;COLD START FlA6 .;60 CO"PLETE INITIALIZATION

;;;;·J"P NX"I FOR RE5TART 7 (DDT WILL CHAN6E IF U5EDl. THIS IS ACCES~ED AFTER;; AJ"P INTO NON-EXISTENT "EHORY, Al5Q DY WRITE PROTEeT VIOLATION ON RAM-4A; ; IF WIRED DIRECT TO IINT' LINE BV USER. AN IH5AI EXTENSION Of BIOS FUNCTIONS.;

LXI H,NX"STA 038HSHLD 038H+l

;;; ;5ET USER EXIT INSTRUCTION TO NOPS FOLlOWED BY ARET;;

LXI H,O ;TNO NOPS5HLD USEREXIT"VI H,OC9H jA NOP AND ARET5HlD USEREXIT+2'

;;110V A,DORA A

,,~ 'jz WBOOT9 ;IF NARM RE5TART;;; ;COlD START ONLY:;;;; 516N-ON "ESSA6E; LXI;MSlOOP:

CALLIHX110\/

H,"ESSA6E ;"ESSA6E TEXT IS IN BOOT RECORD"DV C,11CON OUT ;U5E CHAR TYPINS ROUTINE IN BIOSHA,"

Page 47: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: ·!t'SID PRN PASE 005

ORA AJNZ "SLOOP

;;;;INITIO: ;SUBROUTINE TO INITIALIZE 1/0 PORTS

;"VI A,PORTFFjSTA IOBYT

j

; INITIALIZE BOTH CHANNELS OF I"SAI SERJAL INTERFACE BOARD

;TURN OFF INTERUPTS AND; ••• CARRIER DEIECT, -BOTH CHANHElS

F066 2191FOf069 JEF06A D313f06C D315F06E 23F06F JEF070 87F07! C26AFOF074 AFf075 D318

f077 OE09f079 115EOOf07C CDOSOOf01F OE09-FOS1 119bFOF084 CD0500

FOS7 Cft

;;IF 510 HA5 JUST BEEN RE5ET, Il EXPECTS A-"ODE- THEN A-CO""AND u

;BUT IF IT HASN'T BEEN RESEl (MAR" START), Il 15 NOT EXPECTIN6 A-"ODE-.;50 NE SEND IT ADU""Y THAl lEAVES Il EXPEClIN6 ACOM"AND RE6ARDLESS,;THEN ARE5ET CO""AND (40H), THEN DESIRED "ODE AND CO""AND.

lXI H,SIOSTRIN6"DY A,M

SIOLUP: OUT 51051OUT 51052INX H"DV A,"DRA AJNZ SIOLUPXRA AOUT SIoe

;jSI6NON "ESSA6E

"VI c,9LXI D,SIGNONCALL BDOS"VI C,9LXI D, "ESSA6ECAlL BDOS

RET

;- FOBB ODOA435241NX"KS6: DB ODH,OAH,'CRASH ',0 ;TEXT USED DY aNx"a ROUTINE.

;; BYTES TO SEND TO S10 STATUS PORTS;

F091 AE405A1700S10STRIN6[ DB OAEH,~OH,05AH,17H,O."'--

"ESSA6E:f096 OAOD285749 'DBfOAB 4630303029 DB

;ENDI0PROM:

OAH,ODH,' (WITH IOPRO" IN AT ''FOOOl' ,OAH,ODH,24H

fOB3 END

Page 48: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: H15IO ~ PRN PAGE 006

0005 BDOS 0008 B5 OOOD CR 0000 CRTS 0001 CRT0003 CTRLC OOtA CTRLZ FOB3 ENDIOPROM F039 ENDTB fOOO ENTAB001B ESC oooe FF f066 INITIO OOOA lF FOSt LISTF049 LISTST F096 t1ESSA6E 0014 MODEM 0015 MODEMS fOô3 NI"F088 NXt1I1S6 FOb! PUNCH 0002 RDR 0000 RDRS f062 READER007F RU BOUT 005E 5I6NDN 0010 SIOBD 0018 SIoe fObA SIOLUP0013 510S1 0015 51052 F091 SIOSTRIN6 0001 SOH 0009 TAB0012 TTY f039 TTYIN 0013 TTYS F044 TTYSTAT 005F UNDERLINE0000 WBOOT f003 WBOTE

Page 49: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/2BOOT PRN PAGE 001

BOOTSTRAP PR06RA" FOR KICRO"ATION

REVISED FOR CAVRO STD SYSTE" OCT 81VERSION 2 REY 2 OCT .11, 1981

0000 ORS OOOOH

EQUATES FOR CP," LOCATIONS"SIlE DETERMINES THE LOCATION IN ~E"ORY MHERE THE BOOTSTRAP LOAD5THE CP," OPERATINS SYSTE".

;0038 = f1SIZE EQU 56 iSET FOR A4BK SYSTE", CHANGE WHEN SYSTE"

jSIZE CHANSES.

FBOO = CONTROLLER EQU OFBOOHfCOO = BUFF E'lU CONTROLlER+400HFE02 = UARTDATA EDU CONTROLLER+602HFEOA = UARTSTAT EDU CONTRDllER+ôOAH

; ==}» DO NOT SUBSTITUTE BOTH 20 (TNENTY) ON NEXT LIME !!!9000 = CBASE EDU ~"SI1E-20)*1024 ;BIAS FOR SYSTE"S lAR6ER THAN 20KCCOb = BDOS EDU CBASEt3C06HC400 = CCP EOU CBA5E-+3400H jBA5E OF CONSOLE CO""AND PROCESSOR, 16K .C3BO = CCP" EOU CCP-128 ;START OF lDAD TO SKIP BOOTDAOO = COLDBOOT EoU CBA5E+4AOOH jCOLD START BOOT

; EQUATES FOR RESERVED ROtt LOCATIONSFB03 = HOI1E EQU CONTROLlER+3F809 = SETTRK EgU CONTROLLER+9 ;SET TRACt::FBOC = SETSEC EGU CQNTROLLER+OCH jSET SECTOR NUHBERFBOF = SETDl1A EOU CONTROlLER+OFH ;SET D"A FUNCTIONFB12, = REAU EQU èoNTROLLER+12H ;DI5K READFC03 = CONTROlBYTE EQU BUFF+3fC04 = TRACK EQU BUFF+4fCOA = SECTOR EQU BUFF+OAHFCOB =. DMA EQU BUFF+OBHFCOF = TWOSIDE EDU BUFF+OFHFCI0 = STEPTIME E(lU BUFF+I0HOOOD = CR EQU ODHOOOA =. LF EQU OAH

;0000 31BOC3 BOOT: LXI SP,CCP"0003 Cn03FB CALl HOt1E00Q6 2100C3 LXI H,CCPt1-S0H0009 220BFC 5HLD D"AOOOC OEOO RDTRK: "VI C,OOOOE 79 RD5EC: "OV A,COOOF FE1A CPI 260011 CA2EOO JZ NXTTRKOQ14 118000 LXI D,1280017 2AOBFC LHLD Dt1A

Page 50: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 22/2BOOT PRN PAGE 002

OOlA 19 DAD D001B OC INR COOlC CDOCFB CALL SETSEC00lF CS PUSH B0020 220BFC SHLD DMA0023 F3 RElP Dl0024 CD12FB CALl READ

El ;COrlENTED OUT0027 C20000 3HZ BOOT002A Cl POP B0028 C30EOO Jt1P RDSEe002E 3A04FC NXTTRK lDA TRACK0031 B7 DRA A0032 C23DOO JNZ INIT0035 OEOl "VI C,l0037 CD09F8 CALl SETTRKOO'3A C30COO J"P RDTRK003D 210AFE INIT LXI H,UARTSTAT jHARDWARE UART INITIALIZATION ROUTINES0040 3bOE "VI ",OEH j USED FOR THE 8251 UART0042 00 NOP0043 00 NOP0044 3640 "VI ",40H THE NOP INSTRUCTIONS ARE NEEDED0046 00 HOP0047 00 HOP0048 36EE "VI ",OEEH ONLY IF USIN6 ~ 4 "HZ CPU THAl PUTS004A 00 HOP004B 00 HOP004C 3605 ."VI ",5 ; A2"HZ CLOCK ON PIN 49 ON THE BUS004E 3E05 "YI A,S0050 3210fC STA .. STEPTlttE jSTEPTI"E FOR SHU6ART DRIVES0053 OE09 "VI C,90055 115EOO LXI D,SI6NON0058 CDObCC CALL aDOS005B C300DA J"P COlDBOOT

005E OR6 5EH

005E ODOA ~'SI6NON

0060 350061 360062 4B2043502F

CCOb BDOS 0000 BOOTC380 CCP~ DAOO COLDBOOTOOOD CR FCOB D"A0038 "SIZE 002E NXTTRK0023 RELP FCOA .~E~TOR

.005E Sl6NDN FCI0' STEPTI"EFEOA UARTSTAT

DB CR,LFDB J1SIZE/I0+30HDB "SIlE "OD 10 + 30HDB 'K CP," - KICRO"ATION VER 2.2$'fCOO BUFF 9000 CBA5E [400 CCPFC03 CONTROLBYTE FBOO CONTROllERFB03 HO"E 0030 INIT OOOA LFOOOE RDSEt OOOC RDTRK F812 READFBOF SETD"A FBoe SET5EC FB09 5E1TRKfC04 TRACK FCOF TNOSIDE FE02 UARTDATA

Page 51: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

f'ILE: 1210

EEOO

PRN

;ORS

PAGE 001.

IOPRO~-200H

;EEOO 5A32494F50DB

;EE24 43415b524FDBEE3F 43~F505952DB

EE52 434156524FDBEEbE 3132333420DBEE7D 53554E4E59DB

'1210PROM· VER 1.7 REY 2 JER 10/11/81'

'CAVRO CP," BASIC 1/0 SYSTE~'

'COPYRIGHT (Cl 1978,''CAVRO SCIENTIFIC INSTRU"ENTS''1234 ELKO DRIVE''SUNNYVALE, CA 94086'

;; SYSTE" PARAMETER EQUATES

FBOO = COLDBOOT EQU OfSOOH

FOOO =EBOO =F400 =005E =

0001 =

OOBI =

;10PRO" EOUVID"E" EQUVIDEO EQUSIGNON EGU

TUARTIO EOU

PORTFF EQU

OFOOOHOE800HIOPRO"+400HOSEH

8tH

jWHERE PRO" BASIC 1/0 SYSTE" JU"P VECTOR 5TARTS

;lOCATION OF BOOTSTRAP "ESSA6E;PERSCI = 0 TD GENERAlE CODE FOR SHU6ART ·DRIVES;TUARTID =1 10 6ENERATE CODE FOR TUART BOARD;TUARTIO =0 10 GENERAlE CODE FDR 2-510 BOARD

. jPORT FF INPUT DEfAUlT IS VIO OUT AND. ;TUARTA PARALlEL IN CHANNEL ON TUART

EXTERNAL ENTRY POINTS

;; LOWER RA" "EKORY ASSI6N"ENTS

0000 =0003 =0004 ::0005 =0005 =

;NanOT EDU 0IOBYT EGU 3l06DI5K EQU 4ENTRYJ"P EQU 5BDOS EQU 5;;.1/0 PORT EQUATES

jNHERE 10 PUT JMP REBOOT;INTEl CO"PATIBLE 1/0 CONTROL BYTE·;NHERE CP/" STORES L066EN ON DI5K NO.;WHERE TO PUT JMP ENTRYPOINT

0000 =0001 =0002 =0000 =0020 =0020 =0021 =0022 =0023 =0030 =0031 =0032 =

• ;CRTS EGUCRT EQURDR /-fQURDRS EDUTUART E9UTUARTAS EGUTUARTA EQUTUARTAC EQUIUARTAM EQUTUARTBS EQUTUARTB EQUTUARTBC EQU

OOH01H02HOOH20HTUARTTUARTAS+lTUARTA+lTUARTAC+lTUART+IOHTUARTBS+lTUARTB+l

;CRT STATUS PORT;CRT 1/0 PORT·jPAPER TAPE READER INPUT PORT;PAPER TAPE READER STATUSjBASE PORT 1 OF TUART BOARD;TUART PORT ASTATUSiTUART PORT ASERIAL DATA;TUART PORT ACO"MAND;TUART PORT AINTERRUPT "A5K;TUART PORT BSTATUS;TUART PORT BSERIAL DATA;TUART PORT BCOM"AND

Page 52: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 1210 PRN PAGE 002

0033 = TUARTB" EQU TUARTBC+l ;TUART PORT BIHTERRUPT "ASK;; 1/0 STATUS BITS;

ooao = TUARTBE EQU aOH jTUART BUFFER E"PTY0040 = TUARTDA E9U 40H ;TUART DATA AVAIlABLE

;; DI5K SCRATCH AREA FOR DIGITAL SYSTEMS CONTROlLER;

0040 = SeRAT EQU 40H ;START OF SCRATCH AREA0040 = TRACK EQU SeRAT ;CURRENT TRACK ON DRIVE 00041 = TRAK! E{lU TRACK+l ;CURRENT TRACK ON DRIVE 10042 = SECTOR EQU SeRAT+2 ;CURRENTlY SELECTED SECTOR0043 = Dt1AAD EQU SCRAT+3 ;CURRENT D"A ADDRESS0045 = DI5KND EQU SCRAT+S ;CURRENT DI5K HUMBER0046 = DUttMY EQU DISKNO+1 ;"UST BE ZERO FOR DOUBLE ADD0047 = ERRORS EQU DUt'lI1Y+l . ; ERROR COUNTER .0048 = FlAB EQU ERRDRS+l ;COlD/NAR" START FlA60049 = LCHARI EaU FLA6+1 ;LA5T CONSOLE INPUT CHAR0049 = lCHARD EQU lCHARI ;LA5T CONSOLE OUTPUT CHAR004C = USEREXIT E{lU 4CH ;U5ER EXIT INSTRUCTION FOR REALTI"E 1/0

;; 5I6N ON KESSABE TYPED BY COlD 5TART ROUTINE;i"ESSA6E EQU SCH ;"ESSAGE IN COLD B001 RECORD

;; EQUATES FOR ASCII CHARACTERS;

0001 = SOH EOU 01H0003 = CTRLC EQU 03H0008 = BS EQU OBH0009 = lAB Eau 09H •OOOA = lF EQU OAHOOOC = FF EQU OCHOOOD = CR EQU ODH00lA = C1RLZ EGU lAH001B = ESC EUU lBH005F = UNDERlINE EGU 5FH007F = RUBOUT Enu 7FH

jlET US BEGIN

fOOO ORB;; ENTRY POINT TABLE

jORI6IN OF THIS PR06RA"

fOOO C3AEFIF003 C30000FOOb C339FOf009 C351FOFOOC C37EFO

;ENTAB JI1PWBDTE J"P

J"PJ"PJ"P

INITIOWBOOTCONSTATCONINCONDur

;COlD 5TART.;COKE HERE- TO INITIAlE REioor (VIA LOC 0)

Page 53: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

f04F AFFOSO ~

.,;READER STATUS FOR BATCH "ODE: NEVER ACHARACTER READY.;THI5 15 CAUSE PRESENCE OF ACHARACTER FREQUENTlY "EANS;'ABORT NHAT YOU'RE DOINS".READERSTAT:

XRA ARET

;; CONSOl.~ .1N

FOS! 3A0300fOS4 CDBCFOFOS7 CCFOf059 DBFOfOSB 01Fl1:05D OEF!

; J/''''''

.CONIN: LDACALlDNDNnwDW

IOBYTRlCDISPATCHTTYIN ;0: TTYKEYBD ;1: KEYBOARD TUART APARALLELTUARTAIN j2: TUART AINPUTT-UARTBIN ;.3: TUA·RT B INPUT

FOSF F5

;CONIXIT:

PUSH PSW;COHSOLE INPUT POST-PROCESSIN6;SAVE LA5T INPUT CHAR

Page 54: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 1210 PRN PA6E 004

FObO 3A4900 LDA LeHARI ;6ET PREYIOUS INPUT CHARF063 FEOl CPI SOH jWA5 Il ASOH?FOb5 C279FO JNZ CONl11 ;IF NOT, SKIP CHECKSF068 Ft POP PSN ;RE5TORE lAST INPUT CHARF069 FE43 CPI 'e' ;WA5 Il AC?F06B CAOOFB JI OF800H ;IF SO GO COLDBOOT CP,"FObE FE3B CPI '8'f070 CAOOA9 JZ OA900H ;RETURN TD 4BK CP,"F073 FE30 CPI '0'F07S CAOOB9 JZ 08900H iRETURN TO 40K CP,"f07S F5 PUSH PSW jOTHERWISE, STICK CHAR BACK ON STACKF079 FI CONIXl: POP PSW jRE5TORE LAST INPUT CHARf07A 324900 STA LeHARI jSAVE Il UNTIL NEIl TI"EF07D C9 REl

;; CONSOLE OUT;;~UST PRESERVE HL FOR NX"AND BOOTSTRAP

f07E 3A0300 CONOUT: LDA IOBYTFOS! CDBCFO CALl RlCDISPATCH ;60 TO ONE Of FOLLOWIN6 ADDRESSESfOB4 cnFO DW TTYOUT jBIT5=O: USE TTY AS CONSOLEfOB6 F3FO DN CRTOUT ;1: tRTfosa 24Ft DW TUARTAOUT ;2: TUART'A OUTPUTFOBA 36Ft DM TUARTBOUT ;3: TUART BOUTPUT

;; LIST OUT;

fOSC 3A0300 LIST: LDA IODYTF08F'07 RLe ;BITS 7-'6 ro 2-1F090 07 RLeF091 CDBCFO CAll RLCDISPATCHF094 CDFO DW TTYOUT ;0: TTYf09b F3FO DN CRTOUT ; 1: tRTF09B 24Ft DM TUARTAOUT ;2~ LINE PRINTERf09A 47Ft DW PRINTER ;3: TUARTAOUT PARALLEL

;; PUNCH'OUT;

f09C 3A0300 PUNCH: LDA IOBYT iB1TS 4-5 10 1-2f09F OF RRCFOAO Of RRCfOAl OF RRCfOA2 CDBDFO CALl DISPATCHFOA5 cnFO DW TTYOUT ;0: TTYfOA7 F3fO DM PUNO ;1: HI6H SPEED PUNCHFOA9 69Ft DM t10DE"OUT ;2: "'ODE" OUTPUTFOAB F3FO DN NULlO ;3: UNASSI6NED

; ,/

; READER IN;

FOAD 3A0300 READER: lDA IOBYT ;BITS 3-2 TD 2-1FOBO OF RRCFOS1 CDBDFO CALl DISPATCHFOB4 CCFO DM TIYIN jO: TTYFOB6 59Ft DW RDRIN ;1: HI6H'SPEEDFoaB 69Ft DW KODErHN ;2: PtODEM INPUTFOBA 5bFl DW HULL1 ;3: UNASSI6NED

Page 55: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 1210 PRN PAGE 005

;;SUBROUTINE 10 DISPATCH TO ONE OF 4 FOLlOWINB ADDRESSES;DEPENDIN6 ON IOBYT BITS CALLER HAS POSITIONED IN;BITS 2 AND 1 OF A.;RETURNS TO SUBROUTINE CALl PRIOR TO CALl TO DISPATCH.

FOBC 07·FOBD E606FOBF E3FOCO D5.FOCt 5FFOC2 1600FOC4 19FOC5 7EFOCô 23fOC7 66fOCS bFfOC9 DlfOCA E3FOCS C9

;RLCDISPATCH: RLeDISPATCH: ANI 06H

XTHLPUSH DMOV E,A"VI D,ODAD D"DV A,"INX H"OV H,"t10V l,APOP DXTHlRET

;MA5K BITS;SAVE CAllER'S H, 6ET TABLE ADDRESS

j'.

;5E1 UP FOR DAD;INDEX INTD TABlE

;TABLE MORD 10 HL.,..i,a

;PUT ADDRESS Of ROUTINE, GET CAllER'5 H;60 TO ROUTINE ~

.,;f.*•••••*.*•••t •• l**.t.*•••*t••• t*.~t •••tt.*t••,t*.tl

PHYSICAL DEVIeE ROUTINES

ADDRESSED BY l061CAl DEVIeE ROUTINES ABOVE,TTY AND CRT "AV AlSD HAVE EXTERNAL ENTRY POINTS

TELETYPE INPUT

TTYIN:IF NOT TUARTIOCAlL TTYSTATJZ TTYIN ;WAIT FOR ACHAR TO BE AVAILABlEIN TTY jINPUT ITANI 7FH ;REKOVE PARITYJKP CONIIIT jPOST-PROCESS CHARENDIF

Foce Cil

;TTYSTAT: .

IFINANI

/ENDIFRET

jUSED HERE AND IN CONSTAT ABOVENOT TUARTIOTTYS ;6ET STATUS02H ;MASK BIT

;A 15 HON-O IF CHAR AVAIlABLE;; TELETYPE OUTPUT;;CLOBBERS DE. BOOT DEPENDS ON PRESERVIN6 Hl;"UST PRESERVE Hl FOR NI", BOOTSTRAPTTYOU1: .

IF NOT TUARTIOIN TTYS ;STATU5

Page 56: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FllE: 1210 PRN PASE 006

;OUTPUT THE CHARACTER

NOT TUARIIODD ;DEPENDS ON A7=O AT ENTRY 10 ROUTINETTYNTI ;lOOP TAKE5 9.5 USEe PER COUNT

focn C9

FOCE F3.FOCF 3E04fODt D323fOD3 DB20FODS E6.20FOD7 C9FODS 00fOD9 00fODA 00FODa F3FODC 3E04FODE D323fOEO DB20

RRC ;TE51 BIT 0JNC TIYOUT jWAIT TILL READY TD ACCEPT CHARACTERMOV A,COUT TTYCPI CRRNZ jDONE EXCEPT CR

;DELAY 100 "SEC FOR CR, FOR SlON-RETURNIN6 TERMINALSLXI D,10500DENDIF

TTYWTl:IFDexDRAJPENDIFRET

;; CRI INPUTtt

f';;"ORE CONVENIENT CRT INPUT fOR lEAR-SIE6LER AD"-3;lSCRTIN:; CALL CRTIN j6ET CHAR FRO" RE6ULAR ROUTINE;;I6NDRE BREAK KEY - 115 EASY TD FU"BLE AND HII Il; JZ LSCRTIN; ;-CONVERT UNDERLINE (ARRO., ON OLDER KEYBOARDS) 10 RUBOUT;;50 Il 15H'1 NECESSARV TO USE SHIFT KEY TD CORRECT ERRDR5;;NDT DESIRABLE IF YOUR KEYBOARD HAS BACK ARRON.

CPI UNDERlINEJNZ CONIIIT jPD5T-PROCESS CHAR

"; "VI A,RUBOUTJ"P CONIIIT ;POST-PROCESS CHAR

;;;; NOTE: IF TYPEINS Al TO THE E'DiTOR ERASES lHE SCREEN ON YOUR ADM-3,;; QPEN Il UP AND SET THE 'ClEAR SCREEN' SWITCH TO 'DISABlE'.;;; ;;; CRT :O.UT;;

_ r~ ;;"UST PRESERVE Hl FOR B001, NX"j;CLDBBERS DE;CRT INPUT TUARTAIN PARALlEl;KEYBDS:

DI"VI A,04OUT 23H

,.~rN- 20HANI 20H,RETHOPHOPHOP

KEYBD: DIST: "VI A,04

OUT 23HIN 20H

Page 57: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 1210 PRN PAGE 007

FOE2 E620 ANI 20HFOE4 CADCfO JZ STFOE7 DB23 IN 23HFOE9 DB24 IN 24HFOEB E67F ANI 7FHFOED C35FFO J"P CONIXITFOFO 00 HOPFOFI 00 NOPFOF2 00 NOP

; ;;;;-CRTOUl:

"OV A,CCPI ODH ;CR?JZ NEWLINE ;YES

FOF3 CDOOF4 CALl VIDEOfOF6 C9 RET

ADD SPACE TO "OVE DISPlAY OVER.,jNENlINE:PU5H PSW

CALl VIDEO"VI A,20H ;lOAD BLANK5CAll VIDEOCALl VIDEOCALL YIDEOCAll VIDEOPOP PSWRET

;; TUART 1/0;TUARTASTAT: ;TUART PORT A5TATUS ROUTINE

IF TUARTIOFOF7 D820 IN TUARTAS ;6E1 STATUSFOF9 E640 ANI TUARTDA ;DATA AVAllABLE?FOFB C9 RET

ENDIF;TUARTBSTAT: ;TUART PORT BSTATUS ROUTINE

IF TUARTIDfOfe Droo IN TUARIBS ;6ET STATUSFOFE E640 ANI TUARTDA ;DATA AVAIlABlE?FI00 C9 RET

ENDIF;TUARTAIN: ;TUART PORT AINPUT ROUTINE

IF TUARTIOflOl CDF7FO CALl TUARTASTAT ;CHECK STATUSF104 CAOIFI JI TUARTAIN ;LOOP TIL CHAR READYFI07 DB21 IN lUARTA ;READ DATA CHARF109 Eb7F ANI 7FH ;STRIP PARITYFIOB C35FFO Jt1P CONIXIT ;POST PROCESS CHAR

ENDIF

Page 58: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 1210 PRN PAGE 008

;TUARTBIN: ;TUART PORT BINPUT ROUTINE

IF TUARTIOFIGE CDFCFO CAll TUARTBSTAT ;CHECK STATUSFtl1 CAOEFI JZ TUARTBIN jLOOP TIL CHAR READYF114 DB31 IN TUARTB ;READ DATA CHARF116 E67F ANI 7FH ;STRIP PARITY BITFila C35FFO JI1P CONIXIT ;POST PROCESS CHAR

ENDIF

jTUART PORT AOUTPUT ROUTINE

IF r TUARTIOlI5TST:TUARTAST:

FI1B DB20 IN TUARTAS ;CHECK STATUSFllD FbFD ORI OFBH ;IS PRINTER BUSY?FI1F 3C INR AF120 ca RI iVES, 60 TElL'E"F121 3EFF "VI A,OFFHF123 C9 RET ;NO

TUARTAOUT:F124 CDIBFl CAlL TUARTASTF127 CA24Fl JZ TUARTAOUT ;LOOP UNTIL NOT BUSYFI2A DB20 BUFCHK: IN TUARTASF12C F67F. DRI 07FH ;CHECK IF BUFFER 15 E"PlYF12E :SC INR AF12F C22AFI JNZ BUFCHKF132 79 "OV A,C ;FETCH OUTPUT CHARF133 D321 OUT TUARTA jWRITE CHARF135 C9 RET ;EXIT

ENDIF;TUARTBOUT: ;TUART PORT BOUTPUT

IF TUARTIOF13b DB30 IN TUARTBS ;CHEC~ STATUSF138 E6BO ANI TUARTBE ';BUFFER E"PTY?F13A CA3bFl JZ TUARTBOUT jlOOP IF NOTF13D 79 "DV A,e ;FETCH OUTPUT CHARF13E 87 DRA A ;TE5T PARITYF13F E244Fl JPO TUARTBOl ;SKIP IF PARITY AlREADY ODD.F-142 FbSO ORI 80H ;IN5ERT PARITY BIT

TUARTBOt:F144 D331 OUT TUARTB ;WRITE CHAR

• ENDIFF14b C9 RET jEXIT

PRINTER

;F147 o,OOOOMOOOPRI.NTER:F155 C9 RET

DB 00,00,00,00,00,00,00,00,00,00,°°1°°,00,00

Page 59: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 1210 PRN PA6E ·009

F156 3EIAF158 C9F156 =

; HULL DEVIeE, fOR UNDEFINED DEVIeES.;;FOR UNASSISNED AND AND UNI"PlE"ENTED INPUT DEVIeES,jHERE IS AN INFINITE SOURCE "OF EOF 7 S:HULLI: MVI A,CTRLZ

'RETNULlSTAT EQU NULLI ;CHARACTER ALNAYS READY;iDON'T USE CRT FOR" UNASS INPUT DEVIeES CAUSE IF THERE; 15 NO CRT ON SYSTE" BUT INTERFACE BOARD 15 PRESENT,; SYSTE" MILL HANS.;;FOR UNUASS AND UNI"P OUTPUT DEVIeES, USE CRT.; IF NO CRT IS PRESENT, THIS 15 AN INFINITE DATA SINK.

FOF3 = NULLO EQU CRTOUT;; HISH SPEED READER DRIVER

F159 CDb4FlFISC CA59FlF15F DB02Flbl Eb7FF163 C9

F164 nBOOFlb6 E620FIllB C9

;RDRIN CALl

JZINANIRET

;RDR5TAT IN

ANIRET

RDRSTATRDRIN ;WAIT FOR AVAILABLE CHARACTER"RDR ;SET Il7FH j5TRIP PARITY

RDRS ;6ET STATUS20H ";"ASK BIT FOR RDR

;; HERE 15 MHERE Ta PUT HISH SPEED PUNCH DRIVER

fOF3 =;PUNO EDU NULLO;; MODEtf ~1NPUT DRI VER

;"EAN~HIlE, USE NULl DEVIeE

;I1DDE"IN:

IFtALlJZlNANIRtlENDIF

;"ODEttST:

IFINANIRETENDIF

NOT TUARJJD."ODE"51MODE"IN ;NAIT FOR ACHAR 10 BE AVAILABLEMODEM j6ET CHAR1FH ;REMOVE PARITY

NOT TUARTIOKODE"S ;6ET STATUS02H ;"ASK BIT

;A IS NON-IERaIF CHAR AVAILABLE

;; "ODE" OUTPUT DRIVER;MODE"OUT:

IFINRRCJNC

N{)T TUARTIO"ODE"5

t10DE"OUT

;STATUS;1E5T BIT 0;WAIT TIL READY

Page 60: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 2210

F169 C9

PRN PAGE 010

"DV A,COUT "ODE"ENDIFRET

;PUT THE CHAR

FlbA ClF16B 310001F16E CS

FlbF 21FDFlF172 CDBBFl

F175 ElF176 7eFt77 CD96FlFI7A 7DFl7B CD96Fl

F17E OE20F180 CD7EFOF183 2BFIB4 JEFIBS CD9bFl

FIBS C30000

;; *l.*'**~'*l"*.*'***'ll.ltttt.t**ttlt.t"**'**t*.*,

STARTUP ~ REST ART STUFF

;; RESTART 7 ROUTINE. PRESU"ABLY "EANS J"P TO NON-EXISTENT ME"ORY

TYPES ·CRASH- AND TOP OF STACK (PRE5U~ED TO BE PC)AND BYTE TOP OF 5TACK POINTS TO

;HX": POP B ;6E1 PC OF CRASH (OR KAYBE GARBA6E)

LX l SP, 100H "; SET UP BTACK BELON lOOHPUSH B ;SAVE THAl PC

;TYPE ·CRASH·LXI H,NX""S6CAll CONO"56

;TYPE WHAT 15 PROBABLY THE PC Of THE PROBlE"POP H ;6ET NHAT MAS ON STACK AT ENTRY TO NX" ."DY A,H ;HI ORDER BYTECALl HOUT ;HEX OUTPUT A

'"OV A,l ;lD DRDER BYTECALL HOUT

;TYPE BYTE TOP Of STACK-l POINTS Ta: THIS "I6HT BE THE INSTRUCTION; THAl CAUSED CRASH (RST-7, ETC)

"VI C,"CAll CONOUT ;TYPE ASPACEDel H ;PDINl ONE LESS"DV A," ;6ET BYTE

'CALL HOUT jOUTPUT Il;REBOOT THE SYSTE", SAKE AS ANY NARH RE5TART

J"P MBODT

;;OUT OF LIME STUFF FOR NX";iTYPE "ESSA6E Hl POINTS TO ON CONSOLE. TERMINAIED BV 0 BYTECONDHSG:

F18B 7E MDV A," ;6E1 ACHAR Of MESSASEFISC i7 ORA A ;5E1 FlA6SFIBD ca RZ ;DONE IF 0 BYTEF18E 4F "DY C,A ;TO'C-RE6 FOR CONDUTFIBF CD7EFO CAlL CON DUT ;OUTPUT 1T ON CONSOLE .F192 23 INX H ;POINT NEXl CHARACTERF193 C3BBFl J"P COND"SS ;KEEP OUTPUTTIH6 TO END

F19b F5F197 OFF19B OFF199 OF

;;HEX OUTPUT (Al TO CONSOLEHOUT: PUSH PSW

RRCRRCRRC

Page 61: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

;ttASK 4 BITS;15 Il AOR BIS6ER

FILE: Z2IO

F19A OFF19B CD9FFlF19E Ft

Fl9F EbOFFIAI FEOAFIA3 FAABFlF1A6 CÔ07FIAB Cb30FIAA 4FFIAB C37EFO

PRN

RRCCAllPOP

HOUTNIBl:ANICPIJ"ADI

HNBll: ADJMOVJ"P

PAGE 011

HOUTNIBLPSW

OFH10HNBll ;IF NO'A'-'O'-lO ;YES, ADD DIFFERENCE BETWEEN ASCII AAND 9+1'0' ;CONVERl Il TO ASCII CHARACTERC,A ;10 CRE6ISTER FOR CONOUTCONOUT jPRINT Il AND RETRURN

INDIVIDUAL SUBROUTINES TD PERFOR" EACH FUNCTION

;i PUT THE VARIOUS JU"PS IN lOMER RA"

; "VI A,OC3H raJ"p. OP CODE;;'J"P REBOOr a AT 0

LXI H,"E"T-200H+3SIA WBOOT

; SHLD WBODT+l;;·J"P ENTRYPOINT a AT 5 FOR SYSTE" CALlS

LXI H,ENTRYPOINTSTA ENTRYJ"PSHlD ENTRYJ"P+l

.,·INIllO:

DO ADUMHY SET UP TO KILl TI~E -- 1 DON'T KNOW WHY

WAIT:

FIAE 060AFIBO 2EIFFIB2 3AObFEFIB5 2D _FIBb C2B2FlF1S9 OS

. FIBA C2BOFI

LXI"VI

DELAY: "VIDELAY1: LDA

DCRJNZDeRJNZ

SP,400H8,10n j10 "ILL15ECOND5L,31DOFE06H ;MICROMATION RDATA PORTLDELAYIBDELAY

;; INITIALIZE BOTH CHANNElS OF CROMEMCO TUARl BOARD

FIBD AF XRA A ;MA5K INTERRUPTS FOR BOTH PORTSFIBE D323 OUT lUARTA"FICO D333 OUT TUARTBrtFIC2 3EOI "VI A,OI ;RESET BOTH PORTSFIC4 D322 OUT TUARTACFICô D332 OUT TUARTBCFICS 3ECO "VI A,OCOH ;PORTA := 9600 BAUD

;FOR 300 6UAD, USE 84; (FOR 1200 BAUD, USE 88)

FICA D320 OUT TUARTASFlee 3EAO "VI A,OAOH ;PDRT B := 4800 BUAD

Page 62: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 2210

FleE D330

PRN

OUT

;jINIT 22 IOBYTE

PAGE 012

TUARTBS

FIDO 3E81FID2 320300

FID5 21FOEFFIDB OEOFFIDA 3EOOFIDC 77FIDD 23FIDE ODF1DF C2DCFIFIE2 21FFEFF1ES 3608F1E7 OEOBFIE9 CDOOF4

FlEe OE09FIEE 115EOOFIFI cnosooFIF4 OE09FIFb 1106F2FIF9 CDOSOO

FIFe C9

"VI A,PORTFFSTA IOBYT

;;INITIALIZE VIO BOARD TO 80 BV 24JAND CLEAR VIDEO PARAKETER AREA

LXI H,VIOKE"+07FOH JClEAR PARA"ETER AREA"VI t,OFH"VI A,O

ZERO: "DV ",AINX HDeR CJNZ ZEROLXI H,VI~E"+7FFH ;INITIALIZE"VI ",OOBH ;80124"VI C,OBH jClEAR SCREENCALl VIDEO

;.

5I6N-DN "ESSA6E"VI C,9LXI D,SI6NONCAll BDOS"VI C,9LXI D, "ESSA6ECAll BDOS

RET

;ftFD ODOA435241NX""S6: DB..,

;MESSA6E:

. F20b OAOD2B5749 DBF21B 4b303030 DBF21F 290AOD24 DB

; /,./

ENUIOPRO":

ODH,OAH,'CRA5H ',OOH ;TEXT USED BY ·MXM- ROUTINE

OAH,ODH, , nnTH IOPRO" IN AT ''FOOO' ; IOPRO"/I000+30H')',OAH,ODH,24H

F223 END0005 aDOS 0008 as F12A BUFCHK F800 COLDBOOT F051 CONINF019 CONIXI f05F CONIXIT FlaB CONOl156 FOlf CONOUT F041 COt(SF039 CONSTAT OOOD CR fOF3 CRTOUT 0000 CRTS 0001 CRT0003 CTRlC OOlA CTRLZ FIBO DELAY FIB2 DELAY! 0045 DI5KNOFOBD DISPATCH 0043 D~AAD 0046 DUPIMY F223 ENDIOPROM F039 ENDTB

Page 63: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 1210 PRN PAGE 013

FOOO ENTAB 0005 ENTRYJHP 0047 ERRDRS0048 FLA6 FIAB HNBLI F196 HOUr0003 IOBYT fOOO IOPRO" fODB KEYBD0049 LCHARO OOOA LF fOBC LISTF20ô MESSA6E Flô9 "ODEKIN F169 "ODEMOUTfOF3 NULLO F15ô NULlSTAT F16A NX"F147 PRINTER F09C PUNCH FOF3 PUNO0000 RDR5 F164 RDR5TAT FOAD READERFOBC RLCDISPATCH 007F RUBOUT005E S16NON 0001 SOH FODC ST0041 TRAK! Foce TTYIN fOCD TTYOUT0022 TUARTAC FlOt TUARTAIN 0023 TUARTAM0021 TUARTA FOF7 TUARTASTAT FI1B TUARTASTFIOE TUARTBIN 0033 TUARTBM F144 TUARTBOI0031 TUARTB FOfC TUARTBSTAT 0040 TUARTDA005F UNDERlINE 004C USEREXIT F400 VIDEO0000 NBOOT F003 NBOTE FIDC -ZERO

0018 ESC OOOC FFF19F HOUTNIBl FIAE INITIOFOCE KEYBDS 0049 lCHARJFI1B lI5TST 0004 l06DI5KF169 "ODE"5T F156 HUlLIFIFD NX""S6 0081 PORTFF0002 RDR F159 RDRINf04F READER5TAT0040 seRAT OO~2 SEcrOR0009 TAB 0040 TRACKFoce TTYSTAT FOCD TTYWTlF124 TUARTADUT 0020 TUARTAS0032 TUARTBC 0080 TUARTBEF136 TUARTBOUT 0030 TUARTBS0001 TUARTIO 0020 TUARTEBOO VIO"E" F1AE MAIT

Page 64: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: Z2VIO, PRN PAGE 001

f

; tt.t.ltl VIO VIDEO DRIVER .t••ll ••; -

; VIODVR.ASM Vl.00 ACWVl.lO JERVI.!1 JER

VI.I2 JER;; BA5ED ON:

8/19/7911/21/7912/6179 MOVED START OF LINE

AND FIXED ESC SEQ TO USE ASCII7/12/81 "OVED lINE START BACK

AND "OVED TO"IOPROK OFFSET

VDt( DRIVER FRO":PROCESSOR TECHNOL06Y CORP.'SSOLOS VERSION 1.3 - RELEASE 3/27/77FRD" CP/" USERS GROUP VOLU"E 15

;; MODIFIED BY:

ART WILLIS267 CA5ITAS BULEVARlOS SATOS, CA 95030

;; THIS DRIVER 15 DE5I6NED FOR A24 X80 DISPlAY, BUT; CAN BE RECONFI6URED BY CHAN6INS N$LINE AND l$lINE.

0018 =0050 =

;N$lINE EQU 24ltLINE EDU 80

SYSTE" EQUATES

jNU"BER Of LINE5 ON SCREEN;lEH6TH OF EACH lINE

E800 =FOOO =F400 =

;VID"Et1 EQUlOPRO" EaULOCAlE EQU

OEBOOHOfOOOHIOPRD"+0400H ;OFfSET FOR 7000=9200

s

VIDEO DISPLAY ROUTINES

; THESE ROUTINES ALLOW FOR STANDARD VIDEO TERMINAL,") ; OPERATIONS. ON ENTRY, THE CHARACTER FOR OUTPUT IS IN

; RESISTER CAND ALl RE61STERS EXCEPT lAI AND FLA6S ARE; UNALTERED ON RETURN.

;••••******* •• l* •••••• ***••••• ,.tttt•••••*t.tt,•••• tttt,t •• tt.;

ORS LOCATE-IOOH

; THI~,JS··DEBU6GIN6 CODE TO RElOCATE THE VIO D-RIVER FOR TEST USE.j.ttt••• t •••• ta, ••• tt.tttttt.tt.tt ••••••••••••• t.tt ••••t.tlttlt;;BIOS EQU

;jSTART: LXI

LXILXI

OBEOOH ;RA" ADDRESS OF BIOS JU~P VECTOR

D,200HH,VIOUTB,BOOH

Page 65: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: Z2VIO PR"'$ PAGE 002

;lOOP: LDAX D"DV ",AINX DINX ·HDex B"DV A,CDRA BJNZ lOOP-START+I00H

;; LXI H,CONIN;; SHLD BIDS+OAH

LXI H,VIOUTSHLD BIOS+ODHCALL PERSE"VI A,OBH ;SELECT "ODE 2STA VIO"Et1+7FFH

;; "VI A,081H;; STA 3 ;SET PRINTER ON 5ERIAl PORT;; "YI A,OBBH;; OUT 20H ;SET BAUD RATE 10 1200 (DEFAULT MAS 300).. J"P OOH";;

F400 ORS LOCAlE;;CONIN: CALl OCOIFH iCHECK KEY BOARD STATUS

JZ CDNIN ;LOOP TIL CHAR AYAllABlEIN KDATA ;READ KEYBOARDCPI 80H ;18 Il ACONTROL KEY?

'; Re ;NO: EXITANI ...2FH ;YES: CO"PRESS CODES TO 0-lF RAN6EceJ '2Q,H ;STILl 100 BIG?Je CONINI ;NO: SKIP ADJUST"ENT

; SUI tOM ;YES: ADJUST T~ NITHIN RANGE;CONINl: PUSH H ;SAVE WORKIN6 RESISTER

LXI H,ITAB ;ADDRESS OF INPUT TRANSLATION TABLEADD l ;INDEX BY COMPRESSED INPUT CHAR"OV L,A.JNC CONIN2 ;JIF HIS O.K.

; INR H jOVRFLO: "UST BU"P H;CONIN2: MOV A," jA CONTAIN5 XLATED CHAR

POP H ;RE5TORE H/lRET

;F400 E5 VIOUT: PUSH H ;SAVE MOST RE615TERSF401 D5 PUSH DF402 cs PUSH BF403 79 "0'1 A,CF404 47 "GV B,A ;SAVE CHAR IN B

; "./

; TEST IF ESC SEQUENCE HAS BEEN 5TARTED

F~05 3AF3EF lDA ESCFl ;6ET ESCAPE FLAGF40B B7 ORA AF409'C23BF5 JNZ Eses ;IF NON-ZERO GO PROCESS THE REST

;F~OC BO CHPCK: DRA B ;15 Il A~ULL

F40D CA27F4 JZ SOBK ;DD AQUICK EXIl IF AHULL

Page 66: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: Z2VIO PRN PAGE 003

F410 2194F5 LXI H,TBl ;POINT TO SPECIAL SHARACTER TABLEF413 CD31F4 CALl T5RCH ;60 PRDCESS

;F416 CDEEF4 GOBACK: CALL VDADD ;6ET seREEN ADDRESSF419 7E "OV A," ;6ET PRESENT CURSOR CHARACTERF~lA F6BO ORI BOHF41C 77 MDV ",A ;CURSOR IS BACK ONF41D 2AFIEF LHLD SPEED-l ;6ET DELAY SPEEDF420 23 INX H ;"AKE SURE Il 15 NON-ZEROF421 AF XRA A iDELAY WILL END WHEN H=OF422 2B TUtER: Del H iTI"ER DElAYS HEREF~23 Be CM? H ;DONE WITH DELAY YETF424 C222F4 JNZ TI"ER ;KEEP DELAYINSF427 Cl SOBK: POP BF-i2B Dl POP D ;RESTORE RE615TERSF429 El POP HF42A 79 "OV A,C ;5AVE CHARF42B 32F5EF STA LOCHARF42E C9 RET ;EXIT FRO" VDt1DT

;F42F 23 NEIT: INX HF430 23 INX H

; THIS ROUTINE SEARCHES THROU6H ASINGLE- CHARACTER; TABLE FOR A"AICH TO THE CHARACTER IN -B- •. IF FOUND; ADISPATCH IS "ADE TO THE ADDRESS fOLLONIN6 THE "ATCHEDj CHARACTER. IF NOT FOUND THE CHARACTER IS DISPLAYED ON; THE "ONITDR.

F431 JEF432 B7F433 CA47F4F436 BBF437 23F438 C22FF4F43B E5F43C CDOBF5F43F E3

;T5RCH: 110Y

ORAJICI1PINXJNZPUSHCALlXTHL

A,"ACHARBHNEXlH.CRE"

;6E1 CHR FRO~ TABLE

;ZERO 15 THE LAST;1E51 THE CHR;PDINT FORWARD

jfOUND ONE ••• SAVE ADDRESSjRE"OVE CURSOR;6E1 DISPATCH ADDRESS TO Hl

;; THIS 15 THE DISPATCH ROUTINE; Hl POINTS Ta RETURN ADDRESS, BUT HL WILL BE; RE5TORED FROM STACK BEFORE DISPA1CH;

F440 7, DISPT: MDV A," jLDM ADDRESS BYTEF441 23 INX HF442 66 "av H," jHI6H ADDRESS BYTEF443 6F .. ~" ·~ov l,A ;HL NON COMPLETEF444 E3 DIS?!: XTHL ;XCH6 HL WITH HL ON STACKF445 7D MDV A,L jALSO COPY HERE FOR SETSF446 C9 RET ;AND GO OFF TD THE ROUTINE

PUT CHARACTER 10 SCREEN

F~47 78F~~B FE7F

;CHAR: "DV

CPIA,B1FH

;6ET CHARACTER;15 Il ADEL?

Page 67: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: Z2VIO PRN PAGE 004

F44A ca RI ;60 BACK IF 50

;F44B = OCHAR: EQU $ jACTUAlLY PUT CHAR TO SCREEN NOWF44B CDEEF4 CALL VDADD ;6ET SCREEN ADDRESSF44E 70 "av ",B jPUT CHR ON SCREEN

F44F 3AFOEF lDA NCHAR ;6ET CHARACTER POSITIONF452 FE4F CPl. LtLINE-l ;END OF LINE?F454 DA79F4 Je OKF457 3AF1EF LDA LINEF45A FEl7 CPI NSLINE-l ;END Of SCREEN?F45C C279F4 JNZ OK

;; END OF SCREEN••• ROLL UP ONE LINE;

F45F AF SCROlL: IRA AF4bO 32FOEF STA NCHAR ;BACK TO FIR5T CHAR POSITIONF463 1150E8 SROL: LXI D,VIO"E"+LSlINE ;ADDRESS Of SECOND LINEF466 2100E8 LXI H,YIOI1E" jADDRESS OF FIRST LIMEF469 CS PUSH B jSAVE DATA CHARF4bA 018007 LXI B,NtlINE*L$lINE ;NU"BER OF CHARS TO "OVEF4bD lA SROLl: lDAX D ;ttDV ACHARF46E 77 "DV ",AF46F 13 INX D ;BU"P POINTERSF470 23 INX HF471 OB Del BF472 79 "DV A,CF473 BO DRA BF474 C2bDF4 JNZ SROLIF477 Cl POP BF478 C9 RET

;; INCRE"ENT LIME COUNTER IF NECESSARY;

F479 3AFOEF OK: lDA NCHAR ;6ET CHR POSITIONF47e 3C INR AF47D FE50 CPI L$lINE ;CHECK FOR END OF LINEF47F 32FOEF STA NCHARF482 CO RNZ ;DIDN'T Hil END OF LINE, OKF4B3 AF IRA A ;RE5ET CHAR POINTERF484 32FOEF SlA NCHARF487 = PDOWN: EQU $ ;CURSOR DOWN OHE LINE HEREF487 3A~lEF LDA llNE ;6ET THE LINE CDUNTF4BA 3C INR AF48B FEl8 CURSC: CPI N$LINE ;STORE THE NEWF4BD 32FIEF CUR: ""'STA lINE jSTORE THE NEWF490 CO RNZ ;EXIT, UNLESS SCROLL NEEDEDF491 3D DeR A jlEAVE LINE COUNlER AS WASF492 32FIEF S1A LIMEF495 C9 RET j«< "AV NEED TD CALl SCROLL. »)

;; ERASE SCREEN;

F496 2100E8 PERSE: LXI H,VIOttE" ;POINT 10 SCREENF499 3bAO "VI ", BûH+' , ;lH15 15 THE CURSOR

Page 68: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FllE: 12VIO PRN PAGE 005

F49B 23 INX H ; BUttP 15TF49C C5 PU5H B ;SAVE CHARF49D 01CF07 LXI B,N$LINEtL$LINE+LSLINE-l ;SCREEN lEN6TH - CURSORF4AO = ERASI : E{lU $ ;LOOP5 HERE rD ERASE SCREENF4AO 3b20 "VI "' , ;BlANK Il OUT,F4A2 23 INX H jNEXTF4A3 OB Dex B iDECREHENT COUNTF4A4 79 MDV A,C ;END OF SCREEN?F4A5 BO DRA BF4Ab C2AOF4 JNZ ERA51 ;NO: KEEP BLANK1N6F4A9 Cl POP B ;RESTORE DATA CHAR

;~F4AA 3EOO PHOt'tE: "VI A,O jRESET CURSOR--CARRY=ERASE, ELSE HOME

F4AC 32FIEF STA LINE jZERO llNEF4AF 32FOEF STA NCHAR ;LEFT SIDE OF SCREENF4B2 C9 ERAS3: RET

;F4B3 CDEEF4 CLINE: CALL VDADD ;DET CURRENT SCREEN ADDRESSF4B6 3AFOEF LDA NCHAR ;CURRENT CURSOR POSITIONF4B9 FE50 CLINt: CPI l'LIME ;ND "ORE THAN lSlINE-lF4BB DO RNC ;All DDNEF4BC 3620 "VI ",' , ;ALL SPACED OUTF4BE 23 INX HF4BF :Je INR AF4CO C3B9F4 J"P CLINt ;LOOP TO END OF LIME

ROUTINE TO "OVE THE CURSOR UP ONE LINE;

F4C3 3AFIEF PUP: LDA LIME j6ET lINE COUNTF4C6 3D DeR AF4C7 F2CCF4 JP PUPI ;"ERGE TO HANDLE CURSORF4CA 3E17 "VI A,N$lINE-1F4CC 32FIEF PUPl: STA LIMEF4Cf C9 RET

"OVf CURSOR lEFT ONE POSITION;

F4DO 3AFOEF -~ PLEFT: LDA NCHARF4D33D DeR AF4D4 = peUR: EQU $ jCURSOR ON SAME lINE

. F4D4 32FOEF STA NCHAR iUPDATED CURSORF4D7 F2DCF4 JP PLEFTI ;EXIT UNLESS WRAPF4DA 3i4F "VI A,l.LINE-l ;LET IT NRAPF4DC 32FOEF PLEFTl: STA NCHARF4DF C9 RET

.;-

CURSOR RI6HT ONE POSITION;

F4EO 3AFOEF PRIT: LDA NCHARF4E3 3C INR AF4E4 FESO CPl LtlINEF4E6 C2EAF4 JNZ PRIT2F4E9 AF PRIT!: XRA AF4EA 32FOEF PRIT2: STA NCHARF4ED CfI RET

Page 69: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

PAGE 006

;.; ROUTINE 10 CALCULATE SCREEN ADDRESS

ENTRV AT: RETURNS:

VDADD CURRENT SCREEN ADDRESSVDAD2 ADDRESS OF CURRENT LINE, CHAR ·C·VDAD LINE lA·, CHARACIER POSITION 'C1

;F4EE 3AFOEF VDADD: LDAF4Fl 4F "DVF4F2 3AFIEF VDAD2: lDAF4F5 bF VDAD: "DVF4Fb 87 ADDF4F7 87 ADDF4FB 85 ADDF4F9 OF RRCF4FA Of RRCF4FB Of RRCF4FC OF RRCF4FD bF "DVF4FE EbOf ANIF500 CbEB ADJF502 67 "DYF503 7D "DVF504 EbFO . ANIFS06 81 ADDF507 6F novF50B DO RNCF509 24 INRF50A C9 RET

NCHAR ;6ET CHARACTER POSITIONC,A j't' KEEPS ITLINE ;LINE POSITIONL,A ;INTO 'l'A ;Tl"E5 lWOA ;TI"E5 FOURL ;11"E5 FI YE.

;SWAP NIBBlES

L,A jl HAS IlOFH ;LON ORDER D16IT OF HVIO"E" 5HR 8 ;HI6H SCREEN OFfSETH,A ;NON HIS DONEA,L jTMI5T l'S AR"OfOHcL,A

H;H &l ARE NOM PERVERTED

F50B CDEEF4F50E 7EF50F Eô7FF511 77F512 CCi

ROUTINE TO, REMOVE CURSOR.,CRE": CAll· VDADD ;6ET CURRENT SCREEN ADDRESS

"DV A','"ANI 7FH ;STRIP OFF THE CURSOR"OV ",ARET

ROUTINE TO BACKSPACE

F513 CDDOF4F516 CDEEF4F519 3610F51B C9

;PBACK: CALl

CAlLt1VIRET

PlEFTVDADD ;6ET SCREEN ADDRESS"," ;PUT ABLANK THERE

ROUJINÉ TO PROCESS ACARRIA6E RETURN;

F51C 3AF5EF PCR:F51F B8F520 ca

F521 CDE9F4

LDA LOCHARCt1P BRICALL CLINECALL PRIT1 ;AND STORE THE NEW VALUECALl PRIT ;"OVE START OF llNE OVER FOR DU"B VIDEOCALl PRITCALL PRIT

Page 70: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 12VIO PRN PAGE 007

CALL PRITF524 C9 RET

ROUTINE TO PROCESS AlINEFEED;

F525 3AFIEF PLF: lDA lINE ;6ET lINE COUNTF528 3e INR AF529 FEIS CPI N$llNE ;END Of SCREEN?F52B C28DF4 JNZ CUR ;HO--NO HEED TO SCROLLF52E C3b3F4 J"P SROL ;YES--THEN SCRDlL

ROUTINE TO PROCESS ERASE TO END OF LINE;

F531 CDB3F4 PEEOL: CALLF534 C9 RET

CLINE jERASE 10 END OF LIMEj ••• AND EXIT

SET ESCAPE PROCESS fLAS

F535 3EFFF537 32F3EFF53A C9

;PEse: "VI

STARET

A,(-l) AND OFFHEseFl ;5ET FLA6

PROCESS ESCAPE SEQUENCE

F53B CDOBF5F53E CD44F5F541 C316F4

F544 3AF3EFF547 FEFFF549 CA75F5

;Eses: CAlL

CALLJ"P

;ESCSP: lDA

CPIJZ

CRE" ;RE"OVE CURSORESCSP. ;PROCES5 THE NEll PART OF SEQUENCEGDBACK

ESCFl ;6ET ESCAPE FLA6(-1) AND OFFH ;TE5T FLA6

SECOND

PROCESS THIRD CHR OF ESC SEQUENCE

F54C 21F3EF LXI H,ESCFlF54F 3bOO "VI ",0 ;ND "ORE PARTS TO THE SEQUENCEF551 FE32 CPI '2'F553 DA64F5 Je SETX ; SET X·1FIS ONEF556 CAbAF5 JZ SETY jSET y IF IS TWOF559 FE38 CPI '8'F558 CA70F5 JZ STSPD ;SET NEW DISPLAY SPtED IF IBI

F55E FE39 CPI '9'f5bO DA4BF4 Je OCHAR ;PUT Il ON THE SCREENF5b3 CO RNZ

•lAB ABSOLUTE TO VALUE IN RE6 B

fSô4 78F5b5 D620F567 C3DCF4

;SET X: ,..'/ "DV

, SUIJKP

A,B ;GET CHARACTER32PlEFTl

SET CURSOR TO lINE lB"

F5bA 78F56B D620F5bD C3CCF4

;SETY: KO\'

SUIJf1P

A,!32PUP1

Page 71: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: I2VIO PRN PAGE 008

; SET nISPLAY SPEED

F570 78F571 32F2EFF574 C9

;STSPD: "OVDISPD: SlA

RET

A,B ;HERE TO SET DISPlAY SPEEDSPEED ;SET DISPLAY SPEED

PROCESS SECOND CHR OF ESC SEQUENCE .

F575 78F576 FE33F57B CA8BF5F57B FE34F57D C2B7F5

;SECOND: "OV

CPIJICPIJNZ

A,B ;6E1 WHICH (RECOVER CHR?l'3'CURET ;RETURN CURSOR PARAMETERS'4'ARET2

ESC <4> RETURN ABSOLUTE SCREEN ADDRESS

F580 44 ARET: "GV B,HF5Bl 4D "DV C,l jPRE5ENT SeREE" ADDRESS TO BC FOR RETURN

;F582 El ARET1: POP H iRETURN ADDRESSF583 Dl POP D ;OlD BF584 CS PUSH BF585 E5 PUSH HFS8b AF IRA AF587 32F3EF ARET2: STA ESCFLF58A C9 RET

;; ESC (3) RETURN PRESENT seREEN PARA"ETERS IN IBC·

F5B'B 21FOEFF5BE 46F5Bf 23F590 4EF591 C382F5

;CURET: LXI

"DVINXMavJI1P

H,NCHARBt " ;CHARACTER POSITIONHC," jlINE POSITIONARETl

DISPLAY DRIVER COM"AND TABLE

; THIS TABLE DEFIHES THE CHARACTERS FOR SPECIAL; PROCESSIN6. IF THE CHARACIER 15 NOT IN THE TABLE Il; SOES TO THE SCREEN.;

F594 OB. TBL: DB CLEAR-80H ;CLEAR SCREENF595 9bF4 DW PERSEF597 17 DB HP-SOH ;UP CURSORF598 C3F4 ""-'DM PUPFS9A lA DB DOWN-BOH ;DDWN CURSORF59B B7F4 DM PDOWNF59D 01 DB LEFT-BOH ;LEFT CURSORFS9E DOF4 DW PLEFTF5AO 13 DB RI6HI-SOH ;RI6HT CURSOR

• F5Al EOF4 DW PRITF5A3 OE DB HOME-BOH jHOr1E CURSORF5A4 AAF4 DW PHOrtEF5Ab 00 DB CR ;CARRIA6E RE1URN

Page 72: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 12VIO PRN PAGE 009

F5A7 lCF5 DN PCRF5A9 OA DB lF ;LINE FEEDF5AA 25F5 DW PLFF5AC 06 DB EEOl jERA5E TO END OF llNEF5AD 31F5 DW PEEOLF5AF 5F DB BACKS jBACKSPACEF5BO 13F5 DM PBACKF5B2 lB DB ESC ;ESCAPE KEYF5B3 35F5 DW PEseF5B5 00 DB 0 jEND OF TABLE

VIO EQUATES

é ~ S~X (6)

Z. --te 5&:, (7 (B)

<)S7 5PEiff> (J3)

.. J~./. ::::-;(:.~17'e,.1' _. 1 1~vi) Eë;c /N 7-;:J/6t (5-

- STcJ - t ,,() ~SC{L

c. P 1 Cf

('-/-lfèZ ~ bF7- C'$cr'c­

-- 00 fi-,;-

- AJ2 *. ESCÇ(E{s{;- ~\.. r7c~ocJ6 (uf?S0~-, -rFs T FLtJi~

- ~"PJ'~ ÇEcO/J 1.)

? ceo~/')- eG(ÔV~. C. tfl€ t(

C PI:3 - é'eTv~,u Cu~ ~f>AteC-t-(

CF 1 Ll - f~'T A~ 'S ~C~, I-l~

~LÇE 5 rOf? g.. c. l~1 ~ C-SC-{~ l(~

C' U,,1e S - Tp # L W~S NZ 6SCPL

wt L-~ TC!-S r IJ ~ r, c; d- 'tO tEs'c~

- t2~ Cv 12-.

Cb-(~C~ t F -, ~ f-Ç"CPL

1J6'tl\A.U cs 7 ~ {(fœ.à C t/ce..

VIO PARAP1ETERS

KEYBOARD SPECIAL KEY A55I6NMENTS;DOWN E9U 9AHUP E9U 97HlEFT EQU 81HRIGHT EOU 93HtlODE EQU BOHClEAR EOU BBHHDrlE EGU OBEHBACKS EQU SFH jBACK5PACEEEOL EQU 06LF EQU 10CR EQU 13BLANK·'~".EgU ' ,SPACE EQU BLANKCX EDU 'X'-40HESC EQU IBH

PORT ASSI6NMENTS;STAPT ERU OFAH jSTATU5 PORT GENERAL5ERST EQU OFBH ;SERIAL STATUS fORT

,'~ SDATA EQU OF9H ;SERIAL DATATAPPT EQU OFAH jTAPE STATUS PORTTDATA EQU OFBH ;TAPE DATAKDATA EGU OfCH ;KEYBOARD DATAPDATA EQU OFDH ;PARAlLEl DATAD5TAT EQU ()FEH jVDM DISPlAY PARAHETER PORTSENSE EQU OFFH ;SENSE SNITCHE5

BIT ASSl6NMENT MASK5;seD EQU 1 ;SERI~L CARRIER DETECTSDSR EGU 2 ;SERIAL DATA SET READYSPE EQU 4 ;SERIAl PARITY ERRORSFE EGU 8 jSERIAL FRAMIN6 ERRDRSOE [OU 16 ;SERIAL OVERRUN ERRORseTS EQU 32 ;SERIAL CLEAR Ta SENDSDR EgU 64 ;SERIAl DATA READY

OOFA =OOFS =OOF9 =

. OOFA =OOFB =

'OOFC =OOFD =OOFE =.OOFF =

0001 =0002 =0004 =0008 =0010 =0020 =0040 =

009A =0097 =0081 =0093 =0080 =0088 =008E =.005F =OQ06 =OÔOA :.OOOD =0020 =0020 =

. 0018 =00lB =

Page 73: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: Z2VIO PRN PA6E 010

0080 = STBE [(lU 128 ;SERIAl TRANSMITTER BUFFER*EMPTY;

0001 = KDR EOU 1 ;KEYBOARD DATA READY0002 = PDR EgU 2 jPARALLEl DATA READY0004 = PXDR EDU 4 ;PARALlEL DEVIeE READY0008 = TFE EGU B ;TAPE FRA"IN6 ERRDR0010 = TDE EQU 16 ;TAPE OVERRUN ERROR0040 = TDR EGU 64 ;TAPE DATA READY0080 = TTBE EQU 128 ;TAPE TRANS"ITTER BUFFER E"PTY

VIO GLOBAL AREA

EFFO ORB VIOMEtt+07FOH

lI'" PARA"ETERS STORED IN RA" Il'";

EFFO 01 NCHAR DB 1 ;CURRENT CHARACTER POSITIONEFFI 01 LINE DB 1 jCURRENT lINE POSITIONEFF2 01 SPEED DB 1 jSPEED CONTROL BYTEEFF3 01 ESCFL DB 1 jESCAPE FLA6 CONTROL BYTEEFF4 01 NueNT DB 1 ;NU"BER OF NULlS AFTÈR CRLFEFF5 01 LOtHAR DB 1 jLAST OUTPUT CHAR

;; INPUT TRANSLATION TABLE;;jITAB: DB OOH,13H,lAH,10H,IAH,IAH,lAH,03H

DB lAH,lAH,lAH,OBH,OCH,lAH,OEH,lAHDB 13H,05H, 18H, lAH,03H,12H,ObH, 19H·DB OCH,15H,16H,17H,lAH,07H,04H,OEH

;;;;

EFF6 ENDf582 ARET1 F587 ARET2 F5BO ARET OO:iF ·BACKS 0020 BLANKF447 CHAR F40C CHPCK OOBB CLEAR F4B9 CLINt F4B3 CLINEF50B CRE" ~~ OOOD CR F58B CURET F48B CURse F48D CUR0018 CX F444 DISPI F571 DISPD F440 DISPT 609A DOWNOOFE D5TAT 0006 EEOl F4AO ERA51 F4B2 ERA53 EFF3 ESCFL001B ESC F5:>B ESCS F544 ESCSP F416 GDBACK F427 GDBKOOBE HOKE FOOO IOPROI1 OOfC KDAlA 0001 KDR 0081 lEFTOOOA lF • EFFI LIME 0050 LLINE F400 LOCAlE EFF5 lOCHAR0080 KODE EFFO NCHAR F42F NEXT 0018 NLINE EFF4 NueNTF44B aCHAR F479 OK F513 PBACK F51C PCR F4D4 PCUROOFD PDATA F487 ~OONN 0002 PDR F531 PEEOL F496 PERSEF535 PESC F4AA"PHOt1E F4DO PLEFT F4DC PLEFTI F525 PLFF4EO PRIT F4E9 PRIT! F4EA PRIT2 F4C3 PUP F4CC PUPI0004 PXDR 0093 RIGHT 0001 SCD F45F SCROLL 0020 seTSOOF9 5DATA 0040 SDR 0002 SDSR F575 SECOND OOFF SENSEOOFB SERST F5b4 SETX F5bA SETY 0008 SFE 0010 SOE0020 SPACE EFF2 SPEER. 0004 SPE F463 SROl F46D 5ROLIOOFA STAPT 0080 STBE F570 STSPD OOFA TA?PT F594 TBLOOFB TDATA 0040 TDR 0008 TFE F422 TIMER 0010 TOEF431 T5RCH 0080 TTBE 0097 UP F4F2 YDAD2 F4F5 VDAD

Page 74: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: 12VIO PRN

F4EE VDADD E800 VIOMEK

PAGE 011

F400 VIOUT

Page 75: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PRO" PRN PASE 001

j

;PRD" ROUTINES FOR "ICRDMATION DOUBLER, VERSION CI2

;THE Cil VERSION HAS NOPS IN SYNC ROUTINE TO ALlOW "ORE FREQUENT REFRESH;OF DYNAMIC RA~5

;IT AlSO SETS UP THE SIDE BIT EARLIER TO "EET SETUP TI"E FOR Y-E DATA DRIVES

;;THIS VERSION HAS THE FOlLONIN6 CHAN6ES FRO" C.t:jHAS FIX FOR Cil BUG IN BETTINS UP DENSITY;DISABlES INTERRUPTS AFTER FINDIN6 CORRECT SECTORjHAS SlOWER STEP AND SETTLE TI"ES

FEB 11, 1980

FBOO BASE DR6 OF800HFCOO = FUFF EQU . ·BASE+400H ;SCRATCHPAD RA"

;;START OF HARDWARE PORT DEFINITIONS

FEOO = WRCONT EGU BASE+itôOHFEOI = WRClK EQU WRCONT+lFE02 = WRUART EQU WRCONT+2FE04 = WRttRKCRC EQU WRCONT+4FEOS = WRI1RK EQU NRCONT+5FE06 = WRDATA EaU WRCONT+6FE07 = WRCRC EQU NRCONT+7FEOO = RD5TAT EQU WRCONTFE02 = RDUART EQU NRCONT+2FE04 = RD"RKCRC EQU WRCONT+4FEOS = RD"ARK EQU WRCONT+5

"FE06 = RDDATA EGU WRCONT+bFE07 =. SYNCPORT EQU "'ReONT+7

;;STARTOf RAtt VARIABLE DEFINITIONS;

FCOO = ERRORBYTE EGU BUFF ;ND. OF ERRDRS DURIN6 RETRIESFCOI = DENBYTE E9U BUFF+"t ;0 FOR SINBLE DENSITY

;4 FOR DOUBLE DENSITYfC02 = READWRITE EQU BUFF+2 ;0 FOR READ

;10H FOR WRITEFC03 = COHTROLBYTE EGU BUFF+3 IRA" I"ASE Of RD5TAT OR WRCONTFC04 = TRACK EQU BUFF+4 .Feos = PRESDISK EQU BUFF+SFCOb = L06INTAB EQU BUFF+b jFOR EACH DRIVE

;0 IF DRIVE HAS HOT BEEN L066ED IN

Page 76: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PROM PRN PAGE 002

;S5H IF DRIVE HA5 BEEN L066ED INFCOA = SECTDR EgU BUFF+OAHFCOB = DI1A EQU BUFF+OBH ;DMA ADDRESSFCOD = DISK EQU BUFF+ODHFCOE = TESTNEXT ECU BUFF+OEH ;S5H IF WANT TO TEST DENSITY

; OF NEXT TRACKFCOF = TWOSIDE EQU BUFF+OFHFCI0 = STEPTII1E EQU BUFF+I0HFeIl = ABOVE43 EgU BUFF+1IH jlOH IF (TRACK)<44D

; SOH OTHERWISEFC12 = TRACKTAB EgU BUFF+12HFClb = DENl1AP EQU BUFF+lbH ;SAKE CONVENTION AS DENBYTEFC20 = TRYl EgU BUFF+20HfC21 = RETRYCOUNT EQU BUFF+21HFC22 = CURRDRIVE EQU BUFF+22HFC23 = TEST"AX EQU BUFF+23H ;NO. RETRIES FOR DENSIIY TEST

OOOF = STEPSETTLE EgU 150028 = HEAD5ETTLE EQU 40FC40 = SlACK EoU BUFF+64D

;BE6IN WITH JU"P TABLE

FBOO C3D3FB J"P COlDBOOTFS03 C391FB J"P HOI1EFB06 C31EFB J"P SELDSKF809 C3AEFA J"P SETTRKFBOC t3A9FA J"P SETSEeFBOF C3A3FA .. J"P SETD"AFB12 t329FB JI1P READFB15 C32DF8 ,. J"P WRITEFRIS t369FA JI1P SKEWF81B t303FB J"P SETDEN

PAGE

NRITEPROTECT:

FBlE CDBEFB CAlL DISKREADYI ;lOADS HEAD;WAITS TILL DISK READY;RETURNS (RDSTAT) IN B

FB21 78fB22 Eo04F824 CO Il

F825 3A05FEFB2B C9

FB29 AFF82A C32FFB

FB2D 3EI0

"OV A,BANI 04 ;WRITEPRT BIT FROM DRIVERNZlDA RDt1ARK ;RE5ET5 HEAD lOAD COUNTERRET~" .

READ: ;ENTRY POINT FOR READ ROUTINE

XRA A ; (READWRITE)= 00 FOR READJMP 60

WRITE: ;ENTRY POINT FOR NRITEROUTINE

"VI A,lOH j(READWRITE)=10H FOR WRITE

Page 77: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2P~O" PRN PAGE 003

FB2F 3202FC GO: STA READWRITEF832 2AOIFC LHlD DENBYTE ; (L)=(DENBYTE)F835 3A03FC lDA CONTROLBYTEF838 2F C"AF839 EbFB ANI OFBH ;"ASK OUT BIT 2 (SD/-DD =0)F83B 85 ORA lFB3C 2F CttAFB3D 3200FE STA WRCONTFB40 CDBEFB CALl DISKREADVIFB43 3AOAFC lDA SECTORFB46 4F "DV C,A ; (C)=(SECTOR)F847 3A04FC lDA TRACKFB4A 47 "OV B,A j(B)=(TRACK)F84B AF IRA AF84C 3200FC STA ERRORBYTE ; (ERRORBYTE) = 0FB4F 7D MOV A,lFaso 87 DRA A ;TE5T FOR SINGLE DENSITYF85l CA70F9 JZ sn

DOUBLE DENSITY READ OR NRITE

READDD:

FB54 CD5FF9 BlOOP: CALL SYNe ;SYNC ON HEADER; FOUND HEADE.R

FB57 3bOA "VI ",OAH ;FIND DA ClOCK FOR ID "ARK, F859 lA lDAX D jSYNC MITH -EON

F85A 3A04FE lDA RD"RKCRCFa51f FEAl CPI· OAtH ;DATA FOR ID MARKFB5F C254FB JNZ BlOOP

;FOUND ID ADDRESS "ARK;

FBô2 lA LDAX D jBVTE AFTER ID "ARK SHOULD BE FEFBb3 FEFE CPI OFEHF8~5 C254FB JNZ SLOOP

;FOUND FE BYTE;

F8bB lA LDAX D ;TRACK BYTE FRO" DI5KFBb9 B8 Cl'tP B j(B)=(TRACK)FBâA C2f2F8 JNZ TERRORI ;TRACK ERROR

'FB6D tA lDAX D jSECTOR BYTE FROM DI5KFBbE 89 CIlfP C ; (Cl =(SECTOR)··F86F C~4F8 JNZ BlOOP ;NRQN6 SECTOR. TRY A6AIN

FB72 lA LDAX DFB73 F3 Dl ;DI5ABlE INTERRUPTS BEFDRE CHECKIN6 ID CRCF874 lA LDAX DF875 lA lDAX D jREAD 1 BYTE PAST ID CReF876 3AOOFE lDA RD5TATFB79 IF RAR ;CHECK ID CReFB7A lA lDAX DF87B DADDFB Je • ERROR ; ID CRe ERROR

FB7E lA LDAX DF87F 3AltFC LDA ABOVE~3

Page 78: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PRO" PRN PAGE 004

F882 47 "DV B,AF883 lA LDAX DFB84 70 MDV I1,B ; (WRCLK)=(ABOVE43)FBa5 lA LDAX D jNDN 5 BYTES INTO SAPFBBb 0609 "VI B,9FBBB lA 6LOOP: lDAX DFBS9 OS DeR BF8BA C288F8 JNZ 6LOOP

FaBD tA lDAX D ;NDW 15 BYTES INTO GAPFa8E 3A02FC LDA READWRITEF891 B7 DRA A ;CHECK FOR WRITEFB92 lA LDAX D ;16 BYTES INTO GAPF893 C203F9 JNZ WRITEDD

;;DDUBLE DENSITY READ

FB9b lA lDAX DF897 lA lDAX DFB98 3bFF "VI ",OFFHF89A lA lDAX DF89B lA lDAX DF89C lA lDAX D ;21 BYTES INTD SAPFB9D 13 INX D ; (D)=SYNCPORTF89E lA lDAX D ;SYNC ON FF CLOCK PATTERNFB9F lB Dex D ;tD)=RDDATAFBAO 360A KYI ",OAH j(WRClK)=OA

iClOCK PATTERN FOR DATA KARKF8A2 2AOBFC LHlD D"AFBAS lA lDAX D ;SYNC NITH -EONF8A6 3A04FE tDA RD"ij~CRC j6ET DATA PATTERN FOR DATA "ARKF8A9 FEAl ., CPI OAIHFeAB C2DDFB JNZ ERRDR · ;"ISSIN6 DATA "ARK

;;FOUND DAT.A MARK;START TRANSfERRIN6 DATA

F8AE lA RXFER: LDAX' DF8AF 77 "OV ",AFBDO 23 INX HF8B! 42 MDV B,DFBB2 lA lDAX DFBB3 77 MOV ",AF8B4 23 INX HFBB5 4B. MOV C,EFBBb OA LDAX BFaB7 77 . MDV. M,AFBBa 23 ~·lJjx HFBB9 1EEl "VI E,OEIHFBBB OA LDAX BFBBC 77 "DV ",A ;4 BYTES OF DATAFBBD 23 INX HFBBE OA lDAX B

F8BF 77 RLOOP: "OV ",AFaco OA lMX BFBe 1 1e INR E

Page 79: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PRO" PRN PASE 005

FBC2 23 INX HF8C3 77 "OV ",AFBC4 OA LDAX BFacs 23 INX HFacô 77 "DV ",AFaC7 OA LDAX BFace 23 INX HF8C9 77 KDV M,AF8CA 23 INX HF8CB OA LDAX BFace C2BFFB JNZ RLOOP ;HAVE TRAN5FERRED 128 BYTES

;AND HAVE READ 129TH BYTE

FBCf OA lDAX BFaDO OA lDAX B ;READ 1 BYTE PAST CReFBD! 3AOOFE LDA RD5TATF8D4 IF RAR jCHECK DATA CRefaD5 DADDFB Je ERROR ;DATA CRe ERROR

;jSUCCESSFUL SECTOR READ;

FaDB AF IRA A ;RETURN 00 IN ACCU"UlATORFBD9 3201FE STA WRClKF8De C9 RET

ERRDR:

jARRIVE HERE ON ANY Of FOLlOWING CONDITIONS30H TRACK ERRORSID CRe ERROR"ISSIN6 DATA MARKDA'TA CRe ERRDR

FaDD 3EEFFBDF B7F8EO 3201FEFSE3 C9

TERROR:

"VI A,OEFHDRA ASTA WRClKRET

;RETURN EFH IN Ace(UNSUCCESSFUl READ)

r;ARRIVE HERE ON TRACK ERROR IN SINGLE DENSITY

FBE4 CDFBFa CAlL ERRORCOUNT ; INCREMENT ERRORBYTEFBE7 C270F9 . JNZ AlODP ;TRY AGAIN IF lESS THAN 30H

•FBEA 3EEF NO "VI A,OEFH ;30H TRACK ERRDR5F8EC 97 ORA A ;RETURN EFH IN AceFBED 37 ste ; (UNSUCESSFUL DISK OPERATION)FBEE 3201FE STA WRClKFBFl C9 RET

TERRORI :

;ARRIVI HERE ON TRACK ERROR IN DOUBLE DENSITY .

FBF2 CDFBF8F8F5 C254FB

CALl ERRORCOUNTJNl BLODP

; INCREMENT ERRDRBYTE;TRY AG~IN IF LESS THAN 30H

Page 80: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PRO" PRN PAGE OOb

F8F8 C3EAFB J"P NO

F8FB 2100FC ERRORCOUNT LXI H,ERRORBYTEFBFE 34 INR " jINCRE"ENT ERRORBYTEFBFF lE "OV A,t1F900 FE30 CPI 30HF902 C9 RET

WRITEDD:

;DOUBlE DENSITY WRITEjARRIVE HERE 16 BYTES AFTER ID FIELD

F903 3E4E "VI A,4EHF90S 12 STAX D ;WRITE 4 BYTES OF 4EF906 12 STAI DF907 12 STAX DF908 12 STAI DF909 AF XRA AF90A 12 STAl D ;WRITE 6 BYTES OF 00F90B 12 STAX DF90C 2AOBFC lHlD D"AF90F 12 STAX DF910 12 STAl DF911 0104FE LXI B,WRI1RKCRC

, F914 12 STAl DF915 12 STAI DF916 3EAl "VI A,OAIHF918 02 STAI B ;NRITE DATA "ARK (Al)F919 OEEl "VI C,OEIH

jSTART MRITING DATA TO DISK FRO" "E"ORY

F91B 7E NXF.ER: MDV ' A,t1F91C 12 N.LOOP: STAX DFï1D ,23 INX Hr91E oc INR CF91F 7E "DV A,MF920 12 STAX DF921 23 INX HF922 JE "DY A,"F923 12 STAX D

'F924 23' INX HF925 7E "aV A,HF926 2~ INX HF927 12 STAX DF92B 7E "Oy A,t1F929 C21CF9 iNl WLOOP

jWHEN NE ARRIVE HERE NE'VE WRITTEN; 31t4=124 BYTES TD DI5K

F92C 12 STAX DF92D 23 INX HF92E 7E KOV A,"F92F 12 STAX DF930 23 INX H

Page 81: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FllE: C2PROt1 PRN PAGE 007

F931 7E MDV A,MF932 23 INX HF933 12 STAX DF934 7E MDV A,ttF935 12 STAX D ; 128TH BYTE TO DI5KF936 3EFF t1VI A,OFFHF938 3207FE STA WRCRC jWRITE 2 BYTES OF DATA CReF93B 3207FE STA WRCRCF93E 12 STAI D ;WRITE 3 BYTES OF FFF93F 12 STAX DF940 12 STAX DF941 AF IRA A ;RETURN 00 IN AceF942 3201FE STA WRCLK ; (SUCCESSFUL WRITE)F945 C9 RET

jSIN6LE DENSITY ROUTINESjENTRY POINT IS SD fBElOW)

WRITE5D: jARRIVE HERE 6 BYTES PAST ID FIELDF946 3EFF "VI A,OFFHF948 12 STAX D jNRITE 3 BYTES Ff (BYTES 7,8,9)F949 12 STAX DF94A 12 STAX DF94B AF IRA AF94C 12 STAX D ;NRITE 6 BYTES 00 (BYTES 10-15)F94D 12 STAX D_F94E 2AQBfC LHlD DMAF951 12 STAI DF952 12 'STAI DF953 12 STAI DF954 12 STAX D iBYTE 15 OF GAPF955 3EFB "VI A,OFBH ;WRITE DATA KARK FOR SIN6LE DENF957 3204FE STA WRttRKCRCF95A OEEl "VI C,OEIHF95C C31BF9 J"P WXFER' ;JU"P TD CO""ON WRITE ROUTINE

SYNC:

;ROUTINE TO SYNC ON HEADER

F95F 2101FE LXI H,WRCLKF.9b2 3bFF "YI H,OFFH

- F964 1107FE LXI D,SYNCPORTF967 tA CLOOP: lDAX D ;SYNC ON FF CLOCK IN HEADERF9bB Bl DRA A ;SHOULD HAVE 00 DATA

;FDUND SYMC PATTERNF969 00 NOPF9bA 00 -NOPF9bB lB Del D ; (D)=WRDATA=READDATAF96C ca RZF9bD C35FF9 Jt1P SYNC

jSINBLE DENSITV ENTRY POINT

SD:F970 CD5FF9 AlOOP: CALl SYNC

Page 82: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PROrl PRN PAGE 008

;FOUND HEADERF973 36C7 I1LOOP: "VI M,OC7H ;CLOCK PATTERN FOR ID MARKF975 3A04FE LLOOP: LDA RDrtRKCRCF978 B7 DRA AF979 CA75F9 JZ LLOOPF97C FEFE CPI OFEHF97E CABDF9 JZ NLOOPF9Bl 36FF HVI M,OFFHF983 3A07FE LDA SYNCPORTF98b B7 DRA AF9B7 CA73F9 JZ MLOOPF9BA C370F9 JMP ALOOP

NLOOP: ;FOUND DATA JltARKF98D lA lDAX D ;TRACK BYTE FROM DI5KF9BE Ba CMP BF9BF C2E4FB JNZ TERROR jTRACK ERRORF992 tA LDAX D iSIDE BYTE FROM DI5K (IGNORE)F993 lA lDAX D jSECTOR BYTE FROM DI5KF994 B9 Cl'tP CF995 C270F9 JNZ ALOOP ;WRONS SECTOR. TRY ·A6AlN

;FOUND CORRECT TRACK AND SECTORF998 F3 DI ;DI5ABlE IHTERRUPTS BEFORE CHECKIN6 ID CReF999 lA lDAX DF99A lA lDAX D ;CRC BYTEF99B lA lDAX D jCRC BYTEF99C tA LDAX D ;SAP BYTE. 1F99D 3AOOFE lDA RDSTAT jCHECK ID CReF9AO IF RARF9A·l lA [DAX D ;6AP BYTE 2F9~2 lA LDAX D ;6AP BYTE 3F9A3 DADDFB Je ERRDR jID CRe ERRDR

F9Ab lA LDAX D ;6AP ·BYTE 4F9A7 3AI1FC LDA ABOVE43F9AA 77 MOY ",AF9AB lA '~(DM D ;GAP '~BYTE 5F9AC 3A02'FC LD~, .. READWRITEF9AF D7 DRA A ;CHECK FOR WRITEF9BO lA LDAX D ;6AP BYTE ôF9Bl C.24bF9 . JHZ WRITESD

;SIN6lE DENSITY READ

F9B4 lA LDAX D ;READ 6 BYTES OF GAPF9B5 lA LDAX DF9Bb lA lDAX DF9B7 lA tDAX DF9BB tA lDAX DF9B9 lA tDAX DF9BA 36FF "VI ",OFFH ; (WRClK)=FFF9BC OtObFE LXI B,RDDATAF9BF lA LDAX D ;6AP BYTE 14F9CO 13 JNX D ; (D);:SYNCPORTF9Cl 1A LDAX DF9C2 36C7 "VI tt,OC7H ;CLOCK PATTERN FOR DATA "ARKF9C4 tE04 I1VI E,04 ; (D)=RDt1RKCRC

Page 83: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PROl1 PRN PAGE 009

F9Cb OA lDAX B ;6AP BYTE 16F9C7 lA lDAX D ;READ DATA ttARKF9CB E6Ft ANI OFeHF9CA FEFB CPI OFBH ;DATA PATTERN FOR DATA "ARKF9CC C2DDF8 JHZ ERRDR ;MISSIN6 DATA MARK

jfOUND SINGLE DENSITY DATA "ARK

F9CF lEEO MYI E,OEOH ;32*4=128 BYTE TRANSFERF9Dl OA lDAX BF9D2 2AOBFC LHLD D"AF9D5 C3BFF8 JI1P RLOOP jJU"P 10 "AIN READ ROUTINE

TEST:

;1E5T5 DENSITY OF DI5KETTE IN L066ED-IN DRIVE;RETURNS 00 IN Ace IF DOUBLE DENSITY;RETURNS OF IN ACC IF SIN6LE DENSITYjRETURNS GA IN Ace IF TEST FAllS

F9DB AF XRA AF9D9 3223FC STA TEST"AX j{TEST"AX)=OF9DC AF TE5Tl : XRA AF9DD 3200FC STA ERRORBYTE ;. (ERRORBYTE) =0F9EO CDC5FB CAll DISKREADY ;tOAD HEADF9E3 0100FE LXI B,NRCONTF9E6 3A03FC lDA CONTROLBYTEF9E9 Fbao DRI . BOH jSET CONTROllER FOR SIDE 0F9EB E6FB AN] OFBH jTRY DOUBLE DENSITYF9ED 02 STAI B

LOOP6: ;DOUBLE DENSITY TESTF9EE 210tFE LXI H,NRCLKF9Ft 36FF "VI t1,OFFHF9F3 1107FE LXI D,SYNCPORT ;SYNC ON FF ClOCK'IN HEADERF9F6 lA LOOP7: lDAX D iREAD DATA PATTERN·F9F7 2C INR l jABORT AFTER 256 TRIESF9FB CAIAFA JI _,..RETRYF9FB B7 ORA······: A ;DATA SHOULD BE 00F9FC C2FbF9" JNZ LOOP7

;fOUND HEADER'F9FF lB Del· D ; (D)=READDATAFAOO 2EOI "VI l,Ol ; (H)=WRCLKFA02 3bDA "VI M,OAHFA04 lA lDAX D ;SYNC NITH -EONFAOS 3A04FE' LDA RD"RKCRC ;LOOK FOR ID MARKFAoa FEAl '-C~l OAIHFAOA C21AFA JNZ RETR'y

iFOUND ID MARKFAOD lA LDAX D ;FE BYTEFAOE lA lDAX D ;TRACK BYTEFAOF lA LDAX D ;SECTOR BYTEFA19 lA lD.AX D ;cac BYTEFAtl tA lDAX D ;CRC BYTEFA12 lA lDAX D ;6AP BYTE 1FA13 OA lDAX B

Page 84: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PROM PRN PAGE 010

FA14 IF RAR ;CHECK ID CRCFAl5 DAIAFA Je RETRY

jlD CRe OKFAIB AF XRA A ;RETURN 00FA19 C9 RET

FAIA CDFBFB RETRY: CALl ERRORCOUNTFAID C2EEF9 JNZ LOOP6

;SIN6LE DENSITY TEST;ARRIVE HERE AFTER 30H TRIES AT DOUBLE DENSITY

FA20 AF SDTEST: XRA AFA21 3200FC STA ERRORBYTE ; (ERRORBYTE):r:OFA24 3A03FC lDA CONTROLBYTEFA27 F6B4 ORI 84H ;SET UP SIDE 0, SIN6LE DENSITYFA29 02 STAX B ;10 WRCONT

SDLOOPl:FA2A lE07 "VI E,07 ; (D)=SYNCPORTFA2C 2101FE LXI H,NRClKFA2F 36FF "VI ",OFFH ;SYNC ON FF ClOCK PATTERN

SDLOOP2:FA31 lA LDAX D ;6ET CORRESPONDJNS DATAFA32 2C INR L ;A8DRT AFTER 256 TRIESFA33 CA57FA JI RETRYlFA36 B7 DRA A ;DATA SHOULD BE 00FA37 C231FA. JNZ SDLDOP2

;FOÙND HEADERFA3A lB Dex D ; (D)=READDATAFA3B 2EOI "VI L,OI ; (H)=WRCLKFA3D 3bC7 "VI ",OC7H ;lOOK FOR C7 CLOCKFA3F lA LDAX D jSYNC WITH -EONFA40 3A04FE LDA RDHRKCRCFA43 FEFE CPI OFEH jDATA FOR ID "ARKFA45 C257FA JNZ RETRYl

;FOUND ID "ARKFA4B lA lDAX D ;TRACK BYTEFA49 tA lDAX D , SIDEFA4A lA LDAX D jSECTORFA4B lA lDAX DFA4C lA lDAX D ;CRC BYTEFA4D lA LDAX D ;CRCBYTE'FA4E lA lDAX DFA4F OA LDAX B ;6ET RD5TATFASO IF. RAR ;CHECK ID CReFASt DA57FA Je RETRVI

;ID CRe OKFA54 FôFF .....-ORI OFFH ;RETURN FFFA5b C9 RET

FA57 CDFBFB RETRYl: CALl ERRORCOUNTFA5A C22AFA JHZ SDlOOPl

.;FAJLED BOTll_ DOUBLE AND SINGLE DE-NSITY; TESTS 30H TIMES

FASD 2123FC LXI H,TEST"AX

Page 85: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PRO~ PRN PAGE 011

FA60 34 INR " ;INCRE"ENT TEST"AXFA61 7E "DV A,"FAb2 FEOA CPI 10FA64 C2DCF9 JNZ TESTI

jFAILED TEST 10 TI"ESFA67 B7 DRA A ;RETURN OAFAilS C9 RET

SKEW:;CO"PUTES PHYSICAl 5ECTOR FRO" LD6ICAL 5ECTOR;SKEW FACTOR IS B;INPUT AND OUTPUT ARE IN CRE6jOUTPUT=(((INPUT) "DD 52)*8 - 7) MOD 52;IF INPUT)52, SELECTS SIDE 1

FA69 210000 LXI H,OFAbC ES PUSH HFA6D 3A03FC lDA CONTROLBYTEFA70 E67F ANI 7FH ;SIDE 1FA72 SF "DY EfAFA73 19 MOY A,eFA74 D634 SUI 52FA76 47 MOY D,A ; (B)=(C)-52FA77 78 "DV A,E j(A)=(CONTROLBYTE)A7FFAJS F27EFA JP SKIPY

;lNPUT MAS lESS TNAN 52FA78 F6BO OR! SOH ;CHOOSE SIDE 0FA7D 41 "DV 8,eFA7E 320FFC SKIPY: STA TNOSIDEFABt 78 "DV A,B ;(B)=(INPUT) "OD 52FA82 68 "DY L,BFAB3 ct POP BFAB4 OC LOOPI0: INR CFAB5 D60D SUI 13FAS7 F2B4FA JP lOOPI0FABA 29 DAD HFABB 29 DAD HFAse 29 DAD HFABD 7e "av AtHFA8E B7 ORA AFABF 7D "DV A,lFA90 C4AOFA CNZ HI6HEFA93 FE34 LOOPl1: CPI 52FA95 D~DFA Je SKIP12FA98 Cbce ADI 204FA9A C393FA J"1> lOOPllFA9D 81 SKIPl~:-- 'A"DD CFA9E 4F "av C,AFA9F C9 RET -FAAO C630 HI6HE: ADI 48FAA2 C9 RET

,.FAA3 60 SETD"A: "OV H,BFAA~ 69 fIIOV l,CFAA5 220BFC SHLD Df1A ;STORE D"A ADDRESS

Page 86: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PRO" PRN PASE 012

FAAB C9 RET

FAA9 79 SETSEC: "DV A,eFAAA 320AFC STA 5ECTDR ;STORE SEcrOR HUMBERFAAD CCi RET

SETTRK: jSTEPS DRIVE TO TRACK (C)FAAE 79 "OV A,eFAAF FE2C CPI 44D jIF (C)(44FABI 3E10 "VI A,10H THEN (ABOVE43)=10HFAB3 DABBfA Je SKIP3FABb 3E50 "VI A,SOH ELSE (ABOVE43)=50HFABB 3211FC SKIP3: STA ABOYE43FABB CDC5FB CAlL DISKREADY

STEPlOOP:FABE 2104FC LXI H,TRACKfAC1 7E "OV A," ; 6ET (TRACK)FAC2 B9 C"P C ;DDNE?FAC3 CAEAFA JZ DOHESTEPFAt6 CDCCFA CAlL STEPHEAD ;ND, STEP HEADFAC9 C3BEFA JI1P STEPLODP jREPEAT'

STEPHEAD:FAce DADBFA Je STEPIN jIF (TRACK)«C) THEN STEP IN

STEPOUT :FACF 3A03FC lDA CONTROlBYTE<> ';EL5E STEP OUTFAD2 35 DCR 11 j(TRACK)=(TRACK)-lFAD3 F602 ORI 02" jDIR=OUTFADS C3DEFA J"P DOsrEP

FADa 3A03FC STEPIN: LDA CONTROL BYTEFADD 34 INR " ; (TRACK)=(TRACK)+lFADC EbFD ANI OF9H ;DIR=IN

FADE 12 DOSTEP: STAI D ;STORE DIRECTION IN WRCONTFADF 3D DCR A ;-STEP=OFAEO 12 STAX DFAEl 3C INR A ;-STEP=lFAE2 12 STAI DFAE3 3AI0FC lDA STEPTI"EFAEô 47 "av B,A ;WAIT B"5 FOR NEIT STEPFAE7 C31DFB JrfP DELAY ;DElAY EXECUTES ARETURN

DONESTEP:fAEA ObOF ~-ttVl B,STEPSETTLEFAEC CD7DFB CALl DELAY ;WAIT B"5 FOR STEP SETlLEFAEF 79 l'tOV A,CFAFO FE02 CPI 2 ;IF (TRACK>{2 THEM SET TESTNEXTFAF2 DAb9FB Je SElINFAFS 3AOEFC LDA TESTNEXTFAF8 87 DRA AFAF9 3EOO "VI A,OFAFB 320EFC STA TESTNEXTFAFE 37 STe

Page 87: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PRO" PRN P'A6E 013

FAFF C203FB JNZ 5ETDEN ;lF TESTNEXT~55 TEST DEHSITYFB02 C9 RET

SETnEN:

;1E515 DENSITYjUPDATES DENBYTE AND DENMAP

FB03 CDD8F9 CALL TEST ;TEST DENSITYFB06 3E04 "VI A,4 ;IF Z IS SET (DOUBLE DENSITY)FBOa CAODFB JZ SKIP ; THEN (DENBYTE)=4FBOB 3EOO MVI A,O ; ElSE (DENBYTE)=OFBOD 3201FC 5KIP: 5TA DENBYTEFBIO 2116FC LXI H,DENt1APFB13 F5 PUSH PSWFB14 3Aù5FC LDA PRESDISKFB17 4F MOV C,AFBIB 0600 KVI B,OFBIA 09 DAD BFBIB Ft POP PSW ;5AVE FlA6SFBte 77 "DY ",A ; (DEN"AP(PRESDISK»=lDENBYTE)FBID C9 RET

SELD5K;

jSElECTS DRIVE POINTED 10 DY CREG;lDADS.HEAD Of 5ELECTED DRIVE

FBIE 21F9FB LXI H,"ASKTABLEFD21 0600 "VI 8,0FB23 09 DAD B ;e CONTAIN5 DRIVE NU"BERFB24 7E "DV A," ;I1ASKTABLE CONTAINS 0 FOR

SElDSKl:FB25 3200FE STA NRCONT ; 5ELECTED DRIVE, 1'5 ELSEWHEREFB28 320FFC STA TWOSIDEFB2B 3203FC STA CONTROlBYTEFB2E 2112FC LXI -H ,.TRACKTABFB31 3A05FC lDA PRESDISKFB34 5F "av E,AFB35 50 "OV D,BFB3b 19 DAD DFB37 3A04FC LDA TRACKFB3A 77 "DV I1,A ; (TRACKTAB(PRESDISK))=(TRACK)FB3B 79 "OV A,CFB3C ~2Q5FC STA PRESDISK ; (PRESDISK)=(C)FB3F 320DFC STA DI5K ; (DlSK)=(C)FB42 2112FC LXI H,TRACKTABFB45 09 ,"DAD BFB46 7E "OV A,"FB47 3204FC STA TRACK j(TRACK}=tTRACKTAB(C))FB4A 210ôfC LXI H,L06INTABFB4D 09 DAD BFB4E 7E "OV A,HF~4F B7 aRA A ;HAS DRIVE BEEN LOGGED IN?FBSO C259FB JNI INOKFB53 3ES5 "VI A,55H ;ND. "ARK AS lD66ED INFBS5 77 MDV ",A

Page 88: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PRO" PRN . PAGE 014

FB5b CD97FB CALL HDt1E ; AND HOME THE HEADFB59 CDC5FB INDK: CALL DISKREADY ;LDAD HEADFB5C 0628 "VI B,HEADSETTLEFB5E CD7DFB CALL DELAY jNAIT FOR HEAD SETTlIN6FBôl 3A04FC LDA TRACKFBb4 FE02 CPI 02FB66 D203FB JNC SETDENFBb9 3E5S SETTN: "VI A,55H ;ON TRACKS 0 AND 1, NE WANTFBbB 320EFC SlA TESTNEXT ; TO TEST DENSITY OF NEXl TRACKFBbE C303FB Jt1P SETDEN ;TE51 DENSITY OF THIS TRACK

HEADLOAD:FB71 lA LDAX D ;~SSU"ES (D)=RDSTATFB72 E620 ANI 20H ;HEAD ALREADY LOADED?FB74 3A05FE lDA RD"ARK ;RESET HEAD lOAD COUNTERFB77 0628 "VI 8,HEADSETTLEFB79 C47DFB CNZ DELAY ;lF HEAD NASH'T LDADEDFB7C C9 RET

DELAY:

iDElAYS (D) "ILlI5ECOND5

FB7D ES PUSH H ;SAVE HlFB7E 3A03FC _ DElAY2: lDA CONIROlBYTEFBBI E604 ANI 4 ;IF SINGLE DENSITY,FB83 2EIF "VI l,31 ;31 BYTES' 32 USEe = 1 "5FBé5 C2BAFB 3HZ DELAY!FBBa 2E3f ""VI L,ô3 ;IN DD, 63 BYTES * lb USEe = 1 "SFBBA 3A06FE DELAY!: LDA RDDATAFB8D 2D DeR lFB8E C28AFB JNZ DELAY1FB91 05 DCR B jEND 1 pts LDOPFB92 C27EFB JHZ "DELAY2FB95 El POP H ;RESTORE HLFB96 C9 RET

~ ,FB97 CDC5FB HOME: CALl DISKREADYFB9A 2104FC LXI H,TRACK ;FDR STEPIN AND STEPOUTfB9D CDDBFA ATHOKE: CALl STEPIN jSTEP TONARD 76FBAO lA lDAX DFBAI Eb02 ANI 02 ; UNTIl -TRKO IS INACTIVEFBA3 tA9DFB JI ATHOI1EFBAô CDCfFA GOHO"E: CAll STEPOUT ;THEN STEP TONARD 00FBA9 lA lDAX D-

FBAA E602 .ANI 02 ; UNTIL -TRKO IS ACTIVEFBAC C2A6F.B JHZ 60HO"EFBAF 3EI0 "VI A,tOHFBBl 3211FC STA ABOVE43 ; (ABOVE43l=10HFBB4 320EFC STA TESTNEXT ; (TESTNEXT)=10HFBB7 AF XRA A

.FBBB.3204FC stA TRACK. ; (lRACK)=OOFBBB C303FB J"P SETDEN ;TEST DENSITY

Page 89: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PROtt PRN PA6E 015

DISKREADY1:FBBE 3AOOFE lDA RDSTATFBCI 47 "DV B,AFBC2 EbAO ANI OAOH ;IF DRIVE READY AND HEAD LDADEDFBC4 ca RZ THEN RETURN

DISKREADY:FBCS CS PUSH BFBCb 1100FE LXI D,WRCONT j(D)=NRCONT=RDSTATFBC9 CD71FB CALl HEADLOAD jlOAD HEADFBCC Ct POP BFBCD lA LDAX DFBCE 07 RLCFBCF DAC5FB Je DISKREADY ;lOOP UNTIl DRIVE READYFBD2 C9 RET

FB54 BLOOP

FBBA DELAY!FBDE DISKREADYIfCOO ERRORBYTEFBAb GOHOMEFB59 INDKF9EE lOOP6FBEA NOfEOO RDSTATFAS7 RETRYlF970 SDFBIE 5ElDSKFB69 SEITHFBOD SKIP

- FABE --STEPlOOPfE07 SYNCPORTFCOE IESTHEXTFCOF TW051DE

FBF9 BFDFEFF7 "A5KTABlE DB -OBFH,ODfH,OEFH,OF7HFel! ABOVE43 F910 AlOOP FB9D ATHO"E Faoo BASEfCOO BUFF FBDA CBUFF F967 ClOOP FBD3 COLDBOOTFe03 CONTROlBYTE FC22 CURRDRIVE FB7D DELAYFB7E DElAY2 FCOI DENBYTE fC16 DEN"AP FCOD DI5KFBCS DISKREADY FCOB DKA FAEA DONESTEP FADE DOSTEPFaDD ERRDR F8FB ERRORCOUNT FaBa 6LOOP FB2F GOFB71 HEODLDAD 0028 HEADSETTlE FAAO HI6HE FB97 HO"EF975 LlOOP fCOô L061NTAB FA84 lOOPI0 FA93 LOOP!1F9Fb LOOP7 FFF9 "A5KTABLE F973 "lOOP F9BD NLOOPFCOS PRESDISK FEOo,6DDATA FEOS RD"ARK FE04 RD"RKCRtFE02 RDUART FB29'READ FB54 READDD FC02 READWRITEFC21 RETRYCOUNT FAtA RETRY FBBF RLOOP FBAE RXFERFA2A SDLOOPI FA31 SDLOOP2 FA20 SDTEST fCOA SECTORFB25 SELDSKI FB03 SETDEN FAA3 SETD"A FAA9 SET5ECFAAE SETTRK FAb9 SKEW FA9D SKIP12 FABB SKIP3FAJE SKIPY~, FC4~$lACK--" FAce STEPHEAD FAna STEPI~FACf 5TEPOUT OOOF STEPSETTLE fCI0 STEPTI"E F95F SYNCF8F2 TERRDRI FBE4 TERRDR F9DC TE5T1 FC23 TESTMAXF9D8 TEST FC04 TRACK fC12 TRACKTAB FC20 TRYl

Page 90: amaus.org BIOS.pdf · FILE: BIOS22!8 PRN PAGE 003 0000 :: FFFF :: DPIO USERLST EQU EQU FALSE TRUE;DELTA PRODUCT5 CPU BOARD AS L5T:;SET FLAG TO INSERT USER DEFINED LST:;THIS CODE MUST

FILE: C2PRO" PRN

F91C WLOOP FEOI WRCLKF82D WRITE F903 NRITEDDFE04 NRMRKCRC FEOS NRHRK

PAGE 016

FEOO NRCONT FE07 NRCRCFalE WRITEPROTECTFE02 NRUART F91B WXFER

FEOb WRDATA. F946 NRITE5D