Browse Source

Cleanup IntTest

pull/31/head
Wayne Warthen 7 years ago
parent
commit
5551fb9df1
  1. 94
      Source/Apps/IntTest.asm

94
Source/Apps/IntTest.asm

@ -1,4 +1,5 @@
;===============================================================================
;
; INTTEST - Test HBIOS interrupt API functions
;
;===============================================================================
@ -24,11 +25,6 @@ bf_sysint .equ $FC ; INT function
bf_sysintinfo .equ $00 ; INT INFO subfunction
bf_sysintget .equ $10 ; INT GET subfunction
bf_sysintset .equ $20 ; INT SET subfunction
;
z180_base .equ $40 ; i/o base address for internal z180 registers
z180_tcr .equ z180_base + $10 ; timer control
z180_tmdr0l .equ z180_base + $0C ; timer 0 data lo
;
;===============================================================================
; Code Section
@ -177,15 +173,15 @@ estidx:
;
ld a,(intmod)
cp 1
jr z,hkim1
jr z,hkim
cp 2
jr z,hkim2
jr z,hkim
ret
;
; IM1 specific code
; Setup interrupt handler
;
hkim1:
ld hl,m1int ; pointer to my interrupt handler
hkim:
ld hl,int ; pointer to my interrupt handler
ld b,bf_sysint
ld c,bf_sysintset ; set new vector
ld a,(vecidx) ; get vector idx
@ -196,33 +192,6 @@ hkim1:
ei ; interrupts back on
jr start
;
; IM2 specific code
;
;hkim2:
; ld hl,m2stub ; pointer to my interrupt stub
; ld b,bf_sysint
; ld c,bf_sysintset ; set new vector
; ld a,(vecidx) ; get vector idx
; ld e,a ; put in E
; di
; rst 08 ; do it
; ld (chain),hl ; save the chain address
; ld (engadr),de ; insert the int routing engine address
; ei ; interrupts back on
; jr start
;
hkim2:
ld hl,m2int ; pointer to my interrupt handler
ld b,bf_sysint
ld c,bf_sysintset ; set new vector
ld a,(vecidx) ; get vector index
ld e,a ; put in E
di
rst 08 ; install our vector
ld (chain),hl ; save the chain address
ei
jr start
;
; Wait for counter to countdown to zero
;
start:
@ -238,7 +207,7 @@ start:
loop:
call getchr ; check console
cp $1B ; <esc> to exit
jr z,loop1 ; if so, bail out
jr z,unhook ; if so, bail out
ld a,(count) ; get current count value
cp e
jr z,loop
@ -249,12 +218,12 @@ loop:
call prtchr
pop af
or a ; set flags
jr z,loop1 ; done
jr z,unhook ; done
jr loop ; and loop
loop1:
;
; Unhook
;
unhook:
call crlf2
ld de,msgunhk
call prtstr
@ -509,7 +478,7 @@ jphl:
;
; Convert hex chars to a byte value.
; Enter with HL pointing to buffer with chars to convert
; and B contining number of chars. Returns value in A.
; and B containing number of chars. Returns value in A.
; CF set to indicate error (overflow or invalid char).
;
hexbyt:
@ -576,7 +545,7 @@ stack .equ $ ; stack top
;
; Messages
;
msgban .db "INTTEST v1.1, 10-May-2019",13,10
msgban .db "INTTEST v1.2, 15-May-2019",13,10
.db "Copyright (C) 2019, Wayne Warthen, GNU GPL v3",0
msginfo .db "Interrupt information request...",0
msgmode .db " Active interrupt mode: ",0
@ -596,55 +565,20 @@ reladr .equ $ ; relocation start adr
;
.org $8000 ; code will run here
;
m1int:
int:
; count down to zero
ld a,(count) ; get current count value
or a ; test for zero
jr z,m1int1 ; if zero, leave it alone
jr z,int1 ; if zero, leave it alone
dec a ; decrement
ld (count),a ; and save
m1int1:
int1:
xor a ; signal int has NOT been handled
; follow the chain...
ld hl,(chain) ; get chain adr
jp (hl) ; go there
;;
;m2stub:
; push hl
; ld hl,m2int
; jp $0000
;engadr .equ $ - 2
;;
;m2int:
; ; count down to zero
; ld a,(count)
; or a
; jr z,m2int1
; dec a
; ld (count),a
;m2int1:
; ; ack/reset z180 timer interrupt
; in0 a,(z180_tcr)
; in0 a,(z180_tmdr0l)
; ret
;
m2int:
; N.B., all used register values MUST be preserved!!!
push hl ; save incoming HL
push af ; save incoming AF
; count down to zero
ld a,(count) ; get current count value
or a ; test for zero
jr z,m2int1 ; if zero, leave it alone
dec a ; decrement
ld (count),a ; and save
m2int1:
pop af ; restore AF
; funky way to restore original HL and follow the chain
ld hl,(chain) ; get chain adr to HL
ex (sp),hl ; chain adr to TOS and restore original HL
ret ; will "JP" to chain address
;
chain .dw $0000 ; chain address
count .db 0 ; counter
;

Loading…
Cancel
Save