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