Kernel + real-time OS semantics
Malcolm Robb, LC 0112G
Webmaster at lotus-carlton.fsnet.co.uk
Wed Sep 5 14:23:37 GMT 2001
What a great idea P4.inc would be. I'd also suggest including/using the
variable and table names used in TurboP4.pdf too. That way anyone who knew
how to understand one hac would be able to understand most others.
I have ....
LFFF0: dw $B000 ; SWI instruction
LFFF2: dw $B34A ; ALDL interrupt vector & periodic timer
LFFF4: dw $B59D ; External Interrupt Vector
LFFF6: dw $B006 ; Illegal Instruction Interrupt Vector
LFFF8: dw $B00A ; Bus Reset Vector (read or write 0x6000-0x6FFF)
LFFFA: dw $B00E ; Watchdog Vector
LFFFC: dw $B012 ; Clock Fail Vector
LFFFE: dw $B016 ; Reset Vector
Different assembler/disassembler I suppose. The irq1 vector is at $FFF2,
called TMRVCT in your nmenoics, and it is shared with the ALDL receive &
transmit interrupts. The first thing the interrupt service routine does (in
my code) is test some bits in a status register to ascertain what the cause
of the interrupt is - ALDL RX, ALDL TX or Heartbeat Timer as follows
;**********************************************************************
;
; ALDL interrupt & periodic timer vector routine
;
LB34A: bset NVRAMWD0, #NVRAMWD0_PEI
ldX #IOREG4000
brset ALDL_REG,X,#ALDL_EXTIRQ,PERIODIC_IRQ
brclr SCI_CTRL,X,#SCI_RDRF, LB360 ; if SCI_RDRF enabled
brclr ALDL_REG,X,#ALDL_RDRF,LB37E ; and ALDL_RDRF occurred
call ALDL_RX ; then next ALDL Rx'ed
reti
;
LB360: brclr SCI_CTRL,X,#SCI_TDRE, LB36C ; if SCI_TDRE enabled
brclr ALDL_REG,X,#ALDL_TDRE,LB37E ; and ALDL_TDRE occurred
call ALDL_TX ; then Tx next ALDL byte
reti
;
LB36C: brclr SCI_CTRL,X,#SCI_TC, LB37E ; if SCI_TC enabled
brclr ALDL_REG,X,#ALDL_TC,LB37E ; and SCI_TC occurred
; then SCI Tx complete occurred
ldaA #$27
staA SCI_CTRL,X ; 0x27 = enable SCI_RDRF & SCI_EXTIRQ & SCI_RE & SCI_RWU
bclr ALDLMW,#ALDLMW_TX ; Flag ALDL inactive
bclr IOPORTA,X,#SPI_ALDLTX ; Disable the ALDL Tx Output Buffer
LB37E: reti
;
;**********************************************************************
The jump table isn't at a fixed location for all code masks, so you'll need
to specify which mask you're using to locate it. The table is buried within
the main processor code. In my code ($B0 mask) it's at $D658
Hope this helps
Push AF, Ret ;-)
Malcolm
-----Original Message-----
From: Pat Ford [SMTP:pat at istop.com]
Sent: Wednesday, September 05, 2001 2:46 PM
To: gmecm at diy-efi.org
Subject: Re: Kernel + real-time OS semantics
where is the jump table? (on which mask??) which vector holds the address
of irq1 ( the timer irq)
does anyone have a list of what all the interrupt vectors are?
i.e. this is what I have worked with
FFF0 SWIVCT: .word SWIVCT
FFF2 TMRVCT: .word TMRVCT
FFF4 EXTVCT: .word EXTVCT
FFF6 ILL_OP: .word SWIVCT
FFF8 BUSVCT: .word BUSVCT
FFFA COPVCT: .word BUSVCT
FFFC CLKVCT: .word BUSVCT
FFFE RSTVCT: .word BUSVCT
does it look correct?
what I think would be great is to pull together info and make a P4.inc
file that has the defines for registers, int vectors .... That would
help the disassemblies. I'll start trying to put one together today, if
no one else wants to
----------------------------------------------------------------------------
To unsubscribe from gmecm, send "unsubscribe gmecm" (without the quotes)
in the body of a message (not the subject) to majordomo at lists.diy-efi.org
More information about the Gmecm
mailing list