[A86] TI-86 Menu Routine


[Next][Index][Thread]

[A86] TI-86 Menu Routine




Hey All!
    I finally got my menu routine working.  Here it is in case any of 
y'all want to try it out.  All it does is output the menu bar and the 
text you supply on the screen.  When you jump to Do_Menu (you have to 
jump, otherwise this function will get really messed up), the stack must 
look like this:

Top:    000x           x is the number of entries there are
           eeee           eeee is the address of the text that will go 
in slot #5
           dddd          dddd is the address of the text that will go in 
slot #4
           cccc           cccc is the address of the text that will go 
in slot #3
           bbbb          bbbb is the address of the text that will go in 
slot #2
           aaaa           aaaa is the address of the text that will go 
in slot #1
           rrrr             rrrr is the address where the function will 
go when it is finished

----------------------------------------------------------------------
|    Slot#        |   Slot#         |   Slot#         |    Slot#        
|     Slot#       |
|       1           |       2           |       3           |      4    
        |        5          |

This function does not jump anywhere based on what keys the user 
presses.  You must supply that loop.

I hope y'all dont think I'm stupid for doing this, and if you guys find 
any bugs, or have any suggestions, I'm always available at 
spacex@williams-net.org.

Thanks!
Michael Williams

#include "ti86asm.inc"

.org _asm_exec_ram

  call _clrScrn
  ld hl,Post
  push hl
  ld hl,Text1
  push hl
  ld hl,Text2
  push hl
  ld hl,Text3
  push hl
  ld hl,Text4
  push hl
  ld hl,Text5
  push hl
  ld hl,$0005
  push hl
  jp Do_Menu
Post:
  call _getkey
  ret

Text1:
.db "This",0
Text2:
.db "Finally",0
Text3:
.db "Does",0
Text4:
.db "Works",0
Text5:
.db "!!!!!!!",0


Do_Menu:
  call Do_Menu_Bar
  pop bc
  ld b,c
Loop:
  pop hl
  call WriteText
  djnz Loop
  ret

WriteText:
  push bc
  ld c,$03
  ld a,b
  cp $01
  jp z,A1
  cp $02
  jp z,A2
  cp $03
  jp z,A3
  cp $04
  jp z,A4
  cp $05
  jp z,A5
  ret

A1:
  ld a,c
  jp Cont
A2:
  ld a,c
  add a,$19
  jp Cont
A3:
  ld a,c
  add a,$32
  jp Cont
A4:
  ld a,c
  add a,$4B
  jp Cont
A5:
  ld a,c
  add a,$64
  jp Cont
Cont:
  ld c,a
  ld b,$3A
  call CutString
  add a,0
  rr a
  add a,c
  ld c,a
  ld (_penCol),bc
  call _vputs
  pop bc
  ret
 

CutString:
  push hl
  push bc
  dec hl
  ld b,$00
  ld c,$15
CS_Loop:
  inc hl
  ld a,(hl)
  cp $00
  jp z,CutNow
  cp $01
  jp z,Minus5
  cp $02
  jp z,Minus5
  cp $03
  jp z,Minus5
  cp $04
  jp z,Minus5
  cp $05
  jp z,Minus4
  cp $06
  jp z,Minus5
  cp $07
  jp z,Minus5
  cp $08
  jp z,Minus4
  cp $09
  jp z,Minus4
  cp $0A
  jp z,Minus5
  cp $0B
  jp z,Minus5
  cp $0C
  jp z,Minus5
  cp $0D
  jp z,Minus5
  cp $0E
  jp z,Minus5
  cp $0F
  jp z,Minus5
  cp $10
  jp z,Minus4
  cp $11
  jp z,Minus5
  cp $12
  jp z,Minus4
  cp $13
  jp z,Minus4
  cp $14
  jp z,Minus5
  cp $15
  jp z,Minus5
  cp $16
  jp z,Minus4
  cp $17
  jp z,Minus5
  cp $18
  jp z,Minus6
  cp $19
  jp z,Minus5
  cp $1A
  jp z,Minus3
  cp $1B
  jp z,Minus4
  cp $1C
  jp Z,Minus5
  cp $1D
  jp z,Minus6
  cp $1E
  jp z,Minus4
  cp $1F
  jp z,Minus4
  cp $20
  jp z,Minus1
  cp $21
  jp z,Minus2
  cp $22
  jp z,Minus4
  cp $23
  jp z,Minus6
  cp $24
  jp z,Minus6
  cp $25
  jp z,Minus4
  cp $26
  jp z,Minus5
  cp $27
  jp z,Minus2
  cp $28
  jp z,Minus3
  cp $29
  jp z,Minus3
  cp $2A
  jp z,Minus6
  cp $2B
  jp z,Minus4
  cp $2C
  jp z,Minus3
  cp $2D
  jp z,Minus4
  cp $2E
  jp z,Minus2
  cp $2F
  jp z,Minus4
  cp $30
  jp z,Minus4
  cp $31
  jp z,Minus4
  cp $32
  jp z,Minus4
  cp $33
  jp z,Minus4
  cp $34
  jp z,Minus4
  cp $35
  jp z,Minus4
  cp $36
  jp z,Minus4
  cp $37
  jp z,Minus4
  cp $38
  jp z,Minus4
  cp $39
  jp z,Minus4
  cp $3A
  jp z,Minus2
  cp $3B
  jp z,Minus3
  cp $3C
  jp z,Minus4
  cp $3D
  jp z,Minus4
  cp $3E
  jp z,Minus4
  cp $3F
  jp z,Minus4
  cp $40
  jp z,Minus5
  cp $41
  jp z,Minus4
  cp $42
  jp z,Minus4
  cp $43
  jp z,Minus4
  cp $44
  jp z,Minus4
  cp $45
  jp z,Minus4
  cp $46
  jp z,Minus4
  cp $47
  jp z,Minus5
  cp $48
  jp z,Minus4
  cp $49
  jp z,Minus2
  cp $4A
  jp z,Minus4
  cp $4B
  jp z,Minus5
  cp $4C
  jp z,Minus4
  cp $4D
  jp z,Minus6
  cp $4E
  jp z,Minus5
  cp $4F
  jp z,Minus4
  cp $4F
  jp z,Minus4
  cp $50
  jp z,Minus4
  cp $51
  jp z,Minus5
  cp $52
  jp z,Minus4
  cp $53
  jp z,Minus4
  cp $54
  jp z,Minus4
  cp $55
  jp z,Minus4
  cp $56
  jp z,Minus4
  cp $57
  jp z,Minus6
  cp $58
  jp z,Minus4
  cp $59
  jp z,Minus4
  cp $5A
  jp z,Minus4
  cp $5B
  jp z,Minus3
  cp $5C
  jp z,Minus4
  cp $5D
  jp z,Minus3
  cp $5E
  jp z,Minus4
  cp $5F
  jp z,Minus4
  cp $60
  jp z,Minus3
  cp $61
  jp z,Minus4
  cp $62
  jp z,Minus4
  cp $63
  jp z,Minus4
  cp $64
  jp z,Minus4
  cp $65
  jp z,Minus4
  cp $66
  jp z,Minus3
  cp $67
  jp z,Minus4
  cp $68
  jp z,Minus4
  cp $69
  jp z,Minus2
  cp $6A
  jp z,Minus4
  cp $6B
  jp z,Minus4
  cp $6C
  jp z,Minus3
  cp $6D
  jp Z,Minus6
  cp $6E
  jp z,Minus4
  cp $6F
  jp z,Minus4
  cp $70
  jp z,Minus4
  cp $71
  jp z,Minus4
  cp $72
  jp z,Minus4
  cp $73
  jp z,Minus3
  cp $74
  jp z,Minus3
  cp $75
  jp z,Minus4
  cp $76
  jp z,Minus4
  cp $77
  jp z,Minus6
  cp $78
  jp z,Minus4
  cp $79
  jp z,Minus4
  cp $7A
  jp z,Minus4
  cp $7B
  jp z,Minus4
  cp $7C
  jp z,Minus2
  cp $7D
  jp Z,Minus4
  cp $7E
  jp z,Minus4
  cp $7F
  jp z,Minus4
  cp $80
  jp z,Minus4
  cp $81
  jp z,Minus3
  cp $82
  jp z,Minus4
  cp $83
  jp z,Minus4
  cp $84
  jp z,Minus4
  cp $85
  jp z,Minus4
  cp $86
  jp z,Minus4
  cp $87
  jp z,Minus4
  cp $88
  jp z,Minus4
  cp $89
  jp z,Minus4
  cp $8A
  jp z,Minus4
  cp $8B
  jp z,Minus4
  cp $8C
  jp z,Minus4
  cp $8D
  jp Z,Minus4
  cp $8E
  jp z,Minus4
  cp $8F
  jp z,Minus4
  cp $90
  jp z,Minus4
  cp $91
  jp z,Minus4
  cp $92
  jp z,Minus4
  cp $93
  jp z,Minus4
  cp $94
  jp z,Minus4
  cp $95
  jp z,Minus4
  cp $96
  jp z,Minus4
  cp $97
  jp z,Minus4
  cp $98
  jp z,Minus4
  cp $99
  jp z,Minus4
  cp $9A
  jp z,Minus2
  cp $9B
  jp z,Minus2
  cp $9C
  jp z,Minus2
  cp $9D
  jp Z,Minus2
  cp $9E
  jp z,Minus2
  cp $9F
  jp z,Minus2
  cp $A0
  jp z,Minus2
  cp $A1
  jp z,Minus2
  cp $A2
  jp z,Minus4
  cp $A3
  jp z,Minus4
  cp $A4
  jp z,Minus4
  cp $A5
  jp z,Minus4
  cp $A6
  jp z,Minus4
  cp $A7
  jp z,Minus4
  cp $A8
  jp z,Minus4
  cp $A9
  jp z,Minus4
  cp $AA
  jp z,Minus4
  cp $AB
  jp z,Minus4
  cp $AC
  jp z,Minus4
  cp $AD
  jp Z,Minus4
  cp $AE
  jp z,Minus4
  cp $AF
  jp z,Minus4
  cp $B0
  jp z,Minus4
  cp $B1
  jp z,Minus4
  cp $B2
  jp z,Minus4
  cp $B3
  jp z,Minus4
  cp $B4
  jp z,Minus5
  cp $B5
  jp z,Minus5
  cp $B6
  jp z,Minus3
  cp $B7
  jp z,Minus3
  cp $B8
  jp z,Minus4
  cp $B9
  jp z,Minus4
  cp $BA
  jp z,Minus2
  cp $BB
  jp z,Minus4
  cp $BC
  jp z,Minus4
  cp $BD
  jp Z,Minus4
  cp $BE
  jp z,Minus6
  cp $BF
  jp z,Minus4
  cp $C0
  jp z,Minus4
  cp $C1
  jp z,Minus4
  cp $C2
  jp z,Minus4
  cp $C3
  jp z,Minus5
  cp $C4
  jp z,Minus6
  cp $C5
  jp z,Minus4
  cp $C6
  jp z,Minus4
  cp $C7
  jp z,Minus4
  cp $C8
  jp z,Minus4
  cp $C9
  jp z,Minus6
  cp $CA
  jp z,Minus6
  cp $CB
  jp z,Minus4
  cp $CC
  jp z,Minus4
  cp $CD
  jp Z,Minus4
  cp $CE
  jp z,Minus6
  cp $CF
  jp z,Minus4
  cp $D0
  jp z,Minus3
  cp $D1
  jp z,Minus4
  cp $D2
  jp z,Minus3
  cp $D3
  jp z,Minus4
  cp $D4
  jp z,Minus4
  cp $D5
  jp z,Minus4
  cp $D6
  jp z,Minus4
  jp CutNow
 
CutNow:
  ld (hl),$00
  ld a,c
  pop bc
  pop hl
  ret

Minus1:
  ld a,c
  ld b,$01
  jp Minus

Minus2:
  ld a,c
  ld b,$02
  jp Minus

Minus3:
  ld a,c
  ld b,$03
  jp Minus

Minus4:
  ld a,c
  ld b,$04
  jp Minus

Minus5:
  ld a,c
  ld b,$05
  jp Minus

Minus6:
  ld a,c
  ld b,$06
  jp Minus

Minus:
  cp b
  jp c,CutNow
  sub b
  ld b,$00
  ld c,a
  jp CS_Loop

Do_Menu_Bar:
  push hl
  push de
  ld a,%11111111
  ld hl,$FF80
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  inc hl
  ld (hl),a
  ld de,$0010
  ld a,%11111110
  ld hl,$FF8f
  ld (hl),a
  add hl,de
  ld (hl),a

  ld a,%00000000
  ld hl,$FFA1
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld hl,$FFA2
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld hl,$FFA4
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld hl,$FFA5
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld hl,$FFA7
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld hl,$FFA8
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld hl,$FFAA
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld hl,$FFAB
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld hl,$FFAD
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld hl,$FFAE
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld a,%11000000
  ld hl,$FFA0
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld a,%01100000
  ld hl,$FFA3
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld a,%00110000
  ld hl,$FFA6
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld a,%00011000
  ld hl,$FFA9
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld a,%00001100
  ld hl,$FFAC
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  ld a,%00000110
  ld hl,$FFAF
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  add hl,de
  ld (hl),a
  pop de
  pop hl
  ret

.end






Follow-Ups: