desktop version.

This commit is contained in:
Kelvin Sherlock 2020-07-20 22:48:09 -04:00
parent 9c6e9fb850
commit ad096c5654
3 changed files with 1534 additions and 0 deletions

416
morse.rez Normal file
View File

@ -0,0 +1,416 @@
#include "Types.rez"
#define WIN_HEIGHT 100
#define WIN_WIDTH 400
#define MENU_HEIGHT 12
#define BUTTON_HEIGHT 13
#define BUTTON_WIDTH 90
#define kPlayID 1
#define kStopID 2
resource rWindParam1 (0x1000) {
0x8020,
0x1000E,
0x0,
{0, 0, 0, 0},
0x1000,
{0, 0},
{0, 0},
{0, 0},
{0, 0},
{0, 0},
0x0,
0,
{62, 120, 162, 520},
infront,
0x1000,
0xA09
};
resource rWindColor (0x1000) {
0x0, // frame
0xF0F, // title/close/zoom
0x0, // tbar
0xF0FF, // grow
0xF0 // info
};
resource rControlList (0x1000) {
{
0x1,
0x2,
0x3,
}
};
resource rControlTemplate (0x1) {
0x2,
{4, 4, WIN_HEIGHT - 21, WIN_WIDTH - 4},
editTextControl {
{ /* optional Fields */
0x0,
0x7400,
0x3,
0x23A80000,
{-1, -1, -1, -1},
0x0,
0,
0x0,
0,
0x0,
0x15,
0x4,
0,
255, /* max chars */
0,
0,
0,
0x0,
0x0,
0x0
}
}
};
resource rControlTemplate (0x2) {
0x4,
{WIN_HEIGHT - 4 - BUTTON_HEIGHT, 4, WIN_HEIGHT - 4, 4 + BUTTON_WIDTH},
SimpleButtonControl {
{ /* optional Fields */
0x3,
0x3002,
kPlayID,
0x1000F,
0x0,
{
"\n",
"\n",
0x100,
0x100
}
}
}
};
resource rControlTemplate (0x3) {
0x5,
{WIN_HEIGHT - 4 - BUTTON_HEIGHT, WIN_WIDTH - 4 - BUTTON_WIDTH, WIN_HEIGHT - 4, WIN_WIDTH - 4},
SimpleButtonControl {
{ /* optional Fields */
0x2,
0x3002,
kStopID,
0x10010,
0x0,
{
".",
".",
0x100,
0x100
}
}
}
};
resource rPString (0x1, locked, fixed, nocrossbank, nospecialmemory) {
"@"
};
resource rPString (0x2, locked, fixed, nocrossbank, nospecialmemory) {
" File "
};
resource rPString (0x3, locked, fixed, nocrossbank, nospecialmemory) {
" Edit "
};
resource rPString (0xFA, locked, fixed, nocrossbank, nospecialmemory) {
"Undo"
};
resource rPString (0xFB, locked, fixed, nocrossbank, nospecialmemory) {
"Cut"
};
resource rPString (0xFC, locked, fixed, nocrossbank, nospecialmemory) {
"Copy"
};
resource rPString (0xFD, locked, fixed, nocrossbank, nospecialmemory) {
"Paste"
};
resource rPString (0xFE, locked, fixed, nocrossbank, nospecialmemory) {
"Clear"
};
resource rPString (0xFF, locked, fixed, nocrossbank, nospecialmemory) {
"Close"
};
resource rPString (0x100, locked, fixed, nocrossbank, nospecialmemory) {
"About..."
};
resource rPString (0x101, locked, fixed, nocrossbank, nospecialmemory) {
"Quit"
};
/*
resource rPString (0x102, locked, fixed, nocrossbank, nospecialmemory) {
"New"
};
resource rPString (0x103, locked, fixed, nocrossbank, nospecialmemory) {
"Open..."
};
resource rPString (0x104, locked, fixed, nocrossbank, nospecialmemory) {
"Save"
};
resource rPString (0x105, locked, fixed, nocrossbank, nospecialmemory) {
"Save as..."
};
resource rPString (0x106, locked, fixed, nocrossbank, nospecialmemory) {
"Revert to saved"
};
*/
resource rPString (0x1000E) {
" -- --- .-. ... . "
};
resource rPString (0x1000F) {
"Play"
};
resource rPString (0x10010) {
"Stop"
};
resource rMenuBar (0x1, locked, fixed, nocrossbank, nospecialmemory) {
{
0x1,
0x2,
0x3,
}
};
resource rMenu (0x1, locked, fixed, nocrossbank, nospecialmemory) {
0x1,
0xA008,
0x1,
{
0x100,
}
};
resource rMenu (0x2, locked, fixed, nocrossbank, nospecialmemory) {
0x2,
0xA008,
0x2,
{
0xFF,
0x101,
}
};
resource rMenu (0x3, locked, fixed, nocrossbank, nospecialmemory) {
0x3,
0xA008,
0x3,
{
0xFA,
0xFB,
0xFC,
0xFD,
0xFE,
}
};
resource rMenuItem (0xFA, nocrossbank, nospecialmemory) {
0xFA,
"Z",
"z",
0x0,
0x8040,
0xFA
};
resource rMenuItem (0xFB, nocrossbank, nospecialmemory) {
0xFB,
"X",
"x",
0x0,
0x8000,
0xFB
};
resource rMenuItem (0xFC, locked, fixed, nocrossbank, nospecialmemory) {
0xFC,
"C",
"c",
0x0,
0x8000,
0xFC
};
resource rMenuItem (0xFD, locked, fixed, nocrossbank, nospecialmemory) {
0xFD,
"V",
"v",
0x0,
0x8000,
0xFD
};
resource rMenuItem (0xFE, nocrossbank, nospecialmemory) {
0xFE,
"",
"",
0x0,
0x8000,
0xFE
};
resource rMenuItem (0xFF, nocrossbank, nospecialmemory) {
0xFF,
"W",
"w",
0x0,
0x8000,
0xFF
};
resource rMenuItem (0x100, nocrossbank, nospecialmemory) {
0x100,
"",
"",
0x0,
0x8040,
0x100
};
resource rMenuItem (0x101, nocrossbank, nospecialmemory) {
0x101,
"Q",
"q",
0x0,
0x8000,
0x101
};
/*
resource rMenuItem (0x102, nocrossbank, nospecialmemory) {
0x102,
"N",
"n",
0x0,
0x8000,
0x102
};
resource rMenuItem (0x103, locked, fixed, nocrossbank, nospecialmemory) {
0x103,
"O",
"o",
0x0,
0x8040,
0x103
};
resource rMenuItem (0x104, locked, fixed, nocrossbank, nospecialmemory) {
0x104,
"S",
"s",
0x0,
0x8000,
0x104
};
resource rMenuItem (0x105, locked, fixed, nocrossbank, nospecialmemory) {
0x105,
"",
"",
0x0,
0x8000,
0x105
};
resource rMenuItem (0x106, locked, fixed, nocrossbank, nospecialmemory) {
0x106,
"",
"",
0x0,
0x8040,
0x106
};
*/
resource rToolStartup (0x1) {
0xC080,
{
0x3, 0x300,
0x4, 0x301,
0x5, 0x302,
0x6, 0x300,
0xB, 0x200,
0xE, 0x301,
0xF, 0x301,
0x10, 0x301,
0x12, 0x301,
0x13, 0x300,
0x14, 0x301,
0x15, 0x301,
0x16, 0x300,
0x17, 0x301,
0x1B, 0x301,
0x1C, 0x301,
0x1E, 0x100,
0x22, 0x101
}
};
resource rAlertString (0x1) {
"40~"
".... .- -.-. -.- ..-. . ... -"
" ..--- ----- ..--- -----"
"\n\n\n"
"-.- . .-.. ...- .. -."
" ... .... . .-. .-.. --- -.-. -.-"
"~^Ok\0x00"
};
resource rText (0x4) {
"CDQ"
};
resource rVersion (0x1) {
{
0x1,
0x0,
0x0,
release,
0x0
},
verUS,
"-- --- .-. ... .",
"-- --- .-. ... ."
};
resource rComment (0x1) {
".... .- -.-. -.- ..-. . ... -"
" ..--- ----- ..--- -----"
"\n\n\n"
"-.- . .-.. ...- .. -."
" ... .... . .-. .-.. --- -.-. -.-"
};

796
morse16.s Normal file
View File

@ -0,0 +1,796 @@
lst off
rel
xc
xc
use morse.equ
use e16.window
use e16.event
use e16.types
use e16.control
tbx on
beep_left equ 0
beep_right equ 1
noise_left equ 2
noise_right equ 3
timer_1 equ 4
timer_3 equ 5
timer_7 equ 6
bic mac
if #=]1
and ]1!$ffff
else
err 1 ; immediate only.
fin
<<<
docwait mac
if MX<2
err 1 ; 8-bit m only
fin
wait lda >SoundCtrl
bmi wait
<<<
docmode mac
docwait
* lda >SoundAddr
bic #%01000000 ; DOC mode
ora #%00100000 ; auto-incr
sta >SoundCtrl
<<<
main
mx %00
phk
plb
sta MyID
jsr init
jsr mainloop
jsr shutdown
_GSOS:Quit :QuitDCB
brk $ea
:QuitDCB dw 2
adrl 0
dw 0
mainloop
psl #0 ; result
psl #0
psl #0
psl #draw_window
psl #0
psl #refIsResource
psl #kWindowID
psw #rWindParam1
_NewWindow2
pll window
psl window
_ShowWindow
_InitCursor
stz quit
lda #$0001ffff
sta event+owmTaskMask
lda #^$0001ffff
sta event+owmTaskMask+2
:loop
pha
psw #-1
psl event
_TaskMaster
pla
cmp #table_size+1
bcs :loop
asl a
jsr (:table,x)
lda quit
beq :loop
:rts
rts
:table
dw :idle ; null
dw :rts ; mouse down
dw :rts ; mouse up
dw :rts ; key down
dw :rts ; auto key down
dw :rts
dw :rts ; update
dw :rts
dw :rts ; activate
dw :rts ; switch
dw :rts ; desk acc.
dw :rts ; driver
dw :rts ; app 1
dw :rts ; app 2
dw :rts ; app 3
dw :rts ; app 4
dw :rts ; wInDesk
dw :menu ; wInMenuBar
dw :rts ; wClickCalled
dw :rts ; wInContent
dw :rts ; wInDrag
dw :rts ; wInGrow
dw bye ; wInGoAway
dw :rts ; wInZoom
dw :rts ; wInInfo
dw :menu ; wInSpecial menu 250-255
dw :rts ; wInDeskItem menu 1-249
dw :rts ; wInFrame
dw :rts ; wInactMenu
dw :rts ; wClosedNDA
dw :rts ; wCalledSysEdit
dw :rts ; wTrackZoom
dw :rts ; wHitFrame
dw :control ; wInControl
dw :rts ; wInControlMenu
:table_size = {*-:table}/2
:idle
lda _finished
beq :rts
stz _finished
bra stopped
bye
lda #1
sta quit
rts
menu
lda event+owmTaskData
sec
sbc #250
cmp #:table_size+1
bcs :xmenu
asl a
tax
jsr (:table,x)
:xmenu
psw #0
psw :event+owmTaskData+2
_HiliteMenu
:rts rts
:table
dw :rts ; 250 undo
dw :rts ; 251 cut
dw :rts ; 252 copy
dw :rts ; 253 paste
dw :rts ; 254 clear
dw :rts ; 255 close
dw bye ; 256 - quit
dw about
:table_size = {*-:table}/2
control
lda event+owmTaskData4 ; id of control selected.
cmp #:table_size+1
bcs :rts
asl
tax
jmp (:table,x)
:rts rts
:table
dw :rts ; 0 - none
dw play
dw stop
:table_size = {*-:table}/2
play
* copy text to the buffer and start audio.
pha
pha
psw #%00000000000_00_001 ; c-string, ptr
psl #_buffer
psl #256
psw #0 ; style
psl #0 ; style ref
psl #0 ; teHandle.
_TEGetText
pla
pla
sta :len
bcs :err
beq :err
jsr buffer_to_buffer
* can use key filter to block invalid characters....
* copy/convert :buffer to _buffer -still needed for space elimination,
* disable text edit?
* disable play button
* enable stop button
* queue up playing
psw #inactiveHilite
psl window ; window
psl #kPlayID
_HiliteCtlByID
psw #noHilite
psl window ; window
psl #kStopID
_HiliteCtlByID
jsr start_audio
:err rts
:len ds 2
buffer_to_buffer
:c equ 0
lda #0
ldx #0
ldy #0
stz :c
sep $20
:loop lda _buffer,x
beq :eof
bmi :space
cmp #' '+1
bcc :space
phx
tax
bit valid,x
plx
bvc :space
sta _buffer,y
inx
iny
stz :c
bra :loop
:space inx
lda :c
bne ]loop
inc :c
lda #' '
sta _buffer,y
iny
bra :loop
:eof sta _buffer,y
rep $20
rts
stop
jsr stop_audio
stopped
* enable controls
psw #noHilite
psl window ; window
psl #kPlayID
_HiliteCtlByID
psw #inactiveHilite
psl window ; window
psl #kStopID
_HiliteCtlByID
rts
jsr init
jsr start
sep $30
]wait lda _active
beq :done
lda >$e0c000 ; keydown - exit.
bpl ]wait
sta >$e0c010
:done
rep $30
jsr shutdown
lda #0
rtl
start_audio
mx %00
stz _index
stz _template
stz _template+2
stz _on
stz _active
stz _finished
sep $30
docmode
* start osc 0-3 w/ volume 0.
lda #$40
sta >SoundAddr
lda #0
sta >SoundData
sta >SoundData
lda #$01 ; silent channel to fix GS+ audio deficiencies.
sta >SoundData
sta >SoundData
lda #$a0
sta >SoundAddr
lda #%0000_0_00_1 ; free-run, disabled
sta >SoundData
lda #%0001_0_00_1 ; free-run, disabled
sta >SoundData
lda #%0000_0_00_0 ; free-run, enabled
sta >SoundData
lda #%0001_0_00_0 ; free-run, enabled
sta >SoundData
* volume, again.
lda #$40
sta >SoundAddr
lda #$ff
sta >SoundData
sta >SoundData
* trigger the timing oscillator.
lda #$a0+timer_1
sta >SoundAddr
lda #%0000_1_01_0 ; one-shot, enabled, interrupt
sta >SoundData
rep $30
inc _active
rts
shutdown
mx %00
jsr stop_audio
psw #$b
psl old_irq
_SetVector
psw #refIsHandle
psl tools
_ShutDownTools
psw MyID
_MMShutDown
_TLShutDown
rts
stop_audio
mx %00
stz _active
* shut off all oscillators.
sep $30
docmode
lda #$a0
sta >SoundAddr
lda #%0000_0_01_1 ; one-shot, disabled, nointerrupt
sta >SoundData
sta >SoundData
sta >SoundData
sta >SoundData
sta >SoundData
sta >SoundData
sta >SoundData
rep #$30
stz _finished
rts
audio_irq
mx %11
lda >_active
bne :ok
clc
rtl
:ok
phb
phk
plb
docmode
rep $30
lsr _template+2
ror _template
sep $30
bcc :off
* lda _on
* bne :trigger1
* ldx #$ff
* stx _on
jsr beep_on
* jsr setvolume
:trigger1 ; osc 5 interrupt on
lda #$a0+timer_1
sta >SoundAddr
lda #%0000_1_01_0 ; one-shot, enabled, interrupt
sta >SoundData
bra :exit
:off
* turn off sound generators.
* stz _on
* ldx #0
* jsr setvolume
jsr beep_off
* check for advance...
lda _template
bne :trigger1
rep $30
ldx _index
lda _buffer,x
and #$7f
beq :fini
inx
stx _index
cmp #' '+1
blt :space
asl
asl
tax
lda table,x
sta _template
lda table+2,x
sta _template+2
sep $30
* bra :trigger3 ; inter-char delay.
:trigger3 ; osc 6 interrupt on
lda #$a0+timer_3
sta >SoundAddr
lda #%0000_1_01_0 ; one-shot, enabled, interrupt
sta >SoundData
bra :exit
:fini mx %00
* stz _index
stz _active
inc _finished
bra :exit
:space mx %00
stz _template ; should already be 0.
stz _template+2
sep $30
* bra :trigger7 ; inter-word delay
:trigger7 ; osc 7 interrupt on
lda #$a0+timer_7
sta >SoundAddr
lda #%0000_1_01_0 ; one-shot, enabled, interrupt
sta >SoundData
bra :exit
:exit
plb
clc
rtl
beep_on
mx %11
lda _on
bne :rts
lda #$a0
sta >SoundAddr
lda #%0000_0_00_0 ; free-run, enabled
sta >SoundData
lda #%0001_0_00_0 ; free-run, enabled
sta >SoundData
inc _on
:rts rts
beep_off ; changes to one-shot mode so it will expire at the end of the sample
mx %11
lda _on
beq :rts
lda #$a0
sta >SoundAddr
lda #%0000_0_01_0 ; one-shot, enabled
sta >SoundData
lda #%0001_0_01_0 ; one-shot, enabled
sta >SoundData
stz _on
:rts rts
setvolume
mx %11
lda #$40
sta >SoundAddr
txa
sta >SoundData
sta >SoundData
rts
init
mx %00
_TLStartUp
psl #0
psw MyID
psw #refIsResource
psl #1
_StartUpTools
pll tools
psl #0
psw #refIsResource
psl #1
psl #0
_NewMenuBar2
_SetSysBar
psl #0
_SetMenuBar
psw #1
_FixAppleMenu
pha
_FixMenuBar
_DrawMenuBar
jsr init_audio
rts
init_audio
pha
pha
psw #$b
_GetVector
pll old_irq
psw #$b
psl #audio_irq
_SetVector
sep $30
docmode
* halt all oscillators.
ldy #$20-7
lda #$a0
sta >SoundAddr
* osc 1-4 are free-run, halted, stereo pairs.
lda #%0000_0_00_1 ; free-run, halted
sta >SoundData
lda #%0001_0_00_1 ; free-run, halted
sta >SoundData
lda #%0000_0_00_1 ; free-run, halted
sta >SoundData
lda #%0001_0_00_1 ; free-run, halted
sta >SoundData
* 5-7 are one-shot, interrupt enabled, halted.
lda #%0000_1_01_1 ; one-shot, halted, interrupt enabled.
sta >SoundData
sta >SoundData
sta >SoundData
* all others - halted.
lda #%0000_0_01_1 ; one-shot, halted
]loop sta >SoundData
dey
bne ]loop
* volume 0
ldy #$20
lda #$40
sta >SoundAddr
lda #0
]loop sta >SoundData
dey
bne ]loop
* 32 oscillators.
lda #$e1
sta >SoundAddr
lda #31*2
sta >SoundData
* osc 1/2 are 256 bytes, running at the natural rate.
* osc 5/6/7 are 256 bytes, running at 1 / 3 / 6 time units
* frequency low registers
lda #$00
sta >SoundAddr
lda #<$0200 ; low
sta >SoundData
sta >SoundData
* lda #>$0180
sta >SoundData
sta >SoundData
lda #<5103
sta >SoundData
lda #<1701
sta >SoundData
lda #<729
sta >SoundData
* freq high
lda #$20
sta >SoundAddr
lda #>$0200
sta >SoundData
sta >SoundData
* lda #>$0180
sta >SoundData
sta >SoundData
lda #>5103
sta >SoundData
lda #>1701
sta >SoundData
lda #>729
sta >SoundData
* wave table pointer
lda #$80
sta >SoundAddr
lda #$00 ; page 0
sta >SoundData
sta >SoundData
inc ; page 1
sta >SoundData
sta >SoundData
* inc ; page 2
sta >SoundData
sta >SoundData
sta >SoundData
* wave table size registers
lda #$c0
sta >SoundAddr
* 1-4 use 256 byte date, 9-bit shift.
lda #%00000000
sta >SoundData
sta >SoundData
sta >SoundData
sta >SoundData
* 5-7 use 256 byte data, 16-bit shift
lda #%00_000_111
sta >SoundData
sta >SoundData
sta >SoundData
* now load data...
docwait
ora #%01100000 ; ram mode, incr
sta >SoundCtrl
lda #0
sta >SoundAddr
sta >SoundAddr+1
ldx #0
]loop lda beep_f5,x
sta >SoundData
inx
bne ]loop
*]loop lda noise,x
* sta >SoundData
* inx
* bne ]loop
* 256 silent bytes for the timer.
lda #$80
]loop sta >SoundData
inx
bne ]loop
rep #$30
rts
lst off
put tables
old_irq ds 4
quit ds 2
tools ds 4
window ds 4
MyID ds 2
quit ds 2
event ds wmTaskRecSize
_active ds 2
_finished ds 2
_on ds 2
_template ds 4
_index ds 2
_buffer ds 256
*_buffer asc 'Apple 2 forever',00
dat 8
sav morse16.l
* lst on
sym

322
tables.s Normal file
View File

@ -0,0 +1,322 @@
* 26300 hz
* want a 256-byte B5 sine wav
* coeff = 2 * PI * 987.767 / 26300 = 0.23598186697022278
* PI/2/coeff = 6.656428084760879
* PI/2/6.4 = 0.2454369260617026
* pcm = [128 + round(127 * sin(n*xx)) for n in range(0,256)]
beep_b5
hex 809fbcd5eaf8fefef5e6d1b6997a5b3f
hex 26130601030d1e344f6d8cabc7def0fb
hex fffbf0dec7ab8c6d4f341e0d03010613
hex 263f5b7a99b6d1e6f5fefef8ead5bc9f
hex 8061442b160802020b1a2f4a6786a5c1
hex daedfafffdf3e2ccb193745539221005
hex 0105102239557493b1cce2f3fdfffaed
hex dac1a586674a2f1a0b020208162b4461
hex 809fbcd5eaf8fefef5e6d1b6997a5b3f
hex 26130601030d1e344f6d8cabc7def0fb
hex fffbf0dec7ab8c6d4f341e0d03010613
hex 263f5b7a99b6d1e6f5fefef8ead5bc9f
hex 8061442b160802020b1a2f4a6786a5c1
hex daedfafffdf3e2ccb193745539221005
hex 0105102239557493b1cce2f3fdfffaed
hex dac1a586674a2f1a0b020208162b4461
beep_f5
hex 8096abbfd1e0edf6fdfffef9f0e4d5c4
hex b19c86705b473424160c050102060d18
hex 26374a5e74899fb3c7d8e6f1fafefffc
hex f5ebdecebca8937d67523f2d1e110803
hex 010308111e2d3f52677d93a8bccedeeb
hex f5fcfffefaf1e6d8c7b39f89745e4a37
hex 26180d060201050c162434475b70869c
hex b1c4d5e4f0f9fefffdf6ede0d1bfab96
hex 806a55412f20130a03010207101c2b3c
hex 4f647a90a5b9ccdceaf4fbfffefaf3e8
hex dac9b6a28c77614d39281a0f06020104
hex 0b15223244586d8399aec1d3e2eff8fd
hex fffdf8efe2d3c1ae99836d5844322215
hex 0b040102060f1a28394d61778ca2b6c9
hex dae8f3fafefffbf4eadcccb9a5907a64
hex 4f3c2b1c10070201030a13202f41556a
noise
hex 6c917262a488987a82a7895966a7589e
hex 646a9b8887607b85a086925c678d7395
hex 7686949c61a69a9897a7a5979d668371
hex 91a05ca65972a48b857896906a6978a4
hex a891679b826a83658c9c8d6162926b8a
hex 8a6970589e8998986c87738b927c9f60
hex 8372959289748c606ca6658e74a89471
hex 966f8477799b606ca388a66b72847d5a
hex 8b678f6983619080a17f6e775f5f787c
hex 7a845a5890927a5ba66598a267746f79
hex 985f94808a839da191a162848a7c6ea6
hex 8376837d86689f7d9b94a57b6997688b
hex 67a86b8e8869a85ca28b9e729d8c799a
hex 629b8b678189728e9a8ba686a49f6a90
hex 5879588f91797b6c5d7080587a6a6995
hex 616da595987565a2a3a159a09a829974
table
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000001011101110101 ; ! ..--.
adrl %00000000000000000101110101011101 ; " .-..-.
adrl %00000000000000000000010101011101 ; # .-...
adrl %00000000000000011101010111010101 ; $ ...-..-
adrl %00000000000001110101110101010111 ; % -...-.-
adrl %00000000000000000111010111010101 ; & ...-.-
adrl %00000000000001011101110111011101 ; ' .----.
adrl %00000000000000000101110111010111 ; ( -.--.
adrl %00000000000001110101110111010111 ; ) -.--.-
adrl %00000000000000000000010111010101 ; * ...-.
adrl %00000000000000000001011101011101 ; + .-.-.
adrl %00000000000001110111010101110111 ; , --..--
adrl %00000000000000000111010101010111 ; - -....-
adrl %00000000000000011101011101011101 ; . .-.-.-
adrl %00000000000000000001011101010111 ; / -..-.
adrl %00000000000001110111011101110111 ; 0 -----
adrl %00000000000000011101110111011101 ; 1 .----
adrl %00000000000000000111011101110101 ; 2 ..---
adrl %00000000000000000001110111010101 ; 3 ...--
adrl %00000000000000000000011101010101 ; 4 ....-
adrl %00000000000000000000000101010101 ; 5 .....
adrl %00000000000000000000010101010111 ; 6 -....
adrl %00000000000000000001010101110111 ; 7 --...
adrl %00000000000000000101011101110111 ; 8 ---..
adrl %00000000000000010111011101110111 ; 9 ----.
adrl %00000000000000010101011101110111 ; : ---...
adrl %00000000000000010111010111010111 ; ; -.-.-.
adrl %00000000000000000000000000000000
adrl %00000000000000000001110101010111 ; = -...-
adrl %00000000000000000000000000000000
adrl %00000000000000000101011101110101 ; ? ..--..
adrl %00000000000000010111010111011101 ; @ .--.-.
adrl %00000000000000000000000000011101 ; A .-
adrl %00000000000000000000000101010111 ; B -...
adrl %00000000000000000000010111010111 ; C -.-.
adrl %00000000000000000000000001010111 ; D -..
adrl %00000000000000000000000000000001 ; E .
adrl %00000000000000000000000101110101 ; F ..-.
adrl %00000000000000000000000101110111 ; G --.
adrl %00000000000000000000000001010101 ; H ....
adrl %00000000000000000000000000000101 ; I ..
adrl %00000000000000000001110111011101 ; J .---
adrl %00000000000000000000000111010111 ; K -.-
adrl %00000000000000000000000101011101 ; L .-..
adrl %00000000000000000000000001110111 ; M --
adrl %00000000000000000000000000010111 ; N -.
adrl %00000000000000000000011101110111 ; O ---
adrl %00000000000000000000010111011101 ; P .--.
adrl %00000000000000000001110101110111 ; Q --.-
adrl %00000000000000000000000001011101 ; R .-.
adrl %00000000000000000000000000010101 ; S ...
adrl %00000000000000000000000000000111 ; T -
adrl %00000000000000000000000001110101 ; U ..-
adrl %00000000000000000000000111010101 ; V ...-
adrl %00000000000000000000000111011101 ; W .--
adrl %00000000000000000000011101010111 ; X -..-
adrl %00000000000000000001110111010111 ; Y -.--
adrl %00000000000000000000010101110111 ; Z --..
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000011101011101110101 ; _ ..--.-
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000011101 ; a .-
adrl %00000000000000000000000101010111 ; b -...
adrl %00000000000000000000010111010111 ; c -.-.
adrl %00000000000000000000000001010111 ; d -..
adrl %00000000000000000000000000000001 ; e .
adrl %00000000000000000000000101110101 ; f ..-.
adrl %00000000000000000000000101110111 ; g --.
adrl %00000000000000000000000001010101 ; h ....
adrl %00000000000000000000000000000101 ; i ..
adrl %00000000000000000001110111011101 ; j .---
adrl %00000000000000000000000111010111 ; k -.-
adrl %00000000000000000000000101011101 ; l .-..
adrl %00000000000000000000000001110111 ; m --
adrl %00000000000000000000000000010111 ; n -.
adrl %00000000000000000000011101110111 ; o ---
adrl %00000000000000000000010111011101 ; p .--.
adrl %00000000000000000001110101110111 ; q --.-
adrl %00000000000000000000000001011101 ; r .-.
adrl %00000000000000000000000000010101 ; s ...
adrl %00000000000000000000000000000111 ; t -
adrl %00000000000000000000000001110101 ; u ..-
adrl %00000000000000000000000111010101 ; v ...-
adrl %00000000000000000000000111011101 ; w .--
adrl %00000000000000000000011101010111 ; x -..-
adrl %00000000000000000001110111010111 ; y -.--
adrl %00000000000000000000010101110111 ; z --..
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
adrl %00000000000000000000000000000000
valid
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $00
db $40 ; ! ..--.
db $40 ; " .-..-.
db $40 ; # .-...
db $40 ; $ ...-..-
db $40 ; % -...-.-
db $40 ; & ...-.-
db $40 ; ' .----.
db $40 ; ( -.--.
db $40 ; ) -.--.-
db $40 ; * ...-.
db $40 ; + .-.-.
db $40 ; , --..--
db $40 ; - -....-
db $40 ; . .-.-.-
db $40 ; / -..-.
db $40 ; 0 -----
db $40 ; 1 .----
db $40 ; 2 ..---
db $40 ; 3 ...--
db $40 ; 4 ....-
db $40 ; 5 .....
db $40 ; 6 -....
db $40 ; 7 --...
db $40 ; 8 ---..
db $40 ; 9 ----.
db $40 ; : ---...
db $40 ; ; -.-.-.
db $00
db $40 ; = -...-
db $00
db $40 ; ? ..--..
db $40 ; @ .--.-.
db $40 ; A .-
db $40 ; B -...
db $40 ; C -.-.
db $40 ; D -..
db $40 ; E .
db $40 ; F ..-.
db $40 ; G --.
db $40 ; H ....
db $40 ; I ..
db $40 ; J .---
db $40 ; K -.-
db $40 ; L .-..
db $40 ; M --
db $40 ; N -.
db $40 ; O ---
db $40 ; P .--.
db $40 ; Q --.-
db $40 ; R .-.
db $40 ; S ...
db $40 ; T -
db $40 ; U ..-
db $40 ; V ...-
db $40 ; W .--
db $40 ; X -..-
db $40 ; Y -.--
db $40 ; Z --..
db $00
db $00
db $00
db $00
db $40 ; _ ..--.-
db $00
db $40 ; a .-
db $40 ; b -...
db $40 ; c -.-.
db $40 ; d -..
db $40 ; e .
db $40 ; f ..-.
db $40 ; g --.
db $40 ; h ....
db $40 ; i ..
db $40 ; j .---
db $40 ; k -.-
db $40 ; l .-..
db $40 ; m --
db $40 ; n -.
db $40 ; o ---
db $40 ; p .--.
db $40 ; q --.-
db $40 ; r .-.
db $40 ; s ...
db $40 ; t -
db $40 ; u ..-
db $40 ; v ...-
db $40 ; w .--
db $40 ; x -..-
db $40 ; y -.--
db $40 ; z --..
db $00
db $00
db $00
db $00
db $00