DataMuseum.dk

Presents historical artifacts from the history of:

RegneCentralen RC700 "Piccolo"

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RegneCentralen RC700 "Piccolo"

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦4714ffe37⟧ TextFile

    Length: 11392 (0x2c80)
    Types: TextFile
    Names: »BIOS703.MAC«

Derivation

└─⟦72577d508⟧ Bits:30003297 Diverse BIOS typer til RC703
    └─ ⟦this⟧ »BIOS703.MAC« 

TextFile

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