|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 11392 (0x2c80)
Types: TextFile
Names: »BIOS703.MAC«
└─⟦72577d508⟧ Bits:30003297 Diverse BIOS typer til RC703
└─⟦this⟧ »BIOS703.MAC«
; RC COMPUTER 23.04.82 25.06.82 15.09.82
; 23.10.82 05.01.83 13.03.83
; 03.10.83
; SUBJECT: RC700 CP/M BASIS SOFTWARE
;
; AUTHOR: KARSTEN DINDORP & HUGO K. HOLM
;
; HARD DISK CORRECTIONS: SC & VN JUNE 82
;
; RC703 CORRECTION: FK & LO MARCH 83
;
; Errors in hard disk unit C, disk
; parameter block (mini) corrected,
; RC763-RC763B support: LO SEPTEMBER 83
;
; Denne udgave er ændret så der ikke kan
; tilsluttes harddisk, men istedet to
; YD-380 floppydrives (drive C og D) TFj marts 87
;
;
; This program consists of:
;
; 1. Hardware initialization routines
;
; 2. CP/M BIOS
;
; and constitutes the basis software for the CP/M operating system
; on the RC700 micro computer.
;
; The program resides on cylinder 0 of a RC700 CP/M system discette,
; and is loaded into RAM from address 0000 and forward, when the ROM
; bootstrap loader is activated by a hardware reset.
;
; UPGRADES: 1: Support of 16 bit sector number.
; 2: Support of upto 4 Winchester drives.
; 3: Support all tracks on floppy disks.
; 4: Alternative register set not used.
; 5: Alternative hard disk configuration.
; 6: Warm boot from hard disk drive C
; 7: Extended unit C
; 8: Support of 96 tpi 5.25" floppys
; 9: Support of colours
; 10: Support of RC763B hard disk (rodime 202)
;
; The format of TRACK 0 is as follows:
;
; SECTOR BYTE CONTENTS
;
; 01 000-001 Start address. Entered from ROM bootstrap loader.
; 01 002-007 0
; 01 008-013 'RC703 '
; 01 014-127 not used. Reserved for ROM bootstrap loader.
; 02 000-127 configuration parameters.
; 03 000-127 output conversion table.
; 04-05 000-127 input conversion table.
; 06- and forward Hardware initialization routines and CPM BIOS.
;
.Z80
TITLE RC703 CP/M BASIS SOFTWARE RELEASE 1.1 83.09.14
SUBTTL GLOBAL CONSTANT DEFINITION
PAGE
;========================================================
;= I/O ADDRESSES =
;========================================================
PIOAC EQU 12H ; PIO CHANNEL A CONTROL
PIOAD EQU 10H ; PIO CHANNEL A DATA
PIOBC EQU 13H ; PIO CHANNEL B CONTROL
PIOBD EQU 11H ; PIO CHANNEL B DATA
CTCCH0 EQU 0CH ; CTC CHANNEL 0
CTCCH1 EQU 0DH ; CTC CHANNEL 1
CTCCH2 EQU 0EH ; CTC CHANNEL 2
CTCCH3 EQU 0FH ; CTC CHANNEL 3
SIOAC EQU 0AH ; SIO CHANNEL A CONTROL
SIOAD EQU 08H ; SIO CHANNEL A DATA
SIOBC EQU 0BH ; SIO CHANNEL B CONTROL
SIOBD EQU 09H ; SIO CHANNEL B DATA
CTC2C0 EQU 44H ; CTC 2 CHANNEL 0
CTC2C1 EQU 45H ; CTC 2 CHANNEL 1
CTC2C2 EQU 46H ; CTC 2 CHANNEL 2
CTC2C3 EQU 47H ; CTC 2 CHANNEL 3
HDDARG EQU 60H ; WD1000 DATA REGISTER
HDERRG EQU 61H ; WD1000 ERROR REGISTER (READ ONLY)
HWPCMP EQU HDERRG ; WD1000 WRITE PRECOMP. REGISTER (WRITE ONLY)
HSECCT EQU 62H ; WD1000 SECTOR COUNT
HSECNO EQU 63H ; WD1000 SECTOR NUMBER
HCYLLO EQU 64H ; WD1000 CYLINDER NO. LOW
HCYLHI EQU 65H ; WD1000 CYLINDER NO. HIGH
HSZDHD EQU 66H ; WD1000 SIZE/DRIVE/HEAD REGISTER
HDSTRG EQU 67H ; WD1000 STATUS REGISTER (READ ONLY)
HCMDRG EQU HDSTRG ; WD1000 COMMAND REGISTER (WRITE ONLY)
PAGE
DMAC EQU 0F8H ; DMA CONTROL
DMAMOD EQU 0FBH ; DMA MODE REGISTER
DMAMAS EQU 0FAH ; DMA MASK REGISTER
DMAAD0 EQU 0F0H ; ADDRESS REGISTERS
DMAAD1 EQU 0F2H ;
DMAAD2 EQU 0F4H ;
DMAAD3 EQU 0F6H ;
DMACN0 EQU 0F1H ; WORD COUNT REGISTERS
DMACN1 EQU 0F3H ;
DMACN2 EQU 0F5H ;
DMACN3 EQU 0F7H ;
DMACBC EQU 0FCH ; CLEAR BYTE COUNTER
DMAREQ EQU 0F9H ;
DMAMSK EQU 0FFH ;
DMATMP EQU 0FDH ;
DSPLC EQU 001H ; DISPLAY CONTROL
DSPLD EQU 000H ; DISPLAY DATA
FDC EQU 004H ; FLOPPY CONTROL
FDD EQU 005H ; FLOPPY DATA
BELL EQU 01CH ;
SW1 EQU 014H ;
PAGE
;========================================================
;= RAM LAYOUT DEFINITION =
;========================================================
MSIZE EQU 56 ; AVAILABLE MEMORY EXCL. BIOS
BIAS EQU (MSIZE-20)*1024 ;
CPMB EQU 3400H+BIAS ; CCP BASE
CCPCLR EQU CPMB+03H ; CCP-START ADDRESS +3
CPML EQU 1600H ; LENGTH OF CCP AND BDOS
BDOS EQU CPMB+806H ; BDOS BASE
BIOS EQU CPMB+CPML ; BIOS BASE
BUFF EQU 80H ; DMA BUFFER
IOBYTE EQU 3 ;
CDISK EQU 4 ; CURRENT LOGGED IN DISK
NSECTS EQU CPML/128 ; LENGTH OF CCP AND BDOS IN 128 BYTES SECTORS
CBOOT EQU 280H ; ROM BOOTSTRAP LOADER ENTRY POINT
PATCH1 EQU CPMB+144CH ; FIRST PATCH ADDRESS TO WBOOT FROM HD
PATCH2 EQU CPMB+149AH ; SECOND DO.
START EQU 0D480H ; START OF CODE (INIT + BIOS)
BGSTAR EQU 0F500H ; START OF BACKGROUND BITTABLE
;ENDPRG EQU 0EE80H ; RESERVED AREA FOR BIOS VARIABLES
ENDPRG EQU 0ED80H ; TFj
ISTACK EQU BGSTAR+250+38 ; STACK USED BY INTERRUPT ROUTINES
STACK EQU ISTACK+96 ; STACK USED BY BIOS DRIVERS
OUTCON EQU 0F680H ; OUTPUT CONVERSION TABLE
INCONV EQU OUTCON+128 ; INPUT CONVERSION TABLE
DSPSTR EQU 0F800H ; DISPLAY REFRESH MEMORY BASE
CCTAD EQU DSPSTR+2001 ; COLUMN COUNT
RCTAD EQU CCTAD+1 ; ROW COUNT
CURSY EQU RCTAD+2 ; CURSUR Y POSITION
LOCBUF EQU CURSY+1 ; DISPLAY BUFFER LOCATION
XFLG EQU LOCBUF+2 ; XY ADDRESSING MODE FLAG
LOCAD EQU XFLG+1 ; LOCATION OF CHAR
USHER EQU LOCAD+2 ; OUTPUT CHARACTER POSITION
BGFLG EQU USHER+1 ; BACKGROUND FLAG:
; 0 - AFTER CLEAR SCREEN
; 1 - AFTER SET FOREGROUND
; 2 - AFTER SET BACKGROUND
LOCBBU EQU BGFLG+1 ;
ADR0 EQU LOCBBU+2 ; FIRST BYTE OF ADDRESS IN XY ADDRESSING
EXCNT0 EQU ADR0+1 ; EXIT ROUTINE 0 COUNT
EXCNT1 EQU EXCNT0+2 ; EXIT ROUTINE 1 COUNT
DELCNT EQU EXCNT1+2 ; DELAY COUNT
EXROUT EQU DELCNT+2 ; JMP TO EXIT ROUTINE 1
FDTIMO EQU EXROUT+2 ; LOAD VALUE OF EXCNT1
RTC0 EQU 0FFFCH ; REAL TIME CLOCK
RTC1 EQU 0FFFDH ;
RTC2 EQU 0FFFEH ;
RTC3 EQU 0FFFFH ;
PAGE
;========================================================
;= FLOPPY DRIVER VARIABLES =
;========================================================
;
HSTBUF EQU ENDPRG+1 ; HOST DISK DMA BUFFER
;DIRBF EQU HSTBUF+512 ; SCRATCH DIRECTORY AREA
DIRBF EQU HSTBUF+1024 ; TFj
ALL0 EQU DIRBF+128 ; ALLOCATION VECTOR DRIVE 0
CHK0 EQU ALL0+71 ; CHECK VECTOR DRIVE 0
ALL1 EQU CHK0+64 ; ALLOCATION VECTOR DRIVE 1
CHK1 EQU ALL1+71 ; CHECK VECTOR DRIVE 1
ALVHD EQU CHK1+64 ; ALLOCATION VECTOR FOR 5 LOG.HARD DSK UNITS
ALL2 EQU ALVHD ; TFj
CHK2 EQU ALL2+76 ; TFj
ALL3 EQU CHK2+128 ; TFj
CHK3 EQU ALL3+76 ; TFj
SEKDSK EQU CHK3+128 ; TFj
;SEKDSK EQU ALVHD+71+(4*70) ; SEEK DISK NUMBER
SEKTRK EQU SEKDSK+1 ; SEEK TRACK NUMBER
SEKSEC EQU SEKTRK+2 ; SEEK SECTOR NUMBER
HSTDSK EQU SEKSEC+2 ; HOST DISK NUMBER
HSTTRK EQU HSTDSK+1 ; HOST TRACK NUMBER
HSTSEC EQU HSTTRK+2 ; HOST SECTOR NUMBER
LSTDSK EQU HSTSEC+2 ; LAST DISK SEEKED
LSTTRK EQU LSTDSK+1 ; LAST TRACK SEEKED
SEKHST EQU LSTTRK+2 ; SEEK SHR SECSHF
HSTACT EQU SEKHST+2 ; HOST ACTIVE FLAG
HSTWRT EQU HSTACT+1 ; HOST WRITTEN FLAG
UNACNT EQU HSTWRT+1 ; UNALLOCATED REC COUNT
UNADSK EQU UNACNT+1 ; LAST UNALLOCATED DISK
UNATRK EQU UNADSK+1 ; LAST UNALLOCATED TRACK
UNASEC EQU UNATRK+2 ; LAST UNALLOCATED SECTOR
UNAMSK EQU UNASEC+2 ; LAST UNALLOCATED SECTOR MASKED
ERFLAG EQU UNAMSK+1 ; ERROR FLAG
RSFLAG EQU ERFLAG+1 ; READ SECTOR FLAG
READOP EQU RSFLAG+1 ; 1 IF READ OPERATION
WRTYPE EQU READOP+1 ; WRITE OPERATION TYPE
DMAADR EQU WRTYPE+1 ; LAST DMA ADDRESS
FORM EQU DMAADR+2 ; POINTER TO FORMAT BLOCK
CFORM EQU FORM+2 ; CURRENT FORMAT
EOTV EQU CFORM+1 ; LAST SECTOR ON TRACK
DRNO EQU EOTV+1 ; HIGHEST DRIVE NO
DSKNO EQU DRNO+1 ; CURRENT DISK
DSKAD EQU DSKNO+1 ; CURRENT DMA ADDRESS
ACTRA EQU DSKAD+2 ; ACTUAL (NOT CPM) TRACK NO IN READ/WRITE
ACSEC EQU ACTRA+1 ; ACTUAL (NOT CPM) SECTOR NO IN READ/WRITE
REPET EQU ACSEC+1 ; REPEAT COUNTER IN READ/WRITE
RSTAB EQU REPET+1 ; RESULT TABLE
MHDTSR EQU RSTAB+8 ; MIRROW OF WD1000 STATUS REGISTER
MHDERR EQU MHDTSR+1 ; MIRROW OF WD1000 ERROR REGISTER
HERRCT EQU MHDERR+1 ; WD1000 ERROR COUNTER
SP_SAV EQU HERRCT+2 ; SYSTEM STACK POINTER SAVE AREA
HD_FLG EQU SP_SAV+2 ; WD1000 BUSY FLAG (0=BUSY)
HD_OFL EQU HD_FLG+1 ; OFFLINE/ONLINE FLAG (1=OFFLINE)
FL_FLG EQU HD_OFL+1 ; FLOPPY BUSY FLAG (0=BUSY)
WBFLAG EQU FL_FLG+1 ; WARMBOOT FLAG
R202_FL EQU WBFLAG+1 ; RC763B/Rodime 202 flag
PAGE
;========================================================
;= ACTUAL FLOPPY SYSTEM PARAMETERS =
;= INITIALIZED WHEN SELECT_DISK IS CALLED =
;========================================================
DPBLCK EQU R202_FLG+1 ; DISK PARAM BLOCK
CPMRBP EQU DPBLCK+2 ; CP/M RECORDS PR. BLOCK
CPMSPT EQU CPMRBP+1 ; CP/M SECTORS PR. TRACK
SECMSK EQU CPMSPT+2 ; SECTOR MASK
SECSHF EQU SECMSK+1 ; SECTOR SHIFT COUNT
TRANTB EQU SECSHF+1 ; SECTOR TRANSLATION TABLE
DTLV EQU TRANTB+2 ; DATA LENGTH
DSKTYP EQU DTLV+1 ; DISK TYPE (0:=FLP, FF:=HARD)
DUM EQU DSKTYP+6 ; FILLER TO OBTAIN 16 BYTE LENGTH
;==============================================================================
;= WD1000 MACRO COMMAND DEFINITIONS =
;==============================================================================
;
RSTCMD EQU 10H ; RESTOTE COMMAND
RDCMD EQU 28H ; READ SECTOR WITH DMA COMMAND
WRTCMD EQU 30H ; WRITE SECTOR COMMAND
FMTCMD EQU 50H ; FORMAT TRACK COMMAND
SEEKCM EQU 70H ; SEEK COMMAND
PAGE
INCLUDE BIOSTYPE.MAC
INCLUDE INIPARMS.MAC
INCLUDE DANISHOF.MAC
INCLUDE INIT.MAC
INCLUDE CPMBOOT.MAC
INCLUDE SIO.MAC
INCLUDE QDISPLAY.MAC
INCLUDE FLOPPY.MAC
INCLUDE HARDDSK.MAC
INCLUDE QDISKTAB.MAC
INCLUDE INTTAB.MAC
INCLUDE PIO.MAC
.DEPHASE
IF2
ifdef mini
.printx - MINI -
else
.printx - MAXI -
endif
.PRINTX FINISH
ENDIF
END
«eof»