[Coco] Frank Hogg Labs E-Forth, which is the only thing I’ve found that won’t run on the CoCo3FPGA ?
Leslie Ayling
layling at bigpond.net.au
Fri Feb 23 05:13:04 EST 2018
Hi Stephen, Dave, et al.
> If you smart guys can find a work-around to get FHL E-Forth to work on the CoCo3FPGA, I will be very grateful!
Yep, certainly do-able.
I've located the routine in the Forth executable which scans the keyboard matrix.
See below with some comments.
As Dave surmised, it does indeed drive the keyboard ports in a non-standard way.
The routine relies on the fact that a *real* 6821 PIO has internal pull-up resistors on Port A.
Instead of driving all bits of $F002 as outputs, it only drives one column at a time, the other bits will float high
and appear as '1' when reading the row value from $F000.
>From what I can see, only David Keil's MS-DOS emulator correctly emulates the pull-ups on port A.
Coco3FPGA certainly doesn't handle it, neither does VCC or Jeff V's emulators.
Probably easiest to patch the routine so that it will just work on both real hardware and *all* the emulators.
RAM:302C
RAM:302C READ_KBD_PIO: ; CODE XREF: RAM:loc_3086↓p
RAM:302C 34 1E pshs a,b,dp,x
RAM:302E 86 FF lda #$FF
RAM:3030 1F 8B tfr a, dp ; Direct Page = $FFXX now
RAM:3032 DC 02 ldd <byte_2 ; read A <= $FF02, B <= $FF03
RAM:3034 34 02 pshs a
RAM:3036 C8 04 eorb #4 ; Flip DDR select bit for port B ($FF02)
RAM:3038 D7 03 stb <byte_3 ; save old contents of $FF03 back to $FF03 ???
RAM:303A 96 02 lda <byte_2 ; A <= $FF02
RAM:303C 34 06 pshs a,b ; $FF $10 on first run through
RAM:303E 8E 30 24 ldx #word_3024
RAM:3041 86 01 lda #1 ; start at column 0 : @,H,P,X,0,8,<ENTER>
RAM:3043
RAM:3043 loc_3043: ; CODE XREF: READ_KBD_PIO+32↓j
RAM:3043 C6 30 ldb #$30 ; '0'
RAM:3045 D7 03 stb <byte_3 ; $FF03 select DDR in $FF02
RAM:3047 97 02 sta <byte_2 ; *$FF02 select only *1* column as output, rest are HI-Z (value in A)
RAM:3049 C6 34 ldb #$34 ; '4'
RAM:304B D7 03 stb <byte_3 ; select output register
RAM:304D 0F 02 clr <byte_2 ; $FF02 <= $00, but only one bit will be selected as an output.
RAM:304D ; ** Next instruction relies on the internal pull-ups on port A **
RAM:304D ; Only one bit can be low!
RAM:304F D6 00 ldb <byte_0 ; read B <= $FF00,
RAM:3051 53 comb
RAM:3052 E4 10 andb -$10,x ; $3014 -> $301B
RAM:3054 E7 10 stb -$10,x
RAM:3056 D6 00 ldb <byte_0
RAM:3058 53 comb
RAM:3059 EA 84 orab ,x ; $3024 -> $302B
RAM:305B E7 80 stb ,x+
RAM:305D 48 asla ; shift column select bit left for next run through
RAM:305E 24 E3 bcc loc_3043 ; have we done all 8 columns yet?
RAM:3060 35 06 puls b,a
RAM:3062 D7 03 stb <byte_3
RAM:3064 97 02 sta <byte_2
RAM:3066 C8 04 eorb #4
RAM:3068 D7 03 stb <byte_3
RAM:306A 35 02 puls a
RAM:306C 97 02 sta <byte_2
RAM:306E 35 9E puls pc,x,dp,b,a
RAM:306E ; End of function READ_KBD_PIO
Cheers,
Leslie
-----Original Message-----
From: Coco [mailto:coco-bounces at maltedmedia.com] On Behalf Of Stephen Pereira
Sent: Friday, 23 February 2018 12:03 PM
To: CoCoList for Color Computer Enthusiasts
Subject: Re: [Coco] Frank Hogg Labs E-Forth, which is the only thing I’ve found that won’t run on the CoCo3FPGA ?
If you smart guys can find a work-around to get FHL E-Forth to work on the CoCo3FPGA, I will be very grateful!
smp
- - -
Stephen Pereira
Bedford, NH. 03110
KB1SXE
> On Feb 22, 2018, at 7:27 PM, Leslie Ayling <layling at bigpond.net.au> wrote:
>
> Hi Dave, et al.
>
> I'm finding it very interesting indeed.
>
> I've tried E-Forth out on all the available emulators I have.
>
> Only works correctly on David Keil's MS-DOS emulator, but it's difficult to debug there.
>
> Doesn't work on VCC or Jeff V's emulators, you just get a row of chars for each keypress.
>
> Still trying to work out exactly what it is doing....
>
>
More information about the Coco
mailing list