z80:Answers 5

From Learn @ Cemetech
Jump to: navigation, search

Topic questions

1. ASCII is the American Standard Code for Information Interchange. Though TI uses a different standard than the currently accepted computer standard, it functions in a similar function: data represented by numbers point to an offset that holds a representation of the character.

2. GetKey will wait for a key to be pressed to return a value, and GetCSC will check to see if a key has been pressed, and if so, return that value. Also, GetKey utilizes the shift operators ([2nd] and [Alpha]) while getCSC returns a scan code for those two keys.

Code Fragments

3. Write a short program to display "HELLO WORLD" diagonally

   ;here's one that looks decent
    ld hl,0
    ld (pencol),hl
    ld hl,txt
   loop:
    ld a,(hl)
    or a
    jr z,stop
    bcall(_vPutmap)
    inc hl
    push hl
    ld hl,(pencol)
    inc h
    inc h
    inc h
    ld (pencol),hl
    pop hl
    jr loop
   stop:
    bcall(_GetKey)
    ret
   txt:
    .db "HELLO WORLD",0

4. Write a program that moves a dot around the screen when the user presses an arrow key. (hint: Use the _IPoint, or see sprites for a better method)

   ;sorry, no comments
    bcall(_ClrLCDFull)
    set fullScrnDraw, (IY + apiFlg4)
    bcall(_runindicoff)
    ld bc,$3232
    ld d,1
    push bc
    bcall(_IPoint)
   keyloop:
    bcall(_GetCSC)
    cp skup
    jr z,moveUp
    cp skdown
    jr z,movedown
    cp skleft
    jr z,moveleft
    cp skright
    jr z,moveright
    cp skclear
    jr z,quit
    jr keyloop
    
   quit:
    pop bc
    bcall(_ClrLCDFull)
    ret
    
   movedown:
    ld d,0
    pop bc
    push bc
    bcall(_IPoint)
    pop bc
    ld a,c
    or a
    jr z,$+3
    dec a
    ld c,a
    push bc
    ld d,1
    bcall(_IPoint)
    jr keyloop
   
   moveup:
    ld d,0
    pop bc
    push bc
    bcall(_IPoint)
    pop bc
    ld a,c
    cp 63
    jr z,$+3
    inc a
    ld c,a
    push bc
    ld d,1
    bcall(_IPoint)
    jr keyloop
   
   moveleft:
    ld d,0
    pop bc
    push bc
    bcall(_IPoint)
    pop bc
    ld a,b
    or a
    jr z,$+3
    dec a
    ld b,a
    push bc
    ld d,1
    bcall(_IPoint)
    jr keyloop
   
   moveright:
    ld d,0
    pop bc
    push bc
    bcall(_IPoint)
    pop bc
    ld a,b
    cp 95
    jr z,$+3
    inc a
    ld b,a
    push bc
    ld d,1
    bcall(_IPoint)
    jr keyloop


Programming Errors

5. Completely correct

6. Two errors: First of all, ionfastcopy uses plotsscreen instead of appbackupscreen, and the way it defines the buffer is running through the rows, as opposed to the columns. Even if plotsscreen was used, you would have an interesting line pattern drawn instead of an 8*8 box (feel free to try it).