CCE MC-1000 tests

Discussion about other targets
ensjo
Member
Posts: 15
Joined: Sat Mar 09, 2013 2:14 pm

CCE MC-1000 tests

Post by ensjo »

Continuazione di conversazione previamente via e-mail:
stefano wrote:[?]
Devo mettere online tutti i file, spero che stanotte vengano compilati correttamente da 'nightly'.
Hai compilato e installato z88dk da l? ?
Se si, allora spostati in {z88dk}/examples e scrivi:
zcc +mc1000 -lndos -create-app -Cz--audio -oothello othello.c

Crea othello.bin e othello.wav
Ho scaricato oggi il nigtly. L'ho installato con:

sudo ./build.sh
sudo make install
sudo make libs
sudo make install-libs

Dopo, ho provato il commando che hai indicato:

zcc +mc1000 -lndos -create-app -Cz--audio -oothello othello.c

E la risposta ? stato:

Can't open config file /usr/local/lib/z88dk/lib/config/mc1000.cfg

Infatti, il direttorio "config" non esiste:

ls -la /usr/local/lib/z88dk/lib
total 0
drwxr-xr-x 3 root wheel 102 8 Mar 01:49 .
drwxr-xr-x 3 root wheel 102 8 Mar 01:49 ..
drwxr-xr-x 132 root wheel 4488 9 Mar 10:41 clibs

Esse esiste tuttavia nella struttura del nigtly build che ho scaricato:

ls -la /Users/ensjo/z88dk/lib/config/mc1000*
-rw-r--r-- 1 root staff 3499 9 Mar 10:41 /Users/ensjo/z88dk/lib/config/mc1000.cfg
-rwxr-xr-x@ 1 ensjo staff 3304 4 Mar 15:03 /Users/ensjo/z88dk/lib/config/mc1000.lnx
-rw-r--r-- 1 root staff 3503 9 Mar 10:41 /Users/ensjo/z88dk/lib/config/mc1000ansi.cfg
-rwxr-xr-x@ 1 ensjo staff 3308 8 Mar 10:40 /Users/ensjo/z88dk/lib/config/mc1000ansi.lnx

Come procedere?
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

in the z88dk root folder you should launch the "make config" command. it should generate the cfg files.
If you feel adventurous try the whole 'make' process otherwise move into {z88dk}/libsrc and issue a make command.
The generated .lib files will have to be copied/moved into {z88dk}/lib/clibs manually.
to build only the mc1000 libs:
make mc1000_clib.lib
make mc1000ansi_clib.lib

if you set the ZXCOLS environment variable you can specify a different text resolution than 64 columns in the ANSI lib.
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

This thread could also help, It is related the the MAC platform:
http://www.z88dk.org/forum/viewtopic.php?id=6
ensjo
Member
Posts: 15
Joined: Sat Mar 09, 2013 2:14 pm

Post by ensjo »

From that thread, I used decfreak's patch, i.e., adding these 3 lines to the install-libs section of Makefile:

Code: Select all

        mkdir -p $(prefix)/lib/z88dk/lib/config
        cp -R lib/config/* $(prefix)/lib/z88dk/lib/config/
        find $(prefix)/lib/z88dk/lib/config -type f | xargs chmod 644
And then after the makes I just managed to compile the Othello example program and LOAD it in (MESS-emulated) MC-1000. YAY! :D

Now I'm ready to advance. For the record, here's the e-mail with the tests that Stefano proposed:
stefano wrote:Bene, allora lasciamo la conversione WAV cos?.
Devo mettere online tutti i file, spero che stanotte vengano compilati correttamente da 'nightly'.
Hai compilato e installato z88dk da l? ?
Se si, allora spostati in {z88dk}/examples e scrivi:
zcc +mc1000 -lndos -create-app -Cz--audio -oothello othello.c

Crea othello.bin e othello.wav
Se aggiungi '-startup=2', allora il file verr? creato in modo TLOAD.


Domani mattina potrai anche usare la nuova libreria di testo sulla grafica:
zcc +mc1000ansi -lndos -create-app -Cz--audio othello.c
oppure:
zcc +mc1000ansi -lndos -create-app -Cz--audio -DGRAPHICS othello.c
oppuer:
zcc +mc1000ansi -lndos -create-app -Cz--audio -DSMALLGRAPHICS othello.c

Ci sono tanti altri programmi 'demo', guarda anche nelle subdirectory (graphics, console..).

Probabilmente ho sbagliato qualcosa nella gestione della tastiera.
getk() ho provato a farlo funzionare in due modi :

XLIB getk

.getk

; call $C027
; and a
; jr z,key_got
; ld a,($011B)

call $C009
and a
jr z,key_got
call $C006

.key_got
ld l,a
ld h,0
ret

Esiste un modo per forzare il reset della tastiera ?
Ho sbagliato qualcosa ?
Per la grafica nascondo il cursore cos?:

ld hl,clgret
ld ($f7),hl ; cursor flashing and positioning routine
.clgret
ret

ma anche se escludo queste due righe non risolvo il problema.
ensjo
Member
Posts: 15
Joined: Sat Mar 09, 2013 2:14 pm

Post by ensjo »

I compiled Othello for TLOAD. Loaded OK, started OK, but the keyboard wasn't working well. That's no fault of z88dk. It's because TLOAD enters "game mode" (system variable HEAD [$0106] = $00). In game mode the keys are not translated exactly as in "terminal" mode. <ENTER> gives "[", <RUBOUT> gives "]", etc. Also, in game mode no beep is generated when a key is pressed, and <CTRL>+<H> is meant to switch "game topics" and thus causes the program to restart.

If you want to get user input in "terminal" style (as in the Othello game) in a TLOADed program, you should set HEAD to $ff, or add a routine to interpret the different codes generated by the keyboard when HEAD = $00.
stefano wrote:getk() ho provato a farlo funzionare in due modi :

Code: Select all

XLIB getk

.getk

  ; call $C027
  ; and  a
  ; jr  z,key_got
  ; ld  a,($011B)

call $C009
and  a
jr  z,key_got
call $C006

.key_got
ld l,a
ld h,0
ret
If getk() is supposed to work like BASIC's INKEY$ (i.e., get key code if any is pressed, 0 otherwise) then the version that calls "SKEY?" ($C027), commented in your code, should be the right one. Otherwise, if it is supposed to work like Applesoft BASIC's GET$ (i.e., WAIT UNTIL a key is pressed, then return its code) then "KEY" ($C006) should do the work ? no need to call "KEY?" ($C009):

Code: Select all

call $C006
ld l,a
ld h,0
ret
(I'm not sure why "KEY?" exists at all. It calls "SKEY?" and, if a key is pressed, waits for 7 milliseconds and calls "SKEY?" again to check if it is still pressed; only then it considers that the key was "really" pressed. "KEY" uses "KEY?" internally, but why not "SKEY?" directly? Why is this 7ms delay needed?)
stefano wrote:Esiste un modo per forzare il reset della tastiera ?
You mean, to make MC-1000 "forget" keys that are really being pressed by the user? No.
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

Hmm.. ok,
Thank you for testing, I think you reached big goal by getting the sources, building them on a not-so-familiar-to-us OS (I'll integrate the makefile with the three lines patch ASAP) and run the demos on a real MC-1000.

getk() should just get the current key code or zero, without waiting for a keypress.
fgetc_cons() should wait (it is meant for the normal text typing, here a buffered keyboard wuold fit perfectly).

Thanks for the explanation, I'll try by tweaking the HEAD flag.
There's still few basic funtions which could be implemented, a minimal timer/clock, and the joystick() function will permit to run almost all the existing demos. Sound is a parallel point, there are two ways to make an old computer play: by chip based sound generators or with a bit banging loop on a known output (like the ZX Spectrum speaker).. the code for this latter approach is ready made, it is just a matter of finding a bit and a port (or memory location) which will produce an audible click. On the TI calculators it has been achieved by making the IR port interfering with a long wave radio receiver.
A good low level API for the YM chipset is something to be designed, though some basic function exists for targets like the MSX or Sega Master System.
ensjo
Member
Posts: 15
Joined: Sat Mar 09, 2013 2:14 pm

Post by ensjo »

stefano wrote:getk() should just get the current key code or zero, without waiting for a keypress.
fgetc_cons() should wait (it is meant for the normal text typing, here a buffered keyboard wuold fit perfectly).
OK, getk() will use "SKEY?", and fgetc_cons() will use "KEY" then. When there will be a nightly build with these implementations? :)
stefano wrote:There's still few basic funtions which could be implemented, a minimal timer/clock
How is this supposed to be implemented? It seems to me that the periodic interruption ($0038) should be redirected to a interrupt-counting routine before doing its usual work. Or is there any other way?
stefano wrote:and the joystick() function will permit to run almost all the existing demos.
Is this right?

Code: Select all

; Game device library for the CCE MC-1000.
; Emerson Jos? Silveira da Costa - 2013-03-11.
;
; ---FUDLR  Stick bit pattern (nc, nc, nc, fire, up, down, left, right)
;

        XLIB        joystick

.joystick

        ; __FASTCALL__ : joystick no. in HL.
        ; 1 = Player 1's joystick.
        ; 2 = Player 2's joystick.

        ld        a,l
        cp        1
        jr        z,j_p1
        cp        2
        jr        z,j_p2
        jr        j_nop

.j_p1
        ; Player 1's joystick.
        ld        b,@11111101        ; Keyboard line selector.
        ; Keyboard line data: --FRLDU-.
        ld        c,@00100000        ; Fire key position.
        jr        j_p

.j_p2
        ; Player 2's joystick.
        ld        b,@11111110        ; Keyboard line selector.
        ; Keyboard line data: ---RLDUF.
        ld        c,@00000001        ; Fire key position.

.j_p
        di
        ld        a,14        ; Select AY-3-8910's IOA register.
        out        ($20),a
        ld        a,b        ; Select keyboard line via IOA.
        out        ($60),a
        ld        a,15        ; Select AY-3-8910's IOB register.
        out        ($20),a
        in        a,($40)        ; Get keyboard line data via IOB.
        ei
        cpl        ; In original data bits 0 represent keypress. Invert.
        ld        b,a
        ; Transfer fire to bit 0.
        or        c        ; Fire pressed?
        jr        z,j_nofire
        set        0,b
        jr        j_reverse
.j_nofire
        res        0,b
.j_reverse
        ; Register B now contains ---RLDUF.
        ; Transfer to A in reverse order: ---FUDLR.
        xor        a
        rr        b
        rla
        rr        b
        rla
        rr        b
        rla
        rr        b
        rla
        rr        b
        rla
        jr        .j_done

.j_nop
        xor        a
.j_done
        ld        l,a
        ld        h,0
        ret
stefano wrote:Sound is a parallel point, there are two ways to make an old computer play: by chip based sound generators or with a bit banging loop on a known output (like the ZX Spectrum speaker).. the code for this latter approach is ready made, it is just a matter of finding a bit and a port (or memory location) which will produce an audible click. On the TI calculators it has been achieved by making the IR port interfering with a long wave radio receiver.
A good low level API for the YM chipset is something to be designed, though some basic function exists for targets like the MSX or Sega Master System.
MC-1000 uses the same sound co-processor as MSX, using these I/O ports:
* $20 (REG): Selects AY-3-8910's register.
* $40 (RD): Reads AY-3-8910's register selected.
* $60 (WR): Writes to AY-3-8910's register selected.

So maybe it's not a hard job to adapt MSX's sound-related routines to MC-1000.

There's also a trick in AY-3-8910 where you can produce clicks, and then the ZX-style routines could work in MC-1000 (and MSX and so on) too. The trick consists in making a channel silent via the "mixer" register. The "silent" channel will have a level non-zero wave that can be shaped by changing the channel's volume (0~15). Alternating the channel volume from 0 to 15 and vice-versa within a loop, we can get the same effect as with ZX Spectrum speaker.

How could I help with any of these?
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

Wow, lots of infos !
Let's keep the sound apart temporairly.
Is there a 'frames' counter in the interrupt routines which could act as a timer ?
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

The HEAD trick did not help, nor a more drastic attempt to initialize the system variables.
But I get different effects depending on how the WAVe is generated.
I tried with the 'dstar.c' demo:
zcc +mc1000 -lndos -create-app -Dspritesize=16 -Cz--audio -Cz--fast dstar.c
(adjust dstar.h if you want to use lowercase keys, or use the shift key for the capital 'Q', 'A', 'O', 'P' keys and move the ball).
It works on the MESS emulator.
If you remove the "-Cz--fast" option and try again, then we fall into the keyboard scanning problem.
odd, isn't it ?

I tested it all after changing getk() and fgetc_cons() as you suggested, but I think that the results will be roughly the same.
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

Ensjio, perhaps you could try generating the audio file with your tool, starting from the 'bin' or the 'cas' file.
In the 'cas' file the filename is included, the BIN is cleaner.
ensjo
Member
Posts: 15
Joined: Sat Mar 09, 2013 2:14 pm

Post by ensjo »

stefano wrote:Is there a 'frames' counter in the interrupt routines which could act as a timer ?
No, the CPU receives no information about the video processor, and keeps no track of its activity. The periodic interruption at $0038 controls the timing for the music in games and for the SOUND instruction in BASIC. That's why I think it's the best candidate for providing clock-ish capabilities to MC-1000.
stefano wrote:The HEAD trick did not help, nor a more drastic attempt to initialize the system variables.
How was that done? You set HEAD to $ff during the program startup, or what?
stefano wrote:But I get different effects depending on how the WAVe is generated.
I tried with the 'dstar.c' demo:
zcc +mc1000 -lndos -create-app -Dspritesize=16 -Cz--audio -Cz--fast dstar.c
(adjust dstar.h if you want to use lowercase keys, or use the shift key for the capital 'Q', 'A', 'O', 'P' keys and move the ball).
It works on the MESS emulator.
If you remove the "-Cz--fast" option and try again, then we fall into the keyboard scanning problem.
odd, isn't it ?
Eh? I compiled the program with and without the -Cz--fast option, LOADed them both in MESS, and the result was the same. I didn't change dstar.h, so I had to use <SHIFT>+<Q> etc. to move the ball, but all the commands were working fine in both compilations. What happens in your machine exactly?
stefano wrote:Ensjio, perhaps you could try generating the audio file with your tool, starting from the 'bin' or the 'cas' file.
In the 'cas' file the filename is included, the BIN is cleaner.
My tool uses your "cas" format. The wav generated compiled OK, LOADed OK, ran OK, with no difference from z88dk's original wav.
ensjo
Member
Posts: 15
Joined: Sat Mar 09, 2013 2:14 pm

Post by ensjo »

Stefano, looking at some programs code, I found that there are compiler directives like:

Code: Select all

#ifdef __SPECTRUM__
   ...
#endif
How do we get that for MC-1000? Where would be "__MC1000__" defined? Is it tacitally defined when we put "+mc1000" in the zcc command line?
ensjo
Member
Posts: 15
Joined: Sat Mar 09, 2013 2:14 pm

Post by ensjo »

As for the "1-bit" sound routines, here's how they probably could be in MC-1000:

Code: Select all

.bit_open
        ;di
        ld        a,$07 ; Select PSG's mixer register.
        out        ($20),a
        ld        a,$7f ; All channels "silent"
                      ; (and MC-1000's specific settings
                      ; for IOA [output] and IOB [input]).
        out        ($60),a
        ret

.bit_click
        ; "Silent" channels retain a continuous non-zero
        ; signal which can be shaped by their respective
        ; volume registers.
        ld        a,8 ; Select amplitude register for channel A.
        out        ($20),a
        ld        a,15 ; Fixed amplitude & volume = 15.
        out        ($60),a
        ; nop ; Give it some time?
        ; nop
        ; ...
        xor        a ; Fixed amplitude & volume = 0.
        out        ($60),a
        ret

.bit_close
        ;ei
        ret
Last edited by ensjo on Wed Mar 13, 2013 1:10 pm, edited 1 time in total.
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

> How do we get that for MC-1000? Where would be "__MC1000__" defined? Is it tacitally defined when we put "+mc1000" in the zcc command line?

Yes it is. By tradition both the MC1000 and __MC1000__ definitions are declared for the libraries and programmers' convenience. In Example I'm using it in 'games.h' to match with your joystick driver.
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

> My tool uses your "cas" format. The wav generated compiled OK, LOADed OK, ran OK, with no difference from z88dk's original wav.

Well, it is cool news :)
Thank you very much for repeating the test. Can the real MC1000 load also the WAV generated with the FAST option now? I'm so curious :rolleyes:

My attempts to tune the keyboard were all made on {z88dk}/lib/mc1000_crt0.asm
I tried to comment out the two lines before '.clgret' to see if the trick to disable the cursor flashing when the HRG was activated was causing problems (no success):

Code: Select all

;        ld        hl,clgret
;        ld        ($f7),hl        ; cursor flashing and positioning routine

.clgret
        ret
I tried to insert various initialization commants at the very beginning, ATM my CRT0 looks like this:

Code: Select all

start:

        ;CALL $CEBA
        ;LD ($0128),A
        ;LD ($0357),A
        ;LD ($0360),A
        ;LD ($0358),A
        ;LD ($0352),A
        ;LD ($0361),A
        ;DEC A
        ;LD ($0106),A
        ;LD ($0353),A
            ;LD ($106),a
                ;ld                hl,$106
                ;ld                (hl),255        ; disable gaming mode
                ;ld                (hl),0
I'm posting few lib updates soon, including your Joystick function which I could not make run correctly, but I'm not sure where the problem might be.. it could be a problem with the keyboard emulation I'm having wthe latest MESS build or who ever knows...
ensjo
Member
Posts: 15
Joined: Sat Mar 09, 2013 2:14 pm

Post by ensjo »

stefano wrote:Can the real MC1000 load also the WAV generated with the FAST option now?
Yes, both files LOADed and ran OK. :)
stefano wrote:My attempts to tune the keyboard were all made on {z88dk}/lib/mc1000_crt0.asm
I think HEAD should not be automatically changed to $ff. It should be left to the programmer to decide if he wants to use the "game mode" or not. We could have a function like "set_game_mode(true/false)" to be called by the program, what do you think?
stefano wrote:I'm posting few lib updates soon, including your Joystick function which I could not make run correctly
When it is available in the nightly build I'll try to use it and find the problem.
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

Available today, togheter with the sound prototype ;)
There's a last minute correction which today is out of the latest package, just edit "libsrc/games/games.inc" and fix as follows:

Code: Select all

IF FORmc1000
        defc sndbit_port   = 96                        ; $60 = YM amplitude register
        defc sndbit_bit    = 3                        ; More significant bit
        defc sndbit_mask   = 8
ENDIF
Sound is produced by MESS at a very low volume: perhaps I should stick the A channel to HIGH position in some way ?
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

Veri basic timing stuff is ready, should be packaged tonight as usual.
Try the {z88dk}/examples/graphics/clock.c demonstration program

zcc +mc1000 -lndos -create-app -DDETAILED -llib3d -Cz--audio -Cz--fast clock.c
ensjo
Member
Posts: 15
Joined: Sat Mar 09, 2013 2:14 pm

Post by ensjo »

Stefano, I tested {z88dk}/examples/sound/clicktest.c in my real MC-1000. I sent the recorded sound to you via e-mail.

The volume doesn't seem to be low, but the sound produced is very noisy. :(

I opened the file in a wave editor and, strangely, the wave generated switches among various volume values. We should have only 2 volume levels (0 and 15). It seems that another sound is being generated somethere else and is interfering. :o

Here's an example of the kind of effect we should get. I have experimented with the "1-bit" sound generation before to create a ZX Spectrum-like tape reading effect:

http://www.youtube.com/watch?feature=pl ... 6Tg#t=114s
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

bit_click() is dirty by design, so it is not your best choice to test the sound.
Its only scope is to add some kind of buzz during the main game loop.
Are you experimenting the same problem with the other examples ?
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

I also forgot to say somethink about the clock() example. Its timing (CLOCKS_PER_SEC) is set in "time.h", I assumed the interrupt is called 60 times per second, but I read about your studies on it, so it may be slightly wrong.
The bit_play() function, to play music, is in turn tuned basing on the CPU clock.
The divide factor (BEEP_TSTATES) is defined in sound.h
ensjo
Member
Posts: 15
Joined: Sat Mar 09, 2013 2:14 pm

Post by ensjo »

Yesterday my P2-P2 cable stopped working (disrupted?) and I couldn't do any more LOADing tests in the real MC-1000. :P I'll seek to buy a new one today.
stefano
Well known member
Posts: 2137
Joined: Mon Jul 16, 2007 7:39 pm

Post by stefano »

That's strange, I hope it is just the cable :/
ensjo
Member
Posts: 15
Joined: Sat Mar 09, 2013 2:14 pm

Post by ensjo »

Couldn't get a new cable yet. Electronics stores are out of my route to work and back home, and other more generic stores I have happened to visit didn't have it. :-(

Meanwhile, tests will have to be made in MESS. (I.e., sound tests suspended until then).

I have tested the clock program in MESS saturday night. The seconds pointer was too slow in (what seemed to me) the first "minute". Then, it switched to a fast pace, (about 50%?) shorter than 1 real second.

Is there a good example program to test the joystick() function?

[EDIT]
I got the cable! :-) Made another test with bit_click() and will send you the sound file now, Stefano.
[/EDIT]
Last edited by ensjo on Tue Mar 19, 2013 2:08 am, edited 1 time in total.
ensjo
Member
Posts: 15
Joined: Sat Mar 09, 2013 2:14 pm

Post by ensjo »

Hello!!! Good to see the forums are up again.

Stefano, I changed joystick.asm as I told you by e-mail and microman worked O.K. Here is a video of it running:

http://www.youtube.com/watch?v=i1sAPT6IZ3U

Here is the full listing of libsrc/games/mc1000/joystick.asm:

Code: Select all

; Game device library for the CCE MC-1000.
; Emerson Jos? Silveira da Costa - 2013-03-11.
;
; ---FUDLR  Stick bit pattern (nc, nc, nc, fire, up, down, left, right)
;

    XLIB    joystick

.joystick

    ; __FASTCALL__ : joystick no. in HL.
    ; 1 = Player 1's joystick.
    ; 2 = Player 2's joystick.

    ld    a,l
    cp    1
    jr    z,j_p1
    cp    2
    jr    z,j_p2
    jr    j_nop

.j_p1
    ; Player 1's joystick.
    ld    b,@11111101    ; Keyboard line selector.
    ; Keyboard line data: --FRLDU-.
    ld    c,@00100000    ; Fire key position.
    jr    j_p

.j_p2
    ; Player 2's joystick.
    ld    b,@11111110    ; Keyboard line selector.
    ; Keyboard line data: ---RLDUF.
    ld    c,@00000001    ; Fire key position.

.j_p
    di
    ld    a,14    ; Select AY-3-8910's IOA register.
    out    ($20),a
    ld    a,b    ; Select keyboard line via IOA.
    out    ($60),a
    ld    a,15    ; Select AY-3-8910's IOB register.
    out    ($20),a
    in    a,($40)    ; Get keyboard line data via IOB.
    ei
    cpl    ; In original data bits 0 represent keypress. Invert.
    ld    b,a
    ; Transfer fire to bit 0.
    and   c    ; Fire pressed?
    jr    z,j_nofire
    set    0,b
    jr    j_reverse
.j_nofire
    res    0,b
.j_reverse
    ; Register B now contains ---RLDUF.
    ; Transfer to A in reverse order: ---FUDLR.
    xor    a
    rr    b
    rla
    rr    b
    rla
    rr    b
    rla
    rr    b
    rla
    rr    b
    rla
    jr    j_done

.j_nop
    xor    a
.j_done
    ld    l,a
    ld    h,0
    ret
Adv_a also ran O.K., with images and all. For those who access Facebook, I just posted pictures of microman and adv_a: http://www.facebook.com/media/set/?set= ... 881&type=1.

One problem with adv_a: the RUBOUT (backspace) key still isn't working right, it doesn't erase the character to the left.
Post Reply