Blame | Last modification | View Log | Download | RSS feed
; CPU_TIME.INC;******************************************************************************;* Zeitmessmodul fuer TLCS 90 *;* *;* Originale fuer den TLCS 900 von Oli(ver Sellke) *;* Implementierung TLCS 90 von Alfred Arnold, Dezember 1993 *;* *;* Routine Funktion Eingabe Ausgabe Stack Laenge *;* *;* InitTimer Timer initialisieren ---- ---- 0 Byte 6 Byte *;* StartTimer Timer starten ---- ---- 0 Byte 7 Byte *;* StopTime Timer stoppen & Ausgabe ---- ---- 6 Byte 117 Byte *) *;* *;* *) bei hoher Aufloesung *;* *;* - Die Routinen benutzen Timer 4, dieser darf nicht von der Anwendung *;* benutzt werden!! *;* - Die Aufloesung kann ueber das Symbol BigTime umgeschaltet werden: *;* *;* BigTime Aufloesung Maximalzeit *;* definiert 0,8 us 52,428 ms *;* undefiniert 12,8 us 838,848 ms *;* *;* - Die Datei MON.INC wird fuer die Einspruenge des TDBTMP90-Monitors benoetigt.*;* - MACROS.INC muss vorher eingebunden werden *;* *;******************************************************************************section CPU_Time;------------------------------------------------------------------------------; Monitoreinsprungadressen ladeninclude "mon.inc";------------------------------------------------------------------------------; Timer vorinitialisierenproc InitTimerifdef BigTimeld (T4MOD),00100010b ; nur Software-Capture, Phi16elseifld (T4MOD),00100001b ; nur Software-Capture, Phi1endifset 5,(TRUN) ; Vorteiler startenres 4,(TRUN) ; Timer steht nochretendp;------------------------------------------------------------------------------; Timer startenproc StartTimerset 2,(T4MOD) ; Timer loeschenres 2,(T4MOD)set 4,(TRUN) ; Timer startenretendp;------------------------------------------------------------------------------; Timer stoppen & Wert auf Konsole ausgebensubproc Div24ld b,16 ; A-HL : B = HL und ADivLoop: sll l ; Divident hochschiebenrl hrlasrl h ; fuer nachherrr lsub a,c ; passt Divisor hinein ?jr nc,DivOKadd a,c ; nein, zuruecknehmenscf ; ins Ergebnis 0 einschiebenDivOK: ccf ; neues Ergebnisbitrl l ; Ergebnis in HL einschiebenrl hdjnz DivLoopretendpproc StopTimerpush af ; Register rettenpush hlpush depush bcres 5,(T4MOD) ; Wert im CAP1 latchenres 4,(TRUN) ; Timer wieder anhaltenld hl,(CAP1L) ; Wert auslesenifdef BigTimeld a,h ; grosse Periode: x128...ld h,lld l,0srlarr hrr lld c,100 ; ...Teilen durch 100elseifld a,0 ; kleine Periode: x8...rept 3sll lrl hrlaendmld c,10 ; ...Teilen durch 10endifcall Div24 ; Division durchfuehrenifdef BigTime ; Kommatrennung fuer grosse Periodeld a,0call Div24ld d,a ; Rest merkenendifld e,0 ; Zeichenzaehler nullenld c,10 ; Teilerfaktor konstantInLoop: ld a,0 ; Erweiterung auf 24 Bitcall Div24 ; einmal teilenpush af ; Zeichen auf LIFO merkeninc e ; ein Zeichen mehror hl,hl ; noch etwas uebrig ?jr nz,InLoopld a,5 ; Leerzeichen fuer Ausrichtungsub a,e ; Zahl berechnenjr z,OutErg ; Nullschleife abfangenld b,a ; ansonsten passende Zahl LeerzeichenBlankLoop: call BLAUS ; voranstellendjnz BlankLoopOutErg: ld b,e ; jetzt die Zeichen ausgebenOutLoop: pop afadd a,'0'call CONOUTdjnz OutLoopifdef BigTime ; bei grosser Aufloesung Nachkommastellenld a,'.'call CONOUTld l,d ; Zehner/Einerzerlegungld h,0div hl,cadd hl,'00'ld a,lcall CONOUTld a,hcall CONOUTcall BLAUSld a,'m'elseifld a,' 'call CONOUTld a,'u'endifcall CONOUT ; Ausgabe Einheitld a,'s'call CONOUTpop bc ; Register zurueckpop depop hlpop afretendp;------------------------------------------------------------------------------; gemeinsames Endeendsection