; ----------------------------------------------------------- ; Mad Pascal Compiler version 1.6.3 [2019/11/19] for 6502 ; ----------------------------------------------------------- STACKWIDTH = 16 CODEORIGIN = $2000 TRUE = 1 FALSE = 0 ; ----------------------------------------------------------- org $80 fxptr .ds 2 eax .ds 4 ;8 bytes (aex + edx) -> divREAL edx .ds 4 ecx .ds 4 bp .ds 2 bp2 .ds 2 ztmp ztmp8 .ds 1 ztmp9 .ds 1 ztmp10 .ds 1 ztmp11 .ds 1 TMP .ds 2 STACKORIGIN .ds STACKWIDTH*4 .print 'ZPFREE: $0000..',fxptr-1,' ; ',*,'..',$ff ; ----------------------------------------------------------- ax = eax al = eax ah = eax+1 cx = ecx cl = ecx ch = ecx+1 dx = edx dl = edx dh = edx+1 org eax FP1MAN0 .ds 1 FP1MAN1 .ds 1 FP1MAN2 .ds 1 FP1MAN3 .ds 1 org ztmp8 FP1SGN .ds 1 FP1EXP .ds 1 org edx FP2MAN0 .ds 1 FP2MAN1 .ds 1 FP2MAN2 .ds 1 FP2MAN3 .ds 1 org ztmp10 FP2SGN .ds 1 FP2EXP .ds 1 org ecx FPMAN0 .ds 1 FPMAN1 .ds 1 FPMAN2 .ds 1 FPMAN3 .ds 1 org bp2 FPSGN .ds 1 FPEXP .ds 1 ; ----------------------------------------------------------- org CODEORIGIN STATICDATA START tsx stx MAIN.@halt+1 .ifdef fmulinit fmulinit eif VLEN = VARDATASIZE-VARINITSIZE VADR = DATAORIGIN+VARINITSIZE ift VADR > $BFFF ert 'Invalid memory address range ',VADR eli (VLEN>0) && (VLEN<=256) ldx #256-VLEN lda #0 sta:rne VADR+VLEN-256,x+ eli VLEN>0 @fill #VADR #VLEN #0 eif ldx #$0f mva:rpl $340,x MAIN.IOCB@COPY,x- inx ; X = 0 !!! stx bp ; lo BP = 0 UNITINITIALIZATION .local MAIN ; PROCEDURE jmp l_0032 ; ----------------------------------------------------------- .local SYSTEM ; UNIT .local PEEK ; FUNCTION | ASSEMBLER | REGISTER ; ----------------------------------------------------------- ; Generate Assignment for WORD / SMALLINT / SHORTREAL / POINTER ; as Pointer mva :STACKORIGIN,x A mva :STACKORIGIN+STACKWIDTH,x A+1 dex ; sub bx, 1 ; --------------------- ASM Block 004 --------------------- ldy #0 mva (edx),y Result @exit ; ----------------------------------------------------------- ; Push BYTE / CHAR / SHORTINT / BOOLEAN ; as Pointer inx ; add bx, 1 mva RESULT :STACKORIGIN,x .ifdef @new @FreeMem #@VarData #@VarDataSize eif ; ----------------------------------------------------------- A = edx RESULT = DATAORIGIN+$000B @VarData = RESULT @VarDataSize = 1 rts ; ret .endl .local DPEEK ; FUNCTION | ASSEMBLER | REGISTER ; ----------------------------------------------------------- ; Generate Assignment for WORD / SMALLINT / SHORTREAL / POINTER ; as Pointer mva :STACKORIGIN,x A mva :STACKORIGIN+STACKWIDTH,x A+1 dex ; sub bx, 1 ; --------------------- ASM Block 005 --------------------- ldy #0 mva (edx),y Result iny mva (edx),y Result+1 @exit ; ----------------------------------------------------------- ; Push WORD / SMALLINT / SHORTREAL / POINTER ; as Pointer inx ; add bx, 1 mva RESULT :STACKORIGIN,x mva RESULT+1 :STACKORIGIN+STACKWIDTH,x .ifdef @new @FreeMem #@VarData #@VarDataSize eif ; ----------------------------------------------------------- A = edx RESULT = DATAORIGIN+$000C @VarData = RESULT @VarDataSize = 2 rts ; ret .endl .local POKE ; PROCEDURE | ASSEMBLER | REGISTER ; ----------------------------------------------------------- ; Generate Assignment for BYTE / CHAR / SHORTINT / BOOLEAN ; as Pointer mva :STACKORIGIN,x VALUE dex ; sub bx, 1 ; ----------------------------------------------------------- ; Generate Assignment for WORD / SMALLINT / SHORTREAL / POINTER ; as Pointer mva :STACKORIGIN,x A mva :STACKORIGIN+STACKWIDTH,x A+1 dex ; sub bx, 1 ; --------------------- ASM Block 021 --------------------- ldy #0 mva value (edx),y ; ----------------------------------------------------------- A = edx VALUE = ecx @exit .ifdef @new @FreeMem #@VarData #@VarDataSize eif rts ; ret .endl ; ----------------------------------------------------------- M_PI_2 = $0648 D_PI_2 = $0192 D_PI_180 = $0004 MGTIA = $0000 MVBXE = $0080 VBXE_XDLADR = $0000 VBXE_BCBADR = $0100 VBXE_MAPADR = $1000 VBXE_OVRADR = $5000 VBXE_WINDOW = $B000 IDLI = $0000 IVBL = $0001 CH_DELCHR = $00FE CH_ENTER = $009B CH_ESC = $001B CH_CURS_UP = $001C CH_CURS_DOWN = $001D CH_CURS_LEFT = $001E CH_CURS_RIGHT = $001F CH_TAB = $007F CH_EOL = $009B CH_CLR = $007D CH_BELL = $00FD CH_DEL = $007E CH_DELLINE = $009C CH_INSLINE = $009D COLOR_BLACK = $0000 COLOR_WHITE = $000E COLOR_RED = $0032 COLOR_CYAN = $0096 COLOR_VIOLET = $0068 COLOR_GREEN = $00C4 COLOR_BLUE = $0074 COLOR_YELLOW = $00EE COLOR_ORANGE = $0028 COLOR_BROWN = $00E4 COLOR_LIGHTRED = $003C COLOR_GRAY1 = $0004 COLOR_GRAY2 = $0006 COLOR_GRAY3 = $000A COLOR_LIGHTGREEN = $00CC COLOR_LIGHTBLUE = $007C FMOPENREAD = $0004 FMOPENWRITE = $0008 FMOPENAPPEND = $0009 FMOPENREADWRITE = $000C SCREENWIDTH = DATAORIGIN+$0000 SCREENHEIGHT = DATAORIGIN+$0002 DATESEPARATOR = DATAORIGIN+$0004 TVSYSTEM = $D014 adr.PALETTE = $02C0 .var PALETTE = adr.PALETTE .word adr.HPALETTE = $D012 .var HPALETTE = adr.HPALETTE .word FILEMODE = DATAORIGIN+$0005 SCREENMODE = DATAORIGIN+$0006 IORESULT = DATAORIGIN+$0007 EOLN = DATAORIGIN+$0008 RNDSEED = DATAORIGIN+$0009 .endl ; UNIT SYSTEM ; ----------------------------------------------------------- .local ATARI ; UNIT ; ----------------------------------------------------------- RTCLOK = $0012 ATRACT = $004D LMARGIN = $0052 RMARGIN = $0053 ROWCRS = $0054 COLCRS = $0055 DINDEX = $0057 SAVMSC = $0058 VDSLST = $0200 SDLSTL = $0230 TXTROW = $0290 TXTCOL = $0291 TINDEX = $0293 TXTMSC = $0294 SDMCTL = $022F GPRIOR = $026F CRSINH = $02F0 CHACT = $02F3 CHBAS = $02F4 CH = $02FC PCOLR0 = $02C0 PCOLR1 = $02C1 PCOLR2 = $02C2 PCOLR3 = $02C3 COLOR0 = $02C4 COLOR1 = $02C5 COLOR2 = $02C6 COLOR3 = $02C7 COLOR4 = $02C8 COLBAKS = $02C8 HPOSP0 = $D000 HPOSP1 = $D001 HPOSP2 = $D002 HPOSP3 = $D003 HPOSM0 = $D004 HPOSM1 = $D005 HPOSM2 = $D006 HPOSM3 = $D007 SIZEP0 = $D008 SIZEP1 = $D009 SIZEP2 = $D00A SIZEP3 = $D00B SIZEM = $D00C GRAFP0 = $D00D GRAFP1 = $D00E GRAFP2 = $D00F GRAFP3 = $D010 GRAFM = $D011 P0PF = $D004 PAL = $D014 COLPM0 = $D012 COLPM1 = $D013 COLPM2 = $D014 COLPM3 = $D015 COLPF0 = $D016 COLPF1 = $D017 COLPF2 = $D018 COLPF3 = $D019 COLBK = $D01A PRIOR = $D01B GRACTL = $D01D HITCLR = $D01E AUDF1 = $D200 AUDC1 = $D201 AUDF2 = $D202 AUDC2 = $D203 AUDF3 = $D204 AUDC3 = $D205 AUDF4 = $D206 AUDC4 = $D207 AUDCTL = $D208 SKSTAT = $D20F PORTB = $D301 DMACTL = $D400 CHACTL = $D401 DLISTL = $D402 HSCROL = $D404 VSCROL = $D405 PMBASE = $D407 CHBASE = $D409 WSYNC = $D40A VCOUNT = $D40B PENH = $D40C PENV = $D40D NMIEN = $D40E .endl ; UNIT ATARI ; ----------------------------------------------------------- .local CRT ; UNIT .local READKEY ; FUNCTION | ASSEMBLER ; --------------------- ASM Block 047 --------------------- txa:pha @GetKey sta Result pla:tax @exit ; ----------------------------------------------------------- ; Push BYTE / CHAR / SHORTINT / BOOLEAN ; as Pointer inx ; add bx, 1 mva RESULT :STACKORIGIN,x .ifdef @new @FreeMem #@VarData #@VarDataSize eif ; ----------------------------------------------------------- RESULT = DATAORIGIN+$000F @VarData = RESULT @VarDataSize = 1 rts ; ret .endl ; ----------------------------------------------------------- TEXTATTR = DATAORIGIN+$000E CONSOL = $D01F CN_START_SELECT_OPTION = $0000 CN_SELECT_OPTION = $0001 CN_START_OPTION = $0002 CN_OPTION = $0003 CN_START_SELECT = $0004 CN_SELECT = $0005 CN_START = $0006 CN_NONE = $0007 BW40 = $0000 CO40 = $0001 BW80 = $0002 CO80 = $0003 MONO = $0007 C40 = $0001 C80 = $0003 BLACK = $0000 BLUE = $0001 GREEN = $0002 CYAN = $0003 RED = $0004 MAGENTA = $0005 BROWN = $0006 LIGHTGRAY = $0007 DARKGRAY = $0008 LIGHTBLUE = $0009 LIGHTGREEN = $000A LIGHTCYAN = $000B LIGHTRED = $000C LIGHTMAGENTA = $000D YELLOW = $000E WHITE = $000F BLINK = $0080 .endl ; UNIT CRT ; ----------------------------------------------------------- .local TYPES ; UNIT ; ----------------------------------------------------------- .endl ; UNIT TYPES ; ----------------------------------------------------------- .local GRAPH ; UNIT .local INITGRAPH_0082 ; PROCEDURE | OVERLOAD ; ----------------------------------------------------------- ; Generate Assignment for BYTE / CHAR / SHORTINT / BOOLEAN ; as Pointer mva :STACKORIGIN,x MODE dex ; sub bx, 1 ; optimize OK (GRAPH), line = 66 mva #$00 GRAPHRESULT ; optimize OK (GRAPH), line = 68 mva MODE SYSTEM.SCREENMODE ; --------------------- ASM Block 058 --------------------- txa:pha mva #$2c @putchar.vbxe lda mode and #$0f tay ldx #$60 ; 6*16 lda mode ; %00010000 with text window and #$10 eor #$10 ora #2 ; read .nowarn @graphics ; Fox/TQA dindex equ $57 tmccn equ $ee7d tmrcn equ $ee8d ldx dindex lda tmccn,x ldy tmrcn,x ldx #0 cmp #<320 sne:inx ; X:A = horizontal resolution ; Y = vertical resolution sta MAIN.SYSTEM.ScreenWidth stx MAIN.SYSTEM.ScreenWidth+1 sty MAIN.SYSTEM.ScreenHeight lda #0 sta MAIN.SYSTEM.ScreenHeight+1 pla:tax ; ----------------------------------------------------------- MODE = DATAORIGIN+$002A @VarData = MODE @VarDataSize = 1 @exit .ifdef @new @FreeMem #@VarData #@VarDataSize eif rts ; ret .endl .local SETCOLOR ; PROCEDURE | ASSEMBLER ; ----------------------------------------------------------- ; Generate Assignment for BYTE / CHAR / SHORTINT / BOOLEAN ; as Pointer mva :STACKORIGIN,x COLOR dex ; sub bx, 1 ; --------------------- ASM Block 060 --------------------- mva color @COMMAND.colscr sta GetColor ; ----------------------------------------------------------- COLOR = DATAORIGIN+$002B @VarData = COLOR @VarDataSize = 1 @exit .ifdef @new @FreeMem #@VarData #@VarDataSize eif rts ; ret .endl ; ----------------------------------------------------------- CURRENTDRIVER = $FFFFFF80 DETECT = $0000 CGA = $0001 MCGA = $0002 EGA = $0003 EGA64 = $0004 EGAMONO = $0005 LOWRES = $0006 HERCMONO = $0007 VGA = $0009 VESA = $000A D1BIT = $000B D2BIT = $000C D4BIT = $000D D6BIT = $000E D8BIT = $000F D12BIT = $0010 M640X400 = $0018 M640X480 = $0018 GROK = $0000 GRNOINITGRAPH = $FFFFFFFF GRNOTDETECTED = $FFFFFFFE GRFILENOTFOUND = $FFFFFFFD GRINVALIDDRIVER = $FFFFFFFC GRNOLOADMEM = $FFFFFFFB GRNOSCANMEM = $FFFFFFFA GRNOFLOODMEM = $FFFFFFF9 GRFONTNOTFOUND = $FFFFFFF8 GRNOFONTMEM = $FFFFFFF7 GRINVALIDMODE = $FFFFFFF6 GRERROR = $FFFFFFF5 GRIOERROR = $FFFFFFF4 GRINVALIDFONT = $FFFFFFF3 GRINVALIDFONTNUM = $FFFFFFF2 GRINVALIDVERSION = $FFFFFFEE CGAC0 = $0000 CGAC1 = $0001 CGAC2 = $0002 CGAC3 = $0003 CGAHI = $0004 MCGAC0 = $0000 MCGAC1 = $0001 MCGAC2 = $0002 MCGAC3 = $0003 MCGAMED = $0004 MCGAHI = $0005 EGALO = $0000 EGAHI = $0001 EGA64LO = $0000 EGA64HI = $0001 EGAMONOHI = $0003 VGALO = $000A VGAMED = $001F VGAHI = $0018 WIN_LEFT = DATAORIGIN+$0010 WIN_RIGHT = DATAORIGIN+$0012 WIN_TOP = DATAORIGIN+$0014 WIN_BOTTOM = DATAORIGIN+$0016 GRAPHRESULT = DATAORIGIN+$0018 GETCOLOR = DATAORIGIN+$0019 adr.LASTARCCOORDS = DATAORIGIN+$001A .var LASTARCCOORDS = adr.LASTARCCOORDS .word LASTARCCOORDS.X = DATAORIGIN+$001A LASTARCCOORDS.Y = DATAORIGIN+$001C LASTARCCOORDS.XSTART = DATAORIGIN+$001E LASTARCCOORDS.YSTART = DATAORIGIN+$0020 LASTARCCOORDS.XEND = DATAORIGIN+$0022 LASTARCCOORDS.YEND = DATAORIGIN+$0024 CURRENTX = DATAORIGIN+$0026 CURRENTY = DATAORIGIN+$0028 .endl ; UNIT GRAPH l_0032 ; optimize FAIL ('GRAPH.INITGRAPH_0082', /tmp/80col.pas), line = 47 inx mva #$08 :STACKORIGIN,x jsr GRAPH.INITGRAPH_0082 ; optimize OK (/tmp/80col.pas), line = 48 lda $0058 sta BA lda $0058+1 sta BA+1 ; optimize OK (/tmp/80col.pas), line = 49 lda BA sub #$01 sta TBA lda BA+1 sbc #$00 sta TBA+1 ; optimize FAIL ('GRAPH.SETCOLOR', /tmp/80col.pas), line = 50 inx mva #$01 :STACKORIGIN,x jsr GRAPH.SETCOLOR ; optimize OK (/tmp/80col.pas), line = 52 mva #$01 COL ; optimize OK (/tmp/80col.pas), line = 53 sta ROW ; optimize FAIL (100, /tmp/80col.pas), line = 55 @printSTRING #CODEORIGIN+$0000 @printEOL ; --- RepeatUntilProlog l_00E8 ; optimize FAIL ('CRT.READKEY', /tmp/80col.pas), line = 58 jsr CRT.READKEY lda :STACKORIGIN,x sub #$61 sta PRESSEDKEY dex ; optimize OK (/tmp/80col.pas), line = 59 lda PRESSEDKEY asl @ tay lda adr.FOR_BIT_CHARS,y sta CHARTODRAW lda adr.FOR_BIT_CHARS+1,y sta CHARTODRAW+1 ; optimize FAIL (100, /tmp/80col.pas), line = 61 inx mva COL :STACKORIGIN,x jsr @printBYTE dex @printSTRING #CODEORIGIN+$0020 inx mva PRESSEDKEY :STACKORIGIN,x inx mva #$61 :STACKORIGIN,x jsr @expandToCARD1.BYTE jsr @expandToCARD.BYTE jsr addEAX_ECX dex @printCHAR dex @printSTRING #CODEORIGIN+$0024 inx mva PRESSEDKEY :STACKORIGIN,x inx mva #$61 :STACKORIGIN,x jsr @expandToCARD1.BYTE jsr @expandToCARD.BYTE jsr addEAX_ECX dex jsr @printCARD dex @printEOL ; optimize OK (/tmp/80col.pas), line = 63 ldy #1 lda PRESSEDKEY cmp #$00 bcs @+ dey @ sty :STACKORIGIN+9 ldy #1 lda PRESSEDKEY cmp #$08 bcc @+ dey @ tya and :STACKORIGIN+9 jeq l_013C ; optimize OK (/tmp/80col.pas), line = 64 lda COL and #1 sta IFTMP_0051 jeq l_0149 ; optimize FAIL (0, /tmp/80col.pas), line = 65 inw TBA ; optimize OK (/tmp/80col.pas), line = 66 mva #$F0 EVEN l_0149 ; Restore conditional expression lda IFTMP_0051 ; else condition jne l_015B ; optimize OK (/tmp/80col.pas), line = 67 mva #$0F EVEN l_015B ; --- For ; optimize OK (/tmp/80col.pas), line = 68 mva #$00 I0B ; optimize OK (/tmp/80col.pas), line = 68 ; --- To l_0168 ; --- ForToDoCondition ; optimize OK (/tmp/80col.pas), line = 68 lda I0B cmp #$04 scc jne l_0176 ; optimize OK (/tmp/80col.pas), line = 69 lda TBA+1 sta :bp+1 ldy TBA lda (:bp),y sta :STACKORIGIN+10 lda CHARTODRAW+1 sta :bp+1 ldy CHARTODRAW lda (:bp),y and EVEN ora :STACKORIGIN+10 sta :STACKORIGIN+10 lda TBA+1 sta :bp+1 ldy TBA lda :STACKORIGIN+10 sta (:bp),y ; optimize OK (/tmp/80col.pas), line = 70 lda TBA add #$28 sta TBA scc inc TBA+1 ; optimize FAIL (0, /tmp/80col.pas), line = 70 inw CHARTODRAW ; --- ForToDoEpilog inc I0B ; inc ptr byte [CounterAddress] jne l_0168 l_0176 ; optimize OK (/tmp/80col.pas), line = 72 lda TBA sub #$C8 sta TBA scs dec TBA+1 ; optimize FAIL (0, /tmp/80col.pas), line = 72 inc COL ; optimize OK (/tmp/80col.pas), line = 73 lda COL cmp #$51 jne l_01A9 ; optimize OK (/tmp/80col.pas), line = 74 lda TBA add #$C8 sta TBA scc inc TBA+1 ; optimize FAIL (0, /tmp/80col.pas), line = 74 inc ROW ; optimize OK (/tmp/80col.pas), line = 75 mva #$01 COL l_01A9 l_013C ; optimize OK (/tmp/80col.pas), line = 78 lda #$00 jeq l_00E8 ; ----------------------------------------------------------- adr.CHAR_A = CODEORIGIN+$002B .var CHAR_A = adr.CHAR_A .word adr.CHAR_B = CODEORIGIN+$0030 .var CHAR_B = adr.CHAR_B .word adr.CHAR_C = CODEORIGIN+$0035 .var CHAR_C = adr.CHAR_C .word adr.CHAR_D = CODEORIGIN+$003A .var CHAR_D = adr.CHAR_D .word adr.CHAR_E = CODEORIGIN+$003F .var CHAR_E = adr.CHAR_E .word adr.CHAR_F = CODEORIGIN+$0044 .var CHAR_F = adr.CHAR_F .word adr.CHAR_G = CODEORIGIN+$0049 .var CHAR_G = adr.CHAR_G .word adr.CHAR_H = CODEORIGIN+$004E .var CHAR_H = adr.CHAR_H .word adr.CHAR_SPACE = CODEORIGIN+$0053 .var CHAR_SPACE = adr.CHAR_SPACE .word adr.FOR_BIT_CHARS = CODEORIGIN+$0058 .var FOR_BIT_CHARS = adr.FOR_BIT_CHARS .word BA = DATAORIGIN+$002C TBA = DATAORIGIN+$002E COL = DATAORIGIN+$0030 ROW = DATAORIGIN+$0031 I0B = DATAORIGIN+$0032 EVEN = DATAORIGIN+$0033 PRESSEDKEY = DATAORIGIN+$0034 CHARTODRAW = DATAORIGIN+$0035 IFTMP_0051 = DATAORIGIN+$0037 @FORTMP_0165 = $0004 @exit @halt ldx #0 txs rts IOCB@COPY :16 brk .local @DEFINES ATARI .endl .endl ; ----------------------------------------------------------- icl 'cpu6502.asm' ; ----------------------------------------------------------- .macro UNITINITIALIZATION .ifdef MAIN.SYSTEM.@UnitInit jsr MAIN.SYSTEM.@UnitInit eif .ifdef MAIN.ATARI.@UnitInit jsr MAIN.ATARI.@UnitInit eif .ifdef MAIN.CRT.@UnitInit jsr MAIN.CRT.@UnitInit eif .ifdef MAIN.TYPES.@UnitInit jsr MAIN.TYPES.@UnitInit eif .ifdef MAIN.GRAPH.@UnitInit jsr MAIN.GRAPH.@UnitInit eif .endm ift .SIZEOF(MAIN.SYSTEM) > 0 .print 'SYSTEM: ',MAIN.SYSTEM,'..',MAIN.SYSTEM+.SIZEOF(MAIN.SYSTEM)-1 eif ift .SIZEOF(MAIN.ATARI) > 0 .print 'ATARI: ',MAIN.ATARI,'..',MAIN.ATARI+.SIZEOF(MAIN.ATARI)-1 eif ift .SIZEOF(MAIN.CRT) > 0 .print 'CRT: ',MAIN.CRT,'..',MAIN.CRT+.SIZEOF(MAIN.CRT)-1 eif ift .SIZEOF(MAIN.TYPES) > 0 .print 'TYPES: ',MAIN.TYPES,'..',MAIN.TYPES+.SIZEOF(MAIN.TYPES)-1 eif ift .SIZEOF(MAIN.GRAPH) > 0 .print 'GRAPH: ',MAIN.GRAPH,'..',MAIN.GRAPH+.SIZEOF(MAIN.GRAPH)-1 eif .print 'CODE: ',CODEORIGIN,'..',*-1 DATAORIGIN .by $28 $00 $18 $00 $2D $0C $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9F $00 $00 $00 $BF VARINITSIZE = *-DATAORIGIN VARDATASIZE = 56 PROGRAMSTACK = DATAORIGIN+VARDATASIZE .print 'DATA: ',DATAORIGIN,'..',PROGRAMSTACK run START ; ----------------------------------------------------------- .macro STATICDATA .by $1E $53 $74 $61 $72 $74 $20 $74 $79 $70 $69 $6E $67 $20 $61 $2C $62 $2C $63 $2C $64 $2C $65 $2C .by $66 $2C $67 $20 $2E $2E $2E $00 $02 $2E $20 $00 $05 $20 $2D $2D $3E $20 $00 $EE $AA $EE $AA $AA .by $CC $AA $EE $AA $EE $EE $88 $88 $88 $EE $CC $AA $AA $AA $CC $EE $88 $EE $88 $EE $EE $88 $EE $88 .by $88 $EE $88 $AA $AA $EE $AA $AA $EE $AA $AA $00 $00 $00 $00 $00 $2B $20 $30 $20 $35 $20 $3A $20 .by $3F $20 $44 $20 $49 $20 $4E $20 .endm end