ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt


SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA


ZPS | Technické prostředky | Programové vybavení | Dokumentace


8 bity / SAPI-1 / Programové vybavení / V5.0 / ASM EBIOS


Výpis programu EBIOS


PAGE 66
;*******************************************************
;*                                                     *
;*      E P R O M    B I O S    p r o    Z P S  2      *
;*                                                     *
;*******************************************************
;
;       create and modify Jiri Hlavac
;                 30.3.1988
;
;Kod celeho modulu BIOS je ulozen v EPROM. Aktivuje
;se bud pres rozskokovou tabulku ulozenou v oblasti
;vyhrazene dle konvenci CPM za modulem BDOS nebo
;pres rozskokovou tabulku v EPROM (od adresy 1300H)
;Pro realizaci nekterych funkci je pouzito sluzeb
;MONITORU verze 5 pro ZPS2.

.z80
;******************************************************
        ; kontrolni hodnoty:
lastEB  EQU     $next - 1       ;posledni adresa v EPROM
longEB  EQU     $next - ebiosb  ;delka EBIOSU
lastvar EQU     $nextv - 1      ;posledni adresa promennych
                                ;(max 41FFH)
;******************************************************

epromb  EQU     1300H           ;adresa zacatku EPROM
varb    EQU     41D0H           ;adresa promennych BIOSu
buff    EQU     4280H           ;implicitni buffer
ramb    EQU     4300H           ;zacatek pouzitelne RAM
TPA     EQU     4400H           ;zacatek uzivatelske oblasti

ebiosb  EQU     epromb          ;adresa zacatku BIOS v EPROM
bdosb   EQU     0F000H          ;pocatecni adresa zavadeni systemu
biosb   EQU     bdosb + 0E00H   ;pocatecni adresa BIOSu
ebios   EQU     ebiosb          ;vstupni bod EPROM BIOS
bdos    EQU     5               ;vstupni bod sluzeb BD0S
mon     EQU     100H            ;tab. sluzeb MONITORU ZPS2
dphtab  EQU     biosb + 33H     ;diskova tabulka BIOSu
sysdisk EQU     0               ;cislo systemoveho disku
;******************************************************
cr      EQU     13
lf      EQU     10

        ASEG
        ORG     epromb

        ;rozskokova tabulka sluzeb EBIOS:
        JP      init            ;inicializace
        JP      wboot           ;wboot
        JP      const           ;status konzoly
        JP      conin           ;vstup z konzoly
        JP      conout          ;vystup na konzolu
        JP      list            ;tiskarna
        JP      punch           ;derovac
        JP      reader          ;smamc
        jp      home            ;stopa 0
        jp      seldsk          ;vyber disk
        jp      settrk          ;vyber stopu
        jp      setsec          ;vyber sektor
        jp      setdma          ;nastav adresu DMA
        jp      read            ;cti sektor
        jp      write           ;zapis sektor
        jp      listst          ;status tiskarny
        jp      sectran         ;transforamce sektoru

;***********************************************
;pouziti rutin MONITORU pro nediskove sluzby

const   EQU     mon + 12H       ;console status
conin   EQU     mon + 3         ;console input
conout  EQU     mon + 9         ;console output
list    EQU     mon + 0FH       ;listing
punch   EQU     mon + 0CH       ;derovac
reader  EQU     mon + 6         ;sniaac
retmon  EQU     mon + 39H       ;navrat do aonitoru
;*****************************************
init:                   ;inicializace celeho diskoveho
                        ;systemu, vraci se do volajiciho
                        ;programu (normalni return)
        CALL    initrpd         ;inicializace radice
        CALL    loaddos         ;zavedeni systemu
        CALL    setsyspa        ;nastaveni syst. parametru
        LD      HL,signon       ;a vypis uvodniho hlaseni

pmsg:                   ;vypis hlaseni od adresy
        LD      A,(HL) ;v CHL3 do konc.bytu 88H
        INC     HL
        OR      A
        RET     Z
        LD      C,A
        CALL    conout
        JP      pmsg
;****************************************
signon:
        DEFB    CR,LF,'ZAVEDEN DISKOVY SYSTEM'
        DEFB    CR,LF,'VOLNA RAM OD ADRESY 4400H DO EFFFH'
        DEFB    CR,LF,0
;****************************************
wboot:                  ;provadi reinicializaci diskoveho
                        ;systemu, po skonceni se vraci
                        ;do MONITORU (vzdy)
        LD      SP,4040H        ;nastaveni zosobniku
        CALL    loaddos         ;zavedeni systemu
        CALL    setsyspa        ;nastaveni syst. paraaetru
        JP      retmon          ;predani rizeni MONITORu
;***************************************
loaddos:
        LD C,sysdisk            ;nastaveni cisls disku CALL seldsk
        CALL    seldsk
        JP      NZ,loaderr
        CALL    home            ;nastaveni stopy 0
        JP      NZ,loaderr
        LD      HL,bdosb        ;pocatecni adresa
        LD      B,9             ;pocet sektoru
        LD      C,18            ;pocatecni sektor
        CALL    rdloop          ;precteni stopy 0
        LD      C,1             ;nastaveni stopy 1
        CALL    settrk
        JP      NZ,loaderr
        LD      HL,bdosb + 480H
        LD      B,20
        LD      C,1
        CALL    rdloop          ;precteni stopy 1
        LD      DE,synseq       ;verifikace synchrosekvence
        LD      HL,bdosb        ;na zacatku BDOSu
        LD      B,6
verif:  LD      A,(DE)
        CP      (HL)
        JP      NZ,badsys
        INC     HL
        INC     DE
        DEC     B
        JP      NZ,verif
        RET

synseq: DEFB    'ZPS-2 '        ;synchrosekvence
;*****************************************************
rdloop:         ; ctini bloku sektoru
                ; [HL] := pocatecni adresa
                ; [C] := prvni sektor
                ; [B] := pocet sektoru
        LD      A,C
        ADD     A,B
        LD      B,A             ;zarazka:=max.sektor + 1
        LD      D,3             ;pocet pruchodu
rd1:    PUSH    DE
        PUSH    BC
        PUSH    HL
rd2:    PUSH    HL
        PUSH    BC
        CALL    .read           ;precteni sektoru
        JP      NZ,loaderr
        POP     BC
        POP     HL
        LD      DE,180H         ;zvyseni ukazatele adres
        ADD     HL,DE           ;v [HL] o 3 * 80H
        LD      A,3
        ADD     A,C             ;zvyseni cisla sektoru
        LD      C,A             ;v [C] o 3
        CP      B
        JP      C,rd2           ;test konce pruchodu
        POP     HL
        POP     BC
        LD      DE,80H          ;priprava dalsiho pruchodu
        ADD     HL,DE
        INC     C
        POP     DE
        DEC     D               ;snizsni pocitadla
        JP      NZ,rd1          ;skok na dalsi pruchod
        RET
;****************************************
setsyspa:
        LD      C,8             ;nastaveni RAMTOP dle
        LD      DE,bdosb - 1    ;konvenci HONITORu
        CALL    mon + 1EH
        LD      C,32            ;nastaveni uzivatele 0
        LD      E,0
        CALL    bdos
        LD      C,13            ;inicializace diskoveho systemu
        JP      bdos            ;a return
;****************************************
loaderr:
        LD      HL,errmsg
        JP      wrmsg
badsys:
        LD      HL,badmsg
wrmsg:  CALL    pmsg
        JP      retmon

badmsg: DEFB    cr,lf,'SPATNA SYSTEMOVA DISKETA'
errmsg: DEFB    CR,LF,'NELZE ZAVEST DISKOVY SYSTEM'
        DEFB    CR,LF,0

;****************************************
;.XLIST
.8080
;***************************************
listst:
        XRA     A
        RET

;***************************************
setsec:
        MOV     A,C
        STA     SECTOR
        RET

;****************************************
sectran:
        XCHG
        DAD     B
        MOV     L,M
        MVI     H,0
        RET

;****************************************
setdma:
        MOV     H,B
        MOV     L,C
        SHLD    POINTR
        RET

;****************************************
seldsk:
        LXI     H,0
        MOV     A,C
        CPI     2
        RNC
        MOV     L,A
        DAD     H
        DAD     H
        DAD     H
        DAD     H
        LXI     D,DPHTAB
        DAD     D
        PUSH    H
        call    .select
        POP     H
        RZ
        LXI     H,0
        RET

;****************************************
home:
        jmp     .home

;****************************************
settrk:
        lxi     h,50
dly:    dcx     h
        mov     a,l
        ora     h
        jnz     dly
        jmp     .seek

;****************************************
read:
        LHLD    POINTR
        LDA     SECTOR
        MOV     C,A
        jmp     .read

;****************************************
write:
        LHLD    POINTR
        LDA     SECTOR
        MOV     C,A
        jmp     .write

;********************************************************
;*                                                      *
;*  Ovladac floppy B" SS/SD pres radic RPD-1A+RPD-1B    *
;*                                                      *
;********************************************************

;**************************************
;       DEFINICE
;**************************************

CSRA    EQU     25H
RAM     EQU     8
RDM     EQU     4
WE      EQU     2
RE      EQU     1

CSRB    EQU     3CH
HLR     EQU     128
STR     EQU     64
T00     EQU     32
RDY     EQU     4
WF      EQU     2
T43     EQU     8
UP      EQU     4
DOWN    EQU     0
FR      EQU     2

CNT0    EQU     20H
CNT1    EQU     21H
CNT2    EQU     22H
CNT0M   EQU     0CH
CNT1M   EQU     5EH
CNT2M   EQU     0DH
MD53    EQU     23H

STEPR   EQU     3EH
HLOADR  EQU     3DH
RDATA   EQU     24H
WDATA   EQU     24H

INITF   EQU     2
NT43    EQU     43
RETRY   EQU     5
AMMRK   EQU     0FEH
DAMMRK  EQU     0FBH

;**************************************
;       CHARAKTERISTIKY JEDNOTKY
;**************************************
TRKS    EQU     77
SECTRS  EQU     26
SECLEN  EQU     128
NDISKS  EQU     2

;**************************************
;       KONSTATNTY 8253
;**************************************
TDAM    EQU     0C4FCH
AML1    EQU     60H
TAML    EQU     0D2H
TAMH    EQU     0B8H
AML     EQU     7
DLENL   EQU     41H
DLENH   EQU     0
DLWL    EQU     11H
DLWH    EQU     0
TAW     EQU     20FCH
SLID    EQU     0

;**************************************
initrpd:
        XRA     A
        OUT     CSRA
        OUT     CSRB
        MVI     A,CNT0M
        OUT     MD53
        MVI     A,CNT1M
        OUT     MD53
        MVI     A,CNT2M
        OUT     MD53
        MVI     C,0
        CALL    .SELECT

;**************************************
.HOME:
        CALL    SELACT
        CALL    CTRK
        MVI     M,0
        LXI     B,UP SHL 8+INITF
        CALL    STEP
        MVI     E,TRKS+INITF+1
HOME05:
        IN      CSRB
        ANI     T00
        JNZ     FNOK
        DCR     E
        JZ      HOME10
        LXI     B,DOWN SHL 8+1
        CALL    STEP
        JMP     HOME05
HOME10:
        CMA
HOME15:
        ORA     A
        RET

;**************************************
.SELECT:
        MOV     A,C
        CPI     NDISKS
        JNC     HOME15
        STA     DRVBAK
        XRA     A
        RET
SELACT:
        LDA     DRVBAK
        MOV     C,A
        LDA     DRVNO
        CMP     C
        JZ      SAME
        MVI     A,150
        STA     CON
        MOV     A,C
SAME:
        STA     DRVNO
        OUT     CSRB
FNOK:
        XRA     A
        RET

;**************************************
.SEEK:
        PUSH    B
        CALL    SELACT
        POP     B
        MOV     A,C
        CPI     TRKS
        JNC     HOME10
        CALL    CTRK
        SUB     C
        RZ
        MOV     M,C
        MVI     B,DOWN
        JP      SEEK05
        MVI     B,UP
        CMA
        INR     A
SEEK05:
        MOV     C,A
        JMP     STEP

;**************************************
.READ:
        PUSH    H
        PUSH    B
        CALL    SELACT
        POP     B
        POP     H
        MOV     A,C
        PUSH    H
        CALL    PREPAM
        POP     H
        CALL    STORE
        DCX     H
        MVI     C,RETRY
        XCHG
READ03:
        PUSH    B
        PUSH    D
READ05:
        LXI     H,TDAM
        CALL    RDAM
        JNC     READ15
READ07:
        POP     D
        POP     B
        CPI     1
        JZ      READ20
READ10:
        DCR     C
        MVI     A,2
        JZ      READ20
        JMP     READ03
READ15:
        POP     D
        PUSH    D
        CALL    RDDAM
        JC      READ07
        POP     H
        PUSH    H
        MVI     B,SECLEN+3
        CALL    CRC
        MOV     A,E
        ORA     D
        POP     D
        POP     B
        JNZ     READ10
READ20:
        ORA     A
        JMP     RECALL

;**************************************
.WRITE:
        PUSH    H
        PUSH    B
        CALL    SELACT
        POP     B
        POP     H
        MOV     A,C
        PUSH    H
        CALL    PREPAM
        CALL    CTRK
        CPI     NT43
        LDA     DRVNO
        JC      WRIT02
        ORI     T43
WRIT02:
        ORI     FR
        OUT     CSRB
        ANI     FR XOR 0FFH
        OUT     CSRB
        OUT     HLOADR
        POP     H
        CALL    STORE
        PUSH    H
        DCX     H
        MVI     B,SECLEN+1
        CALL    CRC
        MOV     M,D
        INX     H
        MOV     M,E
        POP     H
        LXI     D,-5
        DAD     D
        XCHG
        MVI     C,RETRY
WRIT03:
        PUSH    B
        PUSH    D
WRIT05:
        LXI     H,TAW
        CALL    RDAM
        JNC     WRIT15
WRIT10:
        POP     D
        POP     B
        CPI     1
        JZ      READ20
        DCR     C
        MVI     A,2
        JZ      READ20
        JMP     WRIT03
WRIT15:
        POP     D
        PUSH    D
        CALL    WRDATA
        JC      WRIT10
        POP     D
        POP     B
        IN      CSRB
        ANI     WF
        JMP     READ20

;**************************************
;       PODPROGRAMY
;**************************************
STEP:
        LDA     DRVNO
        ORA     B
        OUT     CSRB
        OUT     STEPR
STEP05:
        IN      CSRB
        ANI     STR
        JZ      STEP05
        DCR     C
        JNZ     STEP
        XRA     A
        RET

;**************************************
STORE:
        PUSH    H
        PUSH    PSW
        SHLD    RCLPTR
        LXI     D,-5
        DAD     D
        LXI     D,MEM5
        LXI     B,5
        CALL    MOVE
        DCX     H
        MVI     M,DAMMRK
        LXI     D,SECLEN+1
        DAD     D
        LXI     D,MEM3
        LXI     B,0FF03H
        CALL    MOVE
        POP     PSW
        POP     H
        RET

;**************************************
RECALL:
        PUSH    PSW
        LHLD    RCLPTR
        LXI     D,-5
        DAD     D
        LXI     D,MEM5
        MVI     C,5
        CALL    MOVE2
        LXI     D,SECLEN
        DAD     D
        LXI     D,MEM3
        MVI     C,3
        CALL    MOVE2
        POP     PSW
        RET

;**************************************
MOVE:
        MOV     A,M
        STAX    D
        MOV     M,B
        INX     H
        INX     D
        DCR     C
        JNZ     MOVE
        RET

;**************************************
MOVE2:
        LDAX    D
        INX     D
        MOV     M,A
        INX     H
        DCR     C
        JNZ     MOVE2
        RET

;**************************************
RDAM:
        SHLD    TCNT1
        MVI     B,SECTRS+SECTRS/2
RDAM05:
        PUSH    B
        CALL    HEAD
        CALL    RDYCHK
        POP     B
        RC
        LHLD    TCNT1
        MVI     A,AML1
        OUT     CNT2
        XRA     A
        OUT     CNT2
        MOV     A,L
        OUT     CNT1
        MOV     A,H
        OUT     CNT1
        MVI     A,TAML
        OUT     CNT0
        MVI     A,TAMH
        OUT     CNT0
        MVI     A,(RTAB AND 0E0H)+RAM+RE
        OUT     CSRA
        MVI     H,RTAB SHR 8
        LXI     D,CMPAM
        PUSH    D
        CALL    .RDLOOP
        POP     D
        RC
        LXI     H,SRCHAM
        MVI     C,AML-1
RDAM10:
        INX     D
        INX     H
        LDAX    D
        CMP     M
        JNZ     RDAM15
        DCR     C
        JNZ     RDAM10
        XRA     A
        RET
RDAM15:
        DCR     B
        JNZ     RDAM25
RDAM20:
        XRA     A
        STC
        RET
RDAM25:
        LDA     SRCHTRK
        MOV     C,A
        LDA     CMPTRK
        CMP     C
        JZ      RDAM05
        CALL    .HOME
        LDA     SRCHTRK
        MOV     C,A
        CALL    .SEEK
        JMP     RDAM20

;**************************************
RDDAM:
        MVI     A,DLENL
        OUT     CNT2
        MVI     A,DLENH
        OUT     CNT2
        MVI     A,(RTAB AND 0E0H)+RDM+RE
        PUSH    PSW
        MVI     A,20
L5:     DCR     A
        JNZ     L5
        POP     PSW
        OUT     CSRA
        MVI     H,RTAB SHR 8
        JMP     .RDLOOP

;**************************************
WRDATA:
        MVI     A,DLWL
        OUT     CNT2
        MVI     A,DLWH
        OUT     CNT2
        MVI     A,(WTAB AND 0E0H)+WE
        OUT     CSRA
        MVI     H,WTAB SHR 8
        JMP     .WRLOOP
;**************************************
CTRK:
        PUSH    D
        LXI     H,DRVNO
        MOV     E,M
        MVI     D,0
        DAD     D
        INX     H
        MOV     A,M
        POP     D
        RET
;*************************************
HEAD:
        OUT     HLOADR
        LDA     CON
        CPI     0
        JZ      HEAD05
        CALL    DELAY
        MVI     A,0
        STA     CON
HEAD05: IN      CSRB
        ANI     HLR
        JZ      HEAD05
        RET
;**************************************
RDYCHK:
        MVI     C,200
RDY10:
        IN      CSRB
        ANI     RDY
        RNZ
        MVI     A,1
        CALL    DELAY
        DCR     C
        JNZ     RDY10
        MVI     A,1
        STC
        RET
;**************************************
DELAY:
L4:     MVI     B,140
L3:     DCR     B
        JNZ     L3
        DCR     A
        JNZ     L4
        RET
;**************************************
PREPAM:
        LXI     H,SRCHAM
        PUSH    H
        LXI     B,SLID SHL 8+AMMRK
        MOV     M,C
        INX     H
        PUSH    PSW
        PUSH    H
        CALL    CTRK
        POP     H
        MOV     M,A
        INX     H
        MVI     M,0
        INX     H
        POP     PSW
        MOV     M,A
        INX     H
        MOV     M,B
        POP     H
        MVI     B,AML-2
        CALL    CRC
        MOV     M,D
        INX     H
        MOV     M,E
        RET

;**************************************
CRC:
        LXI     D,-1
CRC05:
        MOV     A,M
        INX     H
        XRA     D
        MOV     D,E
        MOV     C,A
        RRC
        RRC
        RRC
        RRC
        ANI     15
        XRA     C
        MOV     E,A
        RRC
        RRC
        RRC
        MOV     C,A
        ANI     1FH
        XRA     D
        MOV     D,A
        MOV     A,C
        ANI     0E0H
        XRA     E
        MOV     E,A
        MOV     A,C
        RRC
        ANI     0F0H
        XRA     D
        MOV     D,A
        DCR     B
        RZ
        JMP     CRC05

;**************************************
;       SKOKOVE TABULKY CTENI A ZAPISU
;**************************************
ROM     EQU     0
TMP     SET     ($-ROM) AND 1FH
        IF      TMP
        DS      32-TMP
        ENDC

;**************************************
RTAB:
        IN      RDATA
        STAX    D
        INX     D
.RDLOOP:
        IN      CSRA
        MOV     L,A
        PCHL
        XRA     A
        JMP     TERR
        XRA     A
        JMP     TERR
        JMP     LPDONE
        NOP
LPDONE:
        XRA     A
        RET
        NOP
        NOP
        XRA     A
        JMP     TERR
TERR:
        OUT     CSRA
        STC
        RET

;**************************************
WTAB:
        LDAX    D
        OUT     WDATA
        INX     D
.WRLOOP:
        IN      CSRA
        MOV     L,A
        PCHL
        XRA     A
        JMP     TERR
        XRA     A
        JMP     TERR
        JMP     LPDONE
        NOP
        JMP     LPDONE
        NOP
        XRA     A
        JMP     TERR
        XRA     A
        JMP     TERR
        DB      0
;**************************************
        DB      'Jiri Hlavac'
        DB      'Tesla DIZ 1988 '
        .LIST
$next:          ;prvni volna adresa za EBIOS
;
;kontrola delky EBIOSu (max adresa < 1800H)
        IF      $next GT 1800H
        .PRINTX 'EBIOS presahuje konec EPROM'
        ENDIF

;****************************************
;PROMENNE BIOSU
;****************************************
.PHASE varb
SECTOR: DS      1
POINTR: DS      2
DRVNO:  DS      3
SRCHAM: DS      7
SRCHTRK EQU     SRCHAM+1
CMPAM:  DS      7
CMPTRK  EQU     CMPAM+1
TCNT1:  DS      2
RCLPTR: DS      2
MEM5:   DS      5
MEM3:   DS      3
CON:    DB      0
KUPR:   DB      0
DRVBAK: DB      0
$nextv:                 ;volna RAM za promennymi
;
;kontrola delky promennych EBIOSu (max adresa < 4200H)
        IF      $nextv GT 4200H
        .PRIhiTX 'promenne EBIOSu presahuji 41FFH'
        ENDIF

.DEPHASE
;
        IF1
        .PRINTX 'konec prvniho pruchodu'
        ENDIF

        END

ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt


SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA


ZPS | Technické prostředky | Programové vybavení | Dokumentace


8 bity / SAPI-1 / Programové vybavení / V5.0 / ASM EBIOS



SAPI.cz - web o československých osmibitech, zejména SAPI-1. Provozuje EC1045 od roku 2011
Za korekce češtiny dekuji: MELSOFTovi, Silliconovi, Martinu Lukáškovi a NOSTALCOMPovi

Když začínám blbnout z 8bitů tak se chodím léčit mezi otaku.
Animefest.cz