;================================================================ ;CP/M 2.2 f}r vortex-Speichererweiterung: Uhrzeit anzeigen ;Datei OSC4TIME.MAC Version 18-Dez-88 ;Include f}r OSC4BANK.MAC ;Z80DOS-Kompatible Uhrzeit auf Wunsch st{ndig am Bildschirm einblenden .COMMENT @ public shtime,stclck,gotime lock: dw 0 nbuff: db 0FFh,0FFh,0FFh ;Ergebnis des Uhrlesens ablegen @ ;****** Int-Bildschirmausgabe w{hrend Routinenausf}hrung sperren stclck: ld a,255 ld (lock),a ;Flag, da~ Scroll gerade ausgef}hrt pop hl ;auszuf}hrende Routine call ipchl ld a,(lock+1) ;Interrupt wartend? and a ld b,a ;Anzahl der ge{nderten Register call nz,uhrzeit ;dann im Hauptprogramm anzeigen ld hl,0 ld (lock),hl ret ;****** Routine in HL ausf}hren ipchl: jp (hl) ;****** Uhr am Bildschirm neu anzeigen shtime: ld a,255 ld (lock),a xor a ld hl,0018h ld de,4718h call SCR_FILL_BOX ld hl,4A18h ld a,':' call uchar ld hl,4D18h ld a,':' call uchar di ;erzwingen, da~ alle Register gelesen ld hl,nbuff ld b,3 clrbf: ld (hl),255 inc hl djnz clrbf ei call KL_L_ROM_DISABL push af call gettime ;Uhrenregister einlesen B: Anzahl der Register pop af call KL_ROM_RESTORE call uhrzeit ;Zeit anzeigen ld hl,0 ld (lock),hl ret ;****** Im Interrupt: Uhr aktualisieren gotime: call txt_get_window ;Darstellung notwendig? ld a,e cp 17h ret nz ;Statuszeile nicht aktiviert call gettime ;B := Anzahl der ge{nderten Register ld a,(lock) ;Kollision mit Bildschirmausgabe? and a jr z,uhrzeit ;Uhrzeit anzeigen B:= Registerzahl ld a,b ;Anzahl der Register (# 0) ld (lock+1),a ;Ausgabe zur}ckgestellt Signalisieren ret ;Uhrzeit auf Bildschirm aktualisieren B:= Anzahl der Register uhrzeit:ld de,4F18h ;Zeit anzeigen, sofern Ziffer umgesprungen ld hl,nbuff+2 call disp2 ;Sekunden Einer/Zehner ret z dec d ;Freiraum ]berspringen call disp2 ;Minuten Einer/Zehner ret z dec d ;Stunden disp2: ld a,(hl) and 0Fh call zdisp ld a,(hl) rrca rrca rrca rrca and 0Fh call zdisp dec hl dec b ret zdisp: add a,'0' ;Zeichen an Spalte D, Zeile E ausgeben. Danach DEC D char: push hl push de push bc ex de,hl ;Cursorpos. call uchar pop bc pop de pop hl dec d ret ;Uhrzeit von Z{hler-Speicher einlesen gettime:di ld b,0 ld hl,nbuff+2 ;Register Immer nach NBUFF kopieren ld de,X_Time+4 gtnxt: ld a,(de) cp (hl) jr z,gtend ld (hl),a dec hl dec de inc b ld a,b cp 3 jr c,gtnxt gtend: ei ret ;****** Zeichen f}r Uhr auf Screen ausgeben uchar: ld c,a call KL_L_ROM_ENABLE push af ld a,(vidatt) ;Video-Attribute l|schen push af xor a ld (vidatt),a ld a,c call charus ;tbuffer wird hier nicht verwendet pop af ld (vidatt),a pop af jp KL_ROM_RESTORE ;================================================================