;---------------------------------------------------------------------- ; ; UPRAVA BIOSU PRO PRACI S PROGRAMEM FET ; ;---------------------------------------------------------------------- ; ; .Z80 ASEG ; ; ; BDOS EQU 5 ;ADRESA BDOSU identi equ 0ec48h ;identifikace biosu conin equ 0f1dch ;adresa cteni klavesnice vstcon equ 0ec09h ;vektor conin modbio equ 0edc4h ;modifikace biosu ; ; ; CR EQU 0DH LF EQU 0AH ; ; ; ORG 100H ; ; ; ZAVEDENI PROGRAMU ;------------------------------------------------- ; ZAV: ld hl,identi ;identifikace verze biosu ld de,nap0 ld bc,7 ;delka zony call cpdehl ;porovnani ld de,nap0i ;spatna verze biosu jr nz,napis ld hl,tab1 ld b,4 ;meni se vyznamy 3 klaves kolo: ld d,(hl) inc hl ld e,(hl) inc hl ld a,(hl) inc hl ld (de),a djnz kolo ld hl,(6) ld (skok+1),hl ;nastaveni skoku ld bc,kontab and a sbc hl,bc ;offset ld b,h ld c,l ld hl,(base+1) add hl,bc ld (base+1),hl ld hl,(6) dec hl ld de,kontab-1 ld bc,kontab-skok ex de,hl lddr inc de ld (modbio),de ;ochrana programu inc de inc de inc de ld (vstcon+1),de ld de,nap1 napis: ld c,9 ;vystup retezce znaku call bdos RST 00 ;KONEC CINNOSTI ZAVADECE ; ; cpdehl: ld a,(de) inc de cpi ret nz ;pri nesouhlasu jp pe,cpdehl ;dalsi znak ret ; ; skok: jp 0 base: ld de,0 ;nastavi se programem po presunu ld hl,flags ;adresa priznaku add hl,de bit 0,(hl) ;neni treba neco vyslat? jr z,nopr ;pokud neni res 0,(hl) ;a nebude ld hl,presm add hl,de ld a,(hl) ret nopr: push de call conin ;cteni znaku pop de cp 20h ;ridici znaky? jr c,rz ;pokud ano ld hl,flags add hl,de res 1,(hl) ret rz: ld hl,tab ;adresa tabulky add hl,de push hl ld bc,ktab-tab cpir pop bc ret nz ;kod se nanasel, zustane puvodni dec hl and a ;rel. adresa sbc hl,bc add hl,hl ;x2 ld bc,tabn add hl,bc ;abs. adresa add hl,de ld c,(hl) inc hl ld a,(hl) ;prevzeti vedl. ridiciho znaku and a ;existuje? jr nz,nastav ;pokud ano ld a,c ret nastav: bit 7,a ;jde o spec. funkce? jr nz,spec ;skok,pokud ano ld hl,presm add hl,de ld (hl),a ld a,11h ;CTRLQ ld hl,flags add hl,de set 0,(hl) ret spec: cp 81h ;je obsluha CTRLQ? jr nz,kfun ;pokud ne ld hl,flags add hl,de ld a,02 xor (hl) ld (hl),a ;inverze bitu set 0,(hl) bit 1,(hl) ld hl,presm add hl,de ld (hl),'D' ld a,11h ret z ld (hl),'S' ret kfun: ld a,0f8h ;jestacena CTRL? out (0d0h),a nop in a,(0d1h) and 40h ld a,c ret nz ;kod zustava, pokud ne ld hl,tabcr add hl,de ld bc,8 cpir ret nz ;jiny kod ld a,(hl) ret ; flags: defb 0 presm: defs 1 ; tab: defb 5,18h,4,13h,12h,3,6,1,19h,0ah,11h;tabulka puvodnich kodu defb 2 ktab: tabn: defb 0bh,80h,0eh,80h,4,80h,13h,80h ;tab. novych kodu defb 12h,0,17h,0,14h,0,11h,'T',18h,0 defb 19h,0,11h,81h,3,0 tabcr: defb 0bh,0ch,0eh,1dh,4,6,13h,1 kontab: ; nap0: defb "1990 v4" nap0i: defb CR,LF,"Chybna verze modulu BIOS!",CR,LF,"$" nap1: defb CR,LF defb 'Byla provedena uprava BIOSU pro textovy editor FET.',CR,LF,'$' ; tab1: defb 0f3h,8eh,011h,0F3H,08DH,7,0F2H,090H,2,0F2H,4DH,2 ; end