Bios del microcomputer
[Index][Scheda madre con uP Z80][Programma][Tastierino][Scheda visualizzazione][Scheda alimentazione e clock]
[Lista Argomenti]

Il bios può essere suddiviso in tre parti fondamentali: test della memoria, acquisizione del dato da tastiera ed in fine visualizzazione.

Test della memoria:
Label
Op Code
Commento
           org 0000
bufda  equ fe01      inizializza bufda fe01
buflo  equ fe02      inizializza buflo fe02
bufhi  equ fe03      inizializza bufhi fe03
bufta  equ fe04       inizializza bufta fe04
da       equ 6000      inizializza da 6000
lo       equ 4000      inizializza lo 4000
hi       equ 2000      inizializza hi 2000
tasto  equ c000       inizializza tasto c000
          ld  sp,ffff     inizializza area stack
          jp  0100       vai alla locaz 0100
          org 0100
          ld  a,69        inizializza accumulator
          ld  bc,ffff    inizializza contatore
          ld  hl,dfff    inizializza puntatore
ciclo: inc hl           incrementa puntatore
          inc bc          incrementa contatore
          bit 5,b         controlla bit 6 reg b
          jp  nz,dopo    se bit 6=1 vai a fine
          ld  (hl),a      scrivi su memoria
          ld  a,(hl)      leggi da memoria
          cp  69          confronta con 69
          jp  z,ciclo    se confr=0 vai a ciclo
error: ld  a,ba        inizializza a con ba
          ld  (hi),a      scrivi ba su HI
          ld  a,db        inizializza a con db
          ld  (lo),a      scrivi db su LO
          ld  a,ad        inizializza a con ad
          ld  (da),a      scrivi ad su DA
          halt              halt

dopo:  ld  hl,e000     inizializza hl a e000
          ld  a,h          accum=parte alta
          ld  (hi),a       visualizza parte alta
          ld  (bufhi),a  carica buffer alto
          ld  a,l           accum=parte bassa
          ld  (lo),a       visualizza parte bassa
          ld  (buflo),a   carica buffer basso
          ld  a,(hl)        accum=dato
          ld  (da),a        visualizza dato
          ld  (bufda),a    carica buffer dato
          ld  (bufta),a     buff tasto=accumulatore



Acquisizione di un dato dalla tastiera:

p1:   ld  a,(tasto)   leggi tastiera
        bit 5,a            controlla pin DA 74923
        jr  z,p1           se DA=0 vai p1
        ld  c,a            salva accumulatore
p2:   ld  a,(tasto)   leggi tastiera
        bit 5,a           controlla pin DA 74923
        jr  nz,p2        se DA=1 vai p2
        ld  a,c           ricarica accumulatore
        bit 4,a           controlla pin E 74923
        jr  nz,funz     se E=1 vai a funz
        and 0f           maschera accumulatore
        ld  d,a          salva accumulatore
        ld  a,(bufta)   accum=buffer tasto
        rlc a             ruota sinistra con carr
        rlc a             "
        rlc a             "
        rlc a             "
        and f0          maschera accumulatore
        add a,d         ricomponi valore
        ld  (bufta),a   carica buffer tasto
        ld  (da),a      visualizza dato
        jp  p1           vai a p1

funz: and 0f        maschera accumulatore
        cp  00           e' HI?
        jr  nz,low     se no vai a low
        ld  a,(bufta)  accumulat=buff tasto
        ld  h,a
        ld  (bufhi),a   buff alto=accumulatore
        jp  visu          vai a visu
low:  cp  01          e' LO?
        jr  nz,dato     se no vai a dato
        ld  a,(bufta)   accumulat=buff tasto
        ld  l,a
        ld  (buflo),a   buff basso=accumulatore
        jp  visu         vai a visu
dato: cp  02         e' DA?
        jr  nz,run      se no vai a run
        ld  a,(bufta)  accumulat=buff tasto
        ld  (hl),a       val punt hl=accumulator
        ld  (bufda),a  buff dato=accumulatore
        inc hl           passa alla locaz succes
        ld  a,h          accumulat=registro h
        ld  (bufhi),a  aggiorna bufhi
        ld  a,l           accumulat=registro l
        ld  (buflo),a  aggiorna buflo




Routine di visualizzazione:

visu:  ld  a,(bufhi) accum= buffer hi
        ld  h,a          aggiorna registro h
        ld  (hi),a      visualizza parte alta
        ld  a,(buflo) accumulat=buff basso
        ld  l,a          aggiorna registro l
        ld  (lo),a      visualizza parte bassa
        ld  a,(hl)      accum=val punt hl
        ld  (bufda),a  buff dato=accumulatore
        ld  (da),a      visualizza dato
        jp  p1          vai a p1
run:  cp  03          e' RUN?
        jr  nz,err     se no vai a error
        ld  a,(bufhi)  accum=buff alto
        ld  h,a         h=parte alta
        ld  a,(buflo) accum=parte bassa
        ld  l,a          l=parte bassa
        jp  (hl)        PC=valore puntato da hl
err:  ld  a,11        carica accum con 11
        ld  (da),a     visualizza 11 su DA
        ld  (lo),a      visualizza 11 su LO
        ld  (hi),a      visualizza 11 su HI
pp:   ld  a,(tasto)  leggi tastiera
        bit 5,a         controlla pin DA 74923
        jr  z,pp        se DA=0 vai pp
        ld  a,(tasto)  leggi tastiera
        bit 5,a         controlla pin DA 74923
        jp  nz,visu     se DA=1 vai visu
        end