ce-programming / cemu Goto Github PK
View Code? Open in Web Editor NEWThird-party TI-84 Plus CE / TI-83 Premium CE emulator, focused on developer features
Home Page: https://ce-programming.github.io/CEmu
License: Other
Third-party TI-84 Plus CE / TI-83 Premium CE emulator, focused on developer features
Home Page: https://ce-programming.github.io/CEmu
License: Other
This causes some games and programs that operate in higher bpp modes (even 16bpp v 8bpp) to run much too quickly.
This is probably not explicitly due to anything special about the OS's low power mode, just the emulator running too fast and metaphorically tripping over its own feet somehow.
There may simply be a way to fix something so that the emulator can run at these insane speeds without failing. But if not, a workaround could be to still perform throttling when "disabled," but limit to a very high factor, like 10,000%.
If you would be so kind to commit some keypad changes, that would be fantastic :)
Issue #15 mentions a set of use cases for cooperation inside the emulated environment; there's also a set of use cases for cooperation outside the emulated environment.
Here are several suggestions:
Existing practices and code bases in community code bases include:
Other technical options include, but are far from limited to:
Of course, I'm biased by having been the maintainer (not the creator) of both libti* and TIEmu for 6 years and a half. But libti* stack, where I'm focusing instead of the unmaintainable TIEmu mess, is the community's GPL'ed reference implementation of a calculator <-> computer communication stack. While it's not perfect, it has a significant number of good things, I / Benjamin Moody / Jonimus (mainly, plus contributors) have been improving it a lot over time, and it's not wise to shun it entirely.
Like in issue #15, more brainstorming is needed, then we'll be able to create multiple, more focused issues :)
In issue #17 , alberthdev mentioned Lua scripting for triggering operations on CEmu instances. This is the brainstorming issue for scripting front-ends on top of the IPC (issue #16 ); the technical choices for scripting will depend on (and perhaps slightly influence ?) the choices for the IPC mechanism.
Title describes what the issue is.
Here is the code:
.nolist
#include "includes\ti84pce.inc"
.list
.assume ADL=1
.org userMem-2
.db tExtTok,tAsm84CeCmp
_ClearVRAM equ 000374h
bufData equ vram+(320*240)
score equ pixelShadow2
size equ score+3
posX equ size+3
posY equ posX+3
table equ posY+3
newlineByte equ 0Dh
di
call _RunIndicOff
call _clearVRAM ; Set all of VRAM to $FF (white)
ld a,lcdbpp8
ld (mpLcdCtrl),a
ld hl,50
ld (size),hl
ld hl,0
ld (score),hl
create1555Palette:
ld hl,mpLcdPalette ; MMIO address of LCD Palette
ld b,0
_cp1555Loop:
ld d,b
ld a,b
and a,%11000000
srl d
rra
ld e,a
ld a,%00011111
and a,b
or a,e
ld (hl),a
inc hl
ld (hl),d
inc hl
inc b
jr nz,_cp1555Loop
drawFrame:
ld hl,DI_Mode ; Register for keypad mode
ld (hl),2 ; Set Single Scan mode
xor a,a
cp a,(hl) ; Wait for Idle mode
jr nz,drawFrame
ld a,(kbdG6)
bit kbitClear,a
jp nz,ExitPrgm
bit kBitEnter,a
jp nz,enterPressed
ld b,100
ld c,128
ld de,redCircle
call DrawSprite
push hl
push de
push bc
push af
;hl = cx, de = cy, bc = r, a = colour
ld hl,160
ld de,112
ld bc,(size)
ld a,$5E
call drawCircle
ld hl,(size)
ld bc,1
sbc hl,bc
ld (size),hl
ld bc,0
sbc hl,bc
call Z,refix
ld hl,155
ld (posX),hl
ld hl,110
ld (posY),hl
ld hl,(score)
call DispHL
pop af
pop bc
pop de
pop hl
call blitScreen
jr drawFrame
refix:
ld hl,50
ld (size),hl
ret
enterPressed:
ld hl,(score)
inc hl
ld (score),hl
ld a,(size)
cp 25
jp c,endGame
ld a,(size)
cp 34
jp nc,endGame
call refix
waitForEnter:
di
ld hl,DI_Mode ; Register for keypad mode
ld (hl),2 ; Set Single Scan mode
xor a,a
scan_wait:
cp a,(hl) ; Wait for Idle mode
jr nz,scan_wait
ld a,(kbdG6)
bit kBitEnter,a
jp Z,drawFrame
jp waitForEnter
endGame:
ld hl,155
ld (posX),hl
ld hl,110
ld (posY),hl
ld hl,$00
ld (BackColor),hl
ld hl,loseGame
call drawString
call blitScreen
jp ExitPrgm
ret
blitScreen:
ld hl,bufData
ld de,vRam
ld bc,(lcdWidth*lcdHeight)-1
ldir
ld (hl),$00
ld hl,bufData
ld bc,(320*240)-1
call _MemSet
ret
DispHL:
ld bc,-1000000
call Num1
ld bc,-100000
call Num1
ld bc,-10000
call Num1
ld bc,-1000
call Num1
ld bc,-100
call Num1
ld c,-10
call Num1
ld c,-1
Num1: ld a,'0'-1
Num2: inc a
add hl,bc
jr c,Num2
sbc hl,bc
call drawChar
ret
DrawSprite:
ld h,lcdWidth/2 ; hl=160
mlt hl ; 160*y
add hl,hl ; hl*2
add hl,bc ; add x
ld bc,bufData
add hl,bc ; offset vRam
ld a,(de) ; width
ld (SpriteWidthSMC),a
inc de
ld a,(de) ; height
inc de
ex de,hl
drawSpriteLoop:
SpriteWidthSMC: =$+1
ld bc,0
push de
ldir ; draw line
pop de
ex de,hl
ld bc,lcdWidth
add hl,bc ; move down
ex de,hl
dec a
jr nz,drawSpriteLoop
ret
ExitPrgm:
call _ClrScrn ; Clear the screen (white)
ld a,lcdbpp16
ld (mpLcdCtrl),a
call _DrawStatusBar
call _RunIndicOn
ei
ret
drawCircle:
di
; outline
; hl = cx, de = cy, bc = r, a = colour
;
push hl
push de
exx
pop de
pop hl
exx
push bc
push bc
pop de
pop hl
add hl,hl
push hl
pop bc
ld hl,3
or a
sbc hl,bc
push hl
pop ix
ld hl,0
drawCircle_Loop:
; hl = x, de = y, ix = d
;
or a
sbc hl,de
add hl,de
ret nc
ld c,ixh
bit 7,c
jr z,_dc_else
push hl
add hl,hl
add hl,hl
ld bc,6
add hl,bc
push hl
pop bc
add ix,bc
pop hl
jr _dc_end
_dc_else:
push hl
or a
sbc hl,de
add hl,hl
add hl,hl
ld bc,10
add hl,bc
push hl
pop bc
add ix,bc
pop hl
dec de
_dc_end:
call drawCircleSection
inc hl
jr drawCircle_Loop
drawCircleSection:
call drawCirclePoints
ex de,hl
call drawCirclePoints
ex de,hl
ret
drawCirclePoints:
push hl
exx
pop bc
push hl
add hl,bc ; xc+x
exx
push de
exx
pop bc
ex de,hl
push hl
add hl,bc
ex de,hl
call drawPixel ; yc+y
pop de
pop hl
exx
push hl
exx
pop bc
push hl
or a
sbc hl,bc ; xc-x
exx
push de
exx
pop bc
ex de,hl
push hl
add hl,bc
ex de,hl
call drawPixel ; yc+y
pop de
pop hl
exx
push hl
exx
pop bc
push hl
add hl,bc ; xc+x
exx
push de
exx
pop bc
ex de,hl
push hl
or a
sbc hl,bc
ex de,hl
call drawPixel ; yc-y
pop de
pop hl
exx
push hl
exx
pop bc
push hl
or a
sbc hl,bc ; xc-x
exx
push de
exx
pop bc
ex de,hl
push hl
or a
sbc hl,bc
ex de,hl
call drawPixel ; yc-y
pop de
pop hl
exx
ret
drawPixel:
; hl = x, de = y, a = colour (8-bit palette)
;
bit 7,h
ret nz ; return if negative
bit 7,d
ret nz ; return if negative
push bc
ld bc,320
or a
sbc hl,bc
add hl,bc
pop bc
ret nc ; return if offscreen
ex de,hl
push bc
ld bc,240
or a
sbc hl,bc
add hl,bc
pop bc
ret nc ; return if offscreen
ld h,160
mlt hl
add hl,hl
add hl,de
ld de,bufData
add hl,de
ld (hl),a
ret
drawString:
ld a,(hl)
inc hl
or a
ret z
cp newlineByte
ret z
call drawChar
jr drawString
drawChar:
ld bc,(posX)
push hl
push af
push de
push bc
push af
ld a,(posY)
push bc ; Save X
call compute8bpp
pop de ; de = Y
add hl,de ; Add X
pop af
push hl
or a
sbc hl,hl
ld l,a
add hl,hl
add hl,hl
add hl,hl
ex de,hl
ld hl,char000
add hl,de ; hl -> Correct Character
pop de ; de -> correct place to draw
ld b,8
_iloop:
push bc
ld c,(hl)
ld b,8
ex de,hl
push de
ld de,(ForeColor)
_i2loop:
ld (hl),d
rlc c
jr nc,+_
ld (hl),e
_:
inc hl
djnz _i2loop
NextL:
ld bc,320-8
add hl,bc
pop de
ex de,hl
inc hl
pop bc
djnz _iloop
pop bc
pop de
pop af ; character
cp 128
jr c,+_
xor a
_:
ld hl,CharSpacing
call _AddHLAndA
ld a,(hl) ; A holds the amount to increment per character
or a,a
sbc hl,hl
ld l,a
add hl,bc
push hl
pop bc
inc bc
ld (posX),bc
pop hl
ret
;Gets width of character into A
getPixelWidth:
cp 128
jr c,+_
xor a
_:
ld hl,CharSpacing
call _AddHLAndA
ld a,(hl) ; A holds the amount to increment per character
inc a
ret
compute8bpp:
ld de,320
call multDEA
SwapBufferLoc_SMC: =$+1
ld de,bufData
add hl,de
ret
multDEA:
ld b,8
or a
sbc hl,hl
add hl,hl
rlca
jr nc,$+3
add hl,de
djnz $-5
ret
redCircle:
.db 64,64
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00
.db $00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00
.db $00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00
.db $00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00
.db $00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00
.db $00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00
.db $00,$00,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$00,$00
.db $00,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$00
.db $00,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$00
.db $00,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$00
.db $00,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$00
.db $f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8
.db $f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8
.db $f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8
.db $f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8
.db $f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8
.db $f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8
.db $f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8
.db $f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8
.db $f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8
.db $f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8
.db $00,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$00
.db $00,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$00
.db $00,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$00
.db $00,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$00
.db $00,$00,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$00,$00
.db $00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$00,$00
.db $00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00
.db $00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00
.db $00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00
.db $00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00
.db $00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$fa,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
ForeColor:
.db $FF
BackColor:
.db $fa
loseGame:
.db "Game Over",0
CharSpacing:
; 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
.db 8,8,8,7,7,7,8,8,8,8,8,8,8,1,8,8
.db 7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8
.db 2,3,5,7,7,7,7,4,4,4,8,6,3,6,2,7
.db 7,6,7,7,7,7,7,7,7,7,2,3,5,6,5,6
.db 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
.db 7,7,7,7,8,7,7,7,7,7,7,4,7,4,7,8
.db 3,7,7,7,7,7,7,7,7,4,7,7,4,7,7,7
.db 7,7,7,7,6,7,7,7,7,7,7,6,2,6,7,7
.db 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ; Everything past this point will be 7.
Char000: .db $00,$00,$00,$00,$00,$00,$00,$00 ; .
Char001: .db $7E,$81,$A5,$81,$BD,$BD,$81,$7E ; .
Char002: .db $7E,$FF,$DB,$FF,$C3,$C3,$FF,$7E ; .
Char003: .db $6C,$FE,$FE,$FE,$7C,$38,$10,$00 ; .
Char004: .db $10,$38,$7C,$FE,$7C,$38,$10,$00 ; .
Char005: .db $38,$7C,$38,$FE,$FE,$10,$10,$7C ; .
Char006: .db $00,$18,$3C,$7E,$FF,$7E,$18,$7E ; .
Char007: .db $00,$00,$18,$3C,$3C,$18,$00,$00 ; .
Char008: .db $FF,$FF,$E7,$C3,$C3,$E7,$FF,$FF ; .
Char009: .db $00,$3C,$66,$42,$42,$66,$3C,$00 ; .
Char010: .db $FF,$C3,$99,$BD,$BD,$99,$C3,$FF ; .
Char011: .db $0F,$07,$0F,$7D,$CC,$CC,$CC,$78 ; .
Char012: .db $3C,$66,$66,$66,$3C,$18,$7E,$18 ; .
Char013: .db $3F,$33,$3F,$30,$30,$70,$F0,$E0 ; .
Char014: .db $7F,$63,$7F,$63,$63,$67,$E6,$C0 ; .
Char015: .db $99,$5A,$3C,$E7,$E7,$3C,$5A,$99 ; .
Char016: .db $80,$E0,$F8,$FE,$F8,$E0,$80,$00 ; .
Char017: .db $02,$0E,$3E,$FE,$3E,$0E,$02,$00 ; .
Char018: .db $18,$3C,$7E,$18,$18,$7E,$3C,$18 ; .
Char019: .db $66,$66,$66,$66,$66,$00,$66,$00 ; .
Char020: .db $7F,$DB,$DB,$7B,$1B,$1B,$1B,$00 ; .
Char021: .db $3F,$60,$7C,$66,$66,$3E,$06,$FC ; .
Char022: .db $00,$00,$00,$00,$7E,$7E,$7E,$00 ; .
Char023: .db $18,$3C,$7E,$18,$7E,$3C,$18,$FF ; .
Char024: .db $18,$3C,$7E,$18,$18,$18,$18,$00 ; .
Char025: .db $18,$18,$18,$18,$7E,$3C,$18,$00 ; .
Char026: .db $00,$18,$0C,$FE,$0C,$18,$00,$00 ; .
Char027: .db $00,$30,$60,$FE,$60,$30,$00,$00 ; .
Char028: .db $00,$00,$C0,$C0,$C0,$FE,$00,$00 ; .
Char029: .db $00,$24,$66,$FF,$66,$24,$00,$00 ; .
Char030: .db $00,$18,$3C,$7E,$FF,$FF,$00,$00 ; .
Char031: .db $00,$FF,$FF,$7E,$3C,$18,$00,$00 ; .
Char032: .db $00,$00,$00,$00,$00,$00,$00,$00 ;
Char033: .db $C0,$C0,$C0,$C0,$C0,$00,$C0,$00 ; !
Char034: .db $D8,$D8,$D8,$00,$00,$00,$00,$00 ; "
Char035: .db $6C,$6C,$FE,$6C,$FE,$6C,$6C,$00 ; #
Char036: .db $18,$7E,$C0,$7C,$06,$FC,$18,$00 ; $
Char037: .db $00,$C6,$CC,$18,$30,$66,$C6,$00 ; %
Char038: .db $38,$6C,$38,$76,$DC,$CC,$76,$00 ; &
Char039: .db $30,$30,$60,$00,$00,$00,$00,$00 ; '
Char040: .db $30,$60,$C0,$C0,$C0,$60,$30,$00 ; (
Char041: .db $C0,$60,$30,$30,$30,$60,$C0,$00 ; )
Char042: .db $00,$66,$3C,$FF,$3C,$66,$00,$00 ; *
Char043: .db $00,$30,$30,$FC,$FC,$30,$30,$00 ; +
Char044: .db $00,$00,$00,$00,$00,$60,$60,$C0 ; ,
Char045: .db $00,$00,$00,$FC,$00,$00,$00,$00 ; -
Char046: .db $00,$00,$00,$00,$00,$C0,$C0,$00 ; .
Char047: .db $06,$0C,$18,$30,$60,$C0,$80,$00 ; /
Char048: .db $7C,$CE,$DE,$F6,$E6,$C6,$7C,$00 ; 0
Char049: .db $30,$70,$30,$30,$30,$30,$FC,$00 ; 1
Char050: .db $7C,$C6,$06,$7C,$C0,$C0,$FE,$00 ; 2
Char051: .db $FC,$06,$06,$3C,$06,$06,$FC,$00 ; 3
Char052: .db $0C,$CC,$CC,$CC,$FE,$0C,$0C,$00 ; 4
Char053: .db $FE,$C0,$FC,$06,$06,$C6,$7C,$00 ; 5
Char054: .db $7C,$C0,$C0,$FC,$C6,$C6,$7C,$00 ; 6
Char055: .db $FE,$06,$06,$0C,$18,$30,$30,$00 ; 7
Char056: .db $7C,$C6,$C6,$7C,$C6,$C6,$7C,$00 ; 8
Char057: .db $7C,$C6,$C6,$7E,$06,$06,$7C,$00 ; 9
Char058: .db $00,$C0,$C0,$00,$00,$C0,$C0,$00 ; :
Char059: .db $00,$60,$60,$00,$00,$60,$60,$C0 ; ;
Char060: .db $18,$30,$60,$C0,$60,$30,$18,$00 ; <
Char061: .db $00,$00,$FC,$00,$FC,$00,$00,$00 ; =
Char062: .db $C0,$60,$30,$18,$30,$60,$C0,$00 ; >
Char063: .db $78,$CC,$18,$30,$30,$00,$30,$00 ; ?
Char064: .db $7C,$C6,$DE,$DE,$DE,$C0,$7E,$00 ; @
Char065: .db $38,$6C,$C6,$C6,$FE,$C6,$C6,$00 ; A
Char066: .db $FC,$C6,$C6,$FC,$C6,$C6,$FC,$00 ; B
Char067: .db $7C,$C6,$C0,$C0,$C0,$C6,$7C,$00 ; C
Char068: .db $F8,$CC,$C6,$C6,$C6,$CC,$F8,$00 ; D
Char069: .db $FE,$C0,$C0,$F8,$C0,$C0,$FE,$00 ; E
Char070: .db $FE,$C0,$C0,$F8,$C0,$C0,$C0,$00 ; F
Char071: .db $7C,$C6,$C0,$C0,$CE,$C6,$7C,$00 ; G
Char072: .db $C6,$C6,$C6,$FE,$C6,$C6,$C6,$00 ; H
Char073: .db $7E,$18,$18,$18,$18,$18,$7E,$00 ; I
Char074: .db $06,$06,$06,$06,$06,$C6,$7C,$00 ; J
Char075: .db $C6,$CC,$D8,$F0,$D8,$CC,$C6,$00 ; K
Char076: .db $C0,$C0,$C0,$C0,$C0,$C0,$FE,$00 ; L
Char077: .db $C6,$EE,$FE,$FE,$D6,$C6,$C6,$00 ; M
Char078: .db $C6,$E6,$F6,$DE,$CE,$C6,$C6,$00 ; N
Char079: .db $7C,$C6,$C6,$C6,$C6,$C6,$7C,$00 ; O
Char080: .db $FC,$C6,$C6,$FC,$C0,$C0,$C0,$00 ; P
Char081: .db $7C,$C6,$C6,$C6,$D6,$DE,$7C,$06 ; Q
Char082: .db $FC,$C6,$C6,$FC,$D8,$CC,$C6,$00 ; R
Char083: .db $7C,$C6,$C0,$7C,$06,$C6,$7C,$00 ; S
Char084: .db $FF,$18,$18,$18,$18,$18,$18,$00 ; T
Char085: .db $C6,$C6,$C6,$C6,$C6,$C6,$FE,$00 ; U
Char086: .db $C6,$C6,$C6,$C6,$C6,$7C,$38,$00 ; V
Char087: .db $C6,$C6,$C6,$C6,$D6,$FE,$6C,$00 ; W
Char088: .db $C6,$C6,$6C,$38,$6C,$C6,$C6,$00 ; X
Char089: .db $C6,$C6,$C6,$7C,$18,$30,$E0,$00 ; Y
Char090: .db $FE,$06,$0C,$18,$30,$60,$FE,$00 ; Z
Char091: .db $F0,$C0,$C0,$C0,$C0,$C0,$F0,$00 ; [
Char092: .db $C0,$60,$30,$18,$0C,$06,$02,$00 ; \
Char093: .db $F0,$30,$30,$30,$30,$30,$F0,$00 ; ]
Char094: .db $10,$38,$6C,$C6,$00,$00,$00,$00 ; ^
Char095: .db $00,$00,$00,$00,$00,$00,$00,$FF ; _
Char096: .db $C0,$C0,$60,$00,$00,$00,$00,$00 ; `
Char097: .db $00,$00,$7C,$06,$7E,$C6,$7E,$00 ; a
Char098: .db $C0,$C0,$C0,$FC,$C6,$C6,$FC,$00 ; b
Char099: .db $00,$00,$7C,$C6,$C0,$C6,$7C,$00 ; c
Char100: .db $06,$06,$06,$7E,$C6,$C6,$7E,$00 ; d
Char101: .db $00,$00,$7C,$C6,$FE,$C0,$7C,$00 ; e
Char102: .db $1C,$36,$30,$78,$30,$30,$78,$00 ; f
Char103: .db $00,$00,$7E,$C6,$C6,$7E,$06,$FC ; g
Char104: .db $C0,$C0,$FC,$C6,$C6,$C6,$C6,$00 ; h
Char105: .db $60,$00,$E0,$60,$60,$60,$F0,$00 ; i
Char106: .db $06,$00,$06,$06,$06,$06,$C6,$7C ; j
Char107: .db $C0,$C0,$CC,$D8,$F8,$CC,$C6,$00 ; k
Char108: .db $E0,$60,$60,$60,$60,$60,$F0,$00 ; l
Char109: .db $00,$00,$CC,$FE,$FE,$D6,$D6,$00 ; m
Char110: .db $00,$00,$FC,$C6,$C6,$C6,$C6,$00 ; n
Char111: .db $00,$00,$7C,$C6,$C6,$C6,$7C,$00 ; o
Char112: .db $00,$00,$FC,$C6,$C6,$FC,$C0,$C0 ; p
Char113: .db $00,$00,$7E,$C6,$C6,$7E,$06,$06 ; q
Char114: .db $00,$00,$FC,$C6,$C0,$C0,$C0,$00 ; r
Char115: .db $00,$00,$7E,$C0,$7C,$06,$FC,$00 ; s
Char116: .db $30,$30,$FC,$30,$30,$30,$1C,$00 ; t
Char117: .db $00,$00,$C6,$C6,$C6,$C6,$7E,$00 ; u
Char118: .db $00,$00,$C6,$C6,$C6,$7C,$38,$00 ; v
Char119: .db $00,$00,$C6,$C6,$D6,$FE,$6C,$00 ; w
Char120: .db $00,$00,$C6,$6C,$38,$6C,$C6,$00 ; x
Char121: .db $00,$00,$C6,$C6,$C6,$7E,$06,$FC ; y
Char122: .db $00,$00,$FE,$0C,$38,$60,$FE,$00 ; z
Char123: .db $1C,$30,$30,$E0,$30,$30,$1C,$00 ; {
Char124: .db $C0,$C0,$C0,$00,$C0,$C0,$C0,$00 ; |
Char125: .db $E0,$30,$30,$1C,$30,$30,$E0,$00 ; }
Char126: .db $76,$DC,$00,$00,$00,$00,$00,$00 ; ~
Char127: .db $00,$10,$38,$6C,$C6,$C6,$FE,$00 ; .
Char128: .db $7C,$C6,$C0,$C0,$C0,$D6,$7C,$30 ; .
Char129: .db $C6,$00,$C6,$C6,$C6,$C6,$7E,$00 ; .
Char130: .db $0E,$00,$7C,$C6,$FE,$C0,$7C,$00 ; .
Char131: .db $7E,$81,$3C,$06,$7E,$C6,$7E,$00 ; .
Char132: .db $66,$00,$7C,$06,$7E,$C6,$7E,$00 ; .
Char133: .db $E0,$00,$7C,$06,$7E,$C6,$7E,$00 ; .
Char134: .db $18,$18,$7C,$06,$7E,$C6,$7E,$00 ; .
Char135: .db $00,$00,$7C,$C6,$C0,$D6,$7C,$30 ; .
Char136: .db $7E,$81,$7C,$C6,$FE,$C0,$7C,$00 ; .
Char137: .db $66,$00,$7C,$C6,$FE,$C0,$7C,$00 ; .
Char138: .db $E0,$00,$7C,$C6,$FE,$C0,$7C,$00 ; .
Char139: .db $66,$00,$38,$18,$18,$18,$3C,$00 ; .
Char140: .db $7C,$82,$38,$18,$18,$18,$3C,$00 ; .
Char141: .db $70,$00,$38,$18,$18,$18,$3C,$00 ; .
Char142: .db $C6,$10,$7C,$C6,$FE,$C6,$C6,$00 ; .
Char143: .db $38,$38,$00,$7C,$C6,$FE,$C6,$00 ; .
Char144: .db $0E,$00,$FE,$C0,$F8,$C0,$FE,$00 ; .
Char145: .db $00,$00,$7F,$0C,$7F,$CC,$7F,$00 ; .
Char146: .db $3F,$6C,$CC,$FF,$CC,$CC,$CF,$00 ; .
Char147: .db $7C,$82,$7C,$C6,$C6,$C6,$7C,$00 ; .
Char148: .db $66,$00,$7C,$C6,$C6,$C6,$7C,$00 ; .
Char149: .db $E0,$00,$7C,$C6,$C6,$C6,$7C,$00 ; .
Char150: .db $7C,$82,$00,$C6,$C6,$C6,$7E,$00 ; .
Char151: .db $E0,$00,$C6,$C6,$C6,$C6,$7E,$00 ; .
Char152: .db $66,$00,$66,$66,$66,$3E,$06,$7C ; .
Char153: .db $C6,$7C,$C6,$C6,$C6,$C6,$7C,$00 ; .
Char154: .db $C6,$00,$C6,$C6,$C6,$C6,$FE,$00 ; .
Char155: .db $18,$18,$7E,$D8,$D8,$D8,$7E,$18 ; .
Char156: .db $38,$6C,$60,$F0,$60,$66,$FC,$00 ; .
Char157: .db $66,$66,$3C,$18,$7E,$18,$7E,$18 ; .
Char158: .db $F8,$CC,$CC,$FA,$C6,$CF,$C6,$C3 ; .
Char159: .db $0E,$1B,$18,$3C,$18,$18,$D8,$70 ; .
Char160: .db $0E,$00,$7C,$06,$7E,$C6,$7E,$00 ; .
Char161: .db $1C,$00,$38,$18,$18,$18,$3C,$00 ; .
Char162: .db $0E,$00,$7C,$C6,$C6,$C6,$7C,$00 ; .
Char163: .db $0E,$00,$C6,$C6,$C6,$C6,$7E,$00 ; .
Char164: .db $00,$FE,$00,$FC,$C6,$C6,$C6,$00 ; .
Char165: .db $FE,$00,$C6,$E6,$F6,$DE,$CE,$00 ; .
Char166: .db $3C,$6C,$6C,$3E,$00,$7E,$00,$00 ; .
Char167: .db $3C,$66,$66,$3C,$00,$7E,$00,$00 ; .
Char168: .db $18,$00,$18,$18,$30,$66,$3C,$00 ; .
Char169: .db $00,$00,$00,$FC,$C0,$C0,$00,$00 ; .
Char170: .db $00,$00,$00,$FC,$0C,$0C,$00,$00 ; .
Char171: .db $C6,$CC,$D8,$3F,$63,$CF,$8C,$0F ; .
Char172: .db $C3,$C6,$CC,$DB,$37,$6D,$CF,$03 ; .
Char173: .db $18,$00,$18,$18,$18,$18,$18,$00 ; .
Char174: .db $00,$33,$66,$CC,$66,$33,$00,$00 ; .
Char175: .db $00,$CC,$66,$33,$66,$CC,$00,$00 ; .
Char176: .db $22,$88,$22,$88,$22,$88,$22,$88 ; .
Char177: .db $55,$AA,$55,$AA,$55,$AA,$55,$AA ; .
Char178: .db $DD,$77,$DD,$77,$DD,$77,$DD,$77 ; .
Char179: .db $18,$18,$18,$18,$18,$18,$18,$18 ; .
Char180: .db $18,$18,$18,$18,$F8,$18,$18,$18 ; .
Char181: .db $18,$18,$F8,$18,$F8,$18,$18,$18 ; .
Char182: .db $36,$36,$36,$36,$F6,$36,$36,$36 ; .
Char183: .db $00,$00,$00,$00,$FE,$36,$36,$36 ; .
Char184: .db $00,$00,$F8,$18,$F8,$18,$18,$18 ; .
Char185: .db $36,$36,$F6,$06,$F6,$36,$36,$36 ; .
Char186: .db $36,$36,$36,$36,$36,$36,$36,$36 ; .
Char187: .db $00,$00,$FE,$06,$F6,$36,$36,$36 ; .
Char188: .db $36,$36,$F6,$06,$FE,$00,$00,$00 ; .
Char189: .db $36,$36,$36,$36,$FE,$00,$00,$00 ; .
Char190: .db $18,$18,$F8,$18,$F8,$00,$00,$00 ; .
Char191: .db $00,$00,$00,$00,$F8,$18,$18,$18 ; .
Char192: .db $18,$18,$18,$18,$1F,$00,$00,$00 ; .
Char193: .db $18,$18,$18,$18,$FF,$00,$00,$00 ; .
Char194: .db $00,$00,$00,$00,$FF,$18,$18,$18 ; .
Char195: .db $18,$18,$18,$18,$1F,$18,$18,$18 ; .
Char196: .db $00,$00,$00,$00,$FF,$00,$00,$00 ; .
Char197: .db $18,$18,$18,$18,$FF,$18,$18,$18 ; .
Char198: .db $18,$18,$1F,$18,$1F,$18,$18,$18 ; .
Char199: .db $36,$36,$36,$36,$37,$36,$36,$36 ; .
Char200: .db $36,$36,$37,$30,$3F,$00,$00,$00 ; .
Char201: .db $00,$00,$3F,$30,$37,$36,$36,$36 ; .
Char202: .db $36,$36,$F7,$00,$FF,$00,$00,$00 ; .
Char203: .db $00,$00,$FF,$00,$F7,$36,$36,$36 ; .
Char204: .db $36,$36,$37,$30,$37,$36,$36,$36 ; .
Char205: .db $00,$00,$FF,$00,$FF,$00,$00,$00 ; .
Char206: .db $36,$36,$F7,$00,$F7,$36,$36,$36 ; .
Char207: .db $18,$18,$FF,$00,$FF,$00,$00,$00 ; .
Char208: .db $36,$36,$36,$36,$FF,$00,$00,$00 ; .
Char209: .db $00,$00,$FF,$00,$FF,$18,$18,$18 ; .
Char210: .db $00,$00,$00,$00,$FF,$36,$36,$36 ; .
Char211: .db $36,$36,$36,$36,$3F,$00,$00,$00 ; .
Char212: .db $18,$18,$1F,$18,$1F,$00,$00,$00 ; .
Char213: .db $00,$00,$1F,$18,$1F,$18,$18,$18 ; .
Char214: .db $00,$00,$00,$00,$3F,$36,$36,$36 ; .
Char215: .db $36,$36,$36,$36,$FF,$36,$36,$36 ; .
Char216: .db $18,$18,$FF,$18,$FF,$18,$18,$18 ; .
Char217: .db $18,$18,$18,$18,$F8,$00,$00,$00 ; .
Char218: .db $00,$00,$00,$00,$1F,$18,$18,$18 ; .
Char219: .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; .
Char220: .db $00,$00,$00,$00,$FF,$FF,$FF,$FF ; .
Char221: .db $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0 ; .
Char222: .db $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F ; .
Char223: .db $FF,$FF,$FF,$FF,$00,$00,$00,$00 ; .
Char224: .db $00,$00,$76,$DC,$C8,$DC,$76,$00 ; .
Char225: .db $38,$6C,$6C,$78,$6C,$66,$6C,$60 ; .
Char226: .db $00,$FE,$C6,$C0,$C0,$C0,$C0,$00 ; .
Char227: .db $00,$00,$FE,$6C,$6C,$6C,$6C,$00 ; .
Char228: .db $FE,$60,$30,$18,$30,$60,$FE,$00 ; .
Char229: .db $00,$00,$7E,$D8,$D8,$D8,$70,$00 ; .
Char230: .db $00,$66,$66,$66,$66,$7C,$60,$C0 ; .
Char231: .db $00,$76,$DC,$18,$18,$18,$18,$00 ; .
Char232: .db $7E,$18,$3C,$66,$66,$3C,$18,$7E ; .
Char233: .db $3C,$66,$C3,$FF,$C3,$66,$3C,$00 ; .
Char234: .db $3C,$66,$C3,$C3,$66,$66,$E7,$00 ; .
Char235: .db $0E,$18,$0C,$7E,$C6,$C6,$7C,$00 ; .
Char236: .db $00,$00,$7E,$DB,$DB,$7E,$00,$00 ; .
Char237: .db $06,$0C,$7E,$DB,$DB,$7E,$60,$C0 ; .
Char238: .db $38,$60,$C0,$F8,$C0,$60,$38,$00 ; .
Char239: .db $78,$CC,$CC,$CC,$CC,$CC,$CC,$00 ; .
Char240: .db $00,$7E,$00,$7E,$00,$7E,$00,$00 ; .
Char241: .db $18,$18,$7E,$18,$18,$00,$7E,$00 ; .
Char242: .db $60,$30,$18,$30,$60,$00,$FC,$00 ; .
Char243: .db $18,$30,$60,$30,$18,$00,$FC,$00 ; .
Char244: .db $0E,$1B,$1B,$18,$18,$18,$18,$18 ; .
Char245: .db $18,$18,$18,$18,$18,$D8,$D8,$70 ; .
Char246: .db $18,$18,$00,$7E,$00,$18,$18,$00 ; .
Char247: .db $00,$76,$DC,$00,$76,$DC,$00,$00 ; .
Char248: .db $38,$6C,$6C,$38,$00,$00,$00,$00 ; .
Char249: .db $00,$00,$00,$18,$18,$00,$00,$00 ; .
Char250: .db $00,$00,$00,$00,$18,$00,$00,$00 ; .
Char251: .db $0F,$0C,$0C,$0C,$EC,$6C,$3C,$1C ; .
Char252: .db $78,$6C,$6C,$6C,$6C,$00,$00,$00 ; .
Char253: .db $7C,$0C,$7C,$60,$7C,$00,$00,$00 ; .
Char254: .db $00,$00,$3C,$3C,$3C,$3C,$00,$00 ; .
Char255: .db $00,$10,$00,$00,$00,$00,$00,$00 ; NULL
Ths needs to be fIxd so i can calculate the os!!1111!!!1
Something isn't getting emulated "correctly" regarding keypad scanning - at least the behaviour differs from the hardware.
Mandragore (direct download link ; online C IDE link), a C game by @critor, doesn't behave the same way on CEmu and actual hardware.
It's pretty easily noticeable, because on CEmu, key releases don't seem to be taken into account, while they are on hardware. Thus, the character keeps moving in the pressed direction on CEmu, but only moves by one step on calc, which is the intended behaviour.
I believe @mateoconlechuga mentioned something about undefined behaviour with the scanning mode, some time ago, but even if it's the cause of the issue in this case, CEmu should still implement whatever undefined/wrong behaviours and bugs that the actual calculator has, since the goal of an emulator is to have something reproducing the device as closely as possible, for accuracy's sake and proper debugging :)
Need to find a way to make it easier to scroll on the already disassembled limits.
It appears the makefile for the code defaults to some incorrect preprocessor flags.
cpu.c:1317:41: warning: implicit declaration of function 'open_debugger' is invalid in C99 [-Wimplicit-function-declaration]
open_debugger(DBG_STEP, 0);
^
cpu.c:1317:55: error: use of undeclared identifier 'DBG_STEP'
open_debugger(DBG_STEP, 0);
Is it known if this even works right?
While it is not even known if the current hardware can even support the hardware cursor properly, this also needs to be looked into.
Using these codes to initialize the timer and read the values is broken: (Doesn't update, maybe?)
.nolist
#include "ti84pce.inc"
.list
.org userMem-2
.db tExtTok,tAsm84CeCmp
.assume ADL=1
di
xor a,a
ld hl,$f1000c
ld (hl),%11001
ld de,$ffffff
ld l,$04
ld (hl),de
ld de,$5ab9ff
ld l,$07
ld (hl),de
_: ld b,0
_: djnz -_
dec a
jr nz,--_
ld hl,($f10000)
jp _DispHL
This code always prints 64897
on calc; with a slight variation of +-1, which isn't too crucial. CEmu currently does not; it returns 64950
This is a continuation of issue #26.
I have found under some circumstances, that pressing "Reset calculator" causes CEmu to access deallocated memory on this memcpy()
in lcd_drawframe()
It would be especially handy if we could have the debugger open on a certain illegal instruction, or some way to print to the console from a running program. This would make debugging C programs a lot easier.
When I try to search in the RAM in the Memory console for a program name, it fails and I get the error:
Runtime Error!
Program: C:...............
This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.
http://i.imgur.com/rKKTEaK.png
I ran it under Windows 10
In at least 3 separate instances, I attempted to step over a jr nc,someaddress
and instead found that the debugger had instead continued.
I used the ROM dumping wizard to get the rom of my (real) TI-83 Premium CE calculator, but at the end of the wizard it started CEmu with the freshly-created ROM, but it shown the console window and then "CEmu has stopped working". And if now I start CEmu, click Browse and choose the .rom file, it says "Invalid ROM image".
Also, the dump program created 12 RomData variables (from A to L) but the wizard only takes 11 (at K the progress bar is full). It may be related.
Currently, new GCC-specific attributes have been added, which have recently caused MSVC builds to fail: https://ci.appveyor.com/project/alberthdev/cemu
A suggested MSVC-compatible alternative would be to create a special define to wrap the structs with, with similar functionality on both GCC and MSVC:
http://stackoverflow.com/a/9504047/1094484
Integrate some TypeHandlers functions from tivars_lib_cpp, in order to display the contents of variables directly inside CEmu.
For VAT (and OP1-6?) view.
(Real/Lists/Strings/Eqs vartypes should be the priority)
When we're using double-buffering (so, in 8bpp mode), It'd be neat to be able to have a secondary display showing the other half of the VRAM, so as to be able to debug what's happening on the other buffer while the first is being shown on the [primary] LCD.
I guess a secondary LCDWidget in a popup would work? Or yet another dock (but created/destroyed dynamically)?
Can we get a beta previeuw of the CEmu TI-nspire CX (CAS) version to test the bugs :)
thank you.
The implementation of the the debug logging ends up writing null characters to the output buffer, which causes problems when copying and pasting into some other applications.
Seriously, why hasn't this been implemented yet?
This really should not be the case. Probably even for all widgets, but the LCD one is the highest priority.
While it's not interaction once launched, it's somewhat related to issue #16.
There was talk on #cemu-dev (especially with @alberthdev) about possible command-line arguments for CEmu when launching it. Ideas included:
Any more ideas/questions etc. welcome.
So ,everytime when i start the emulator ,it says "ram cleared" is it a bug or not?
( for people who are making programs trough the emulator , and when they log on its cleared :l )
ps; how its going for the TI-nspire CX ;)
I've installed the latest Qt5 SDK for windows (64bit) and attempted to build the project.
After running qmake, and then "Build All" I get the following output:
10:42:16: Running steps for project CEmu...
10:42:16: Configuration unchanged, skipping qmake step.
10:42:16: Starting: "C:\Qt\Qt5.5.1\Tools\QtCreator\bin\jom.exe"
C:\Qt\Qt5.5.1\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
cl -c -nologo -Zc:wchar_t -FS -W -Wall -Wno-unused-parameter -Werror=shadow -Werror=write-strings -Werror=redundant-decls -Werror=format -Werror=format-security -Werror=implicit-function-declaration -Werror=date-time -Werror=missing-prototypes -Werror=return-type -Werror=pointer-arith -fno-strict-overflow -Winit-self -ffunction-sections -fdata-sections -fno-exceptions -Zi -MDd -GR -W3 -w34100 -w34189 -w44996 -EHsc /Fddebug\CEmu.pdb -DUNICODE -DWIN32 -DWIN64 -DCEMU_VERSION=0.2 -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_QUICKWIDGETS_LIB -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\CEmu -I. -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtQuickWidgets -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtQuick -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtWidgets -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtGui -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtANGLE -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtQml -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtNetwork -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtCore -Idebug -I. -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\mkspecs\win32-msvc2013 -Fodebug\ @C:\Users\NATHAN~1\AppData\Local\Temp\main.obj.9772.63.jom
cl : Command line error D8004 : '/W' requires an argument
jom: C:\Users\Nathaniel\Documents\GitHub\build-CEmu-Desktop_Qt_5_5_1_MSVC2013_64bit-Debug\Makefile.Debug [debug\main.obj] Error 2
cl -c -nologo -Zc:wchar_t -FS -W -Wall -Wno-unused-parameter -Werror=shadow -Werror=write-strings -Werror=redundant-decls -Werror=format -Werror=format-security -Werror=implicit-function-declaration -Werror=date-time -Werror=missing-prototypes -Werror=return-type -Werror=pointer-arith -fno-strict-overflow -Winit-self -ffunction-sections -fdata-sections -fno-exceptions -Zi -MDd -GR -W3 -w34100 -w34189 -w44996 -EHsc /Fddebug\CEmu.pdb -DUNICODE -DWIN32 -DWIN64 -DCEMU_VERSION=0.2 -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_QUICKWIDGETS_LIB -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\CEmu -I. -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtQuickWidgets -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtQuick -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtWidgets -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtGui -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtANGLE -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtQml -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtNetwork -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtCore -Idebug -I. -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\mkspecs\win32-msvc2013 -Fodebug\ @C:\Users\NATHAN~1\AppData\Local\Temp\lcdwidget.obj.9772.78.jom
cl -c -nologo -Zc:wchar_t -FS -W -Wall -Wno-unused-parameter -Werror=shadow -Werror=write-strings -Werror=redundant-decls -Werror=format -Werror=format-security -Werror=implicit-function-declaration -Werror=date-time -Werror=missing-prototypes -Werror=return-type -Werror=pointer-arith -fno-strict-overflow -Winit-self -ffunction-sections -fdata-sections -fno-exceptions -Zi -MDd -GR -W3 -w34100 -w34189 -w44996 -EHsc /Fddebug\CEmu.pdb -DUNICODE -DWIN32 -DWIN64 -DCEMU_VERSION=0.2 -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_QUICKWIDGETS_LIB -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\CEmu -I. -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtQuickWidgets -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtQuick -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtWidgets -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtGui -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtANGLE -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtQml -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtNetwork -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtCore -Idebug -I. -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\mkspecs\win32-msvc2013 -Fodebug\ @C:\Users\NATHAN~1\AppData\Local\Temp\qtkeypadbridge.obj.9772.78.jom
cl -c -nologo -Zc:wchar_t -FS -W -Wall -Wno-unused-parameter -Werror=shadow -Werror=write-strings -Werror=redundant-decls -Werror=format -Werror=format-security -Werror=implicit-function-declaration -Werror=date-time -Werror=missing-prototypes -Werror=return-type -Werror=pointer-arith -fno-strict-overflow -Winit-self -ffunction-sections -fdata-sections -Zi -MDd -W3 /Fddebug\CEmu.pdb -DUNICODE -DWIN32 -DWIN64 -DCEMU_VERSION=0.2 -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_QUICKWIDGETS_LIB -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\CEmu -I. -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtQuickWidgets -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtQuick -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtWidgets -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtGui -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtANGLE -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtQml -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtNetwork -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\include\QtCore -Idebug -I. -IC:\Qt\Qt5.5.1\5.5\msvc2013_64\mkspecs\win32-msvc2013 -Fodebug\ @C:\Users\NATHAN~1\AppData\Local\Temp\asic.obj.9772.78.jom
cl : Command line error D8004 : cl : Command line error D8004 : '/W' requires an argument'/W' requires an argument
jom: C:\Users\Nathaniel\Documents\GitHub\build-CEmu-Desktop_Qt_5_5_1_MSVC2013_64bit-Debug\Makefile.Debug [debug\lcdwidget.obj] Error 2
jom: C:\Users\Nathaniel\Documents\GitHub\build-CEmu-Desktop_Qt_5_5_1_MSVC2013_64bit-Debug\Makefile.Debug [debug\qtkeypadbridge.obj] Error 2
cl : Command line error D8004 : '/W' requires an argument
jom: C:\Users\Nathaniel\Documents\GitHub\build-CEmu-Desktop_Qt_5_5_1_MSVC2013_64bit-Debug\Makefile.Debug [debug\asic.obj] Error 2
jom: C:\Users\Nathaniel\Documents\GitHub\build-CEmu-Desktop_Qt_5_5_1_MSVC2013_64bit-Debug\Makefile [debug] Error 2
10:42:16: The process "C:\Qt\Qt5.5.1\Tools\QtCreator\bin\jom.exe" exited with code 2.
Error while building/deploying project CEmu (kit: Desktop Qt 5.5.1 MSVC2013 64bit)
When executing step "Make"
10:42:16: Elapsed time: 00:00.
I seem to be getting a lot of cl : Command line error D8004 : '/W' requires an argument
errors.
Who broke it? :)
Searching in memory is broken? Also, a 'Find Next' option would be helpful.
Title explains it. Can currently be recovered from by resetting the calculator, but that's certainly not ideal.
Title says all. Probably need things that allow use to simulate locking and unlocking of flash sectors and memory.
Ask calc84 for more information, it appears that the counting around circular things is broken.
Needs to display the status of the SPS stack in this case.
This really needs to be looked at further in the future.
Seems like from this video that the user can't get CEmu to work. Needs to be fixed.
On the EZ80, block instructions such as LDIR only fetch the opcode bytes on the first iteration, and thus all the following iterations (until the end condition is reached or an interrupt occurs) will run faster. Currently CEmu refetches the opcode bytes every iteration like on the Z80, causing a noticeable performance drop in some programs.
See title.
This was broken at some point. Should probably be resolved.
There should be a way to easily edit the address of a breakpoint, much like how it is in the port monitor view. Also, the disassembly view should only update the line in the disassembly that needs updating, rather than the whole thing, as this is pretty annoying.
Store it in a buffer, then write the buffer on the next doGUIstuff event. Seriously, who put that in there in the first place. Can't believe no one has said anything.
This code causes emulation to crash: (Recorded by DrDnar)
http://www.rafb.me/results/3Jq1GJ79.html
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.