diamonds.asmfJ@joOn_lpTEXTMSWDgLE`#INCLUDE "Header.h" .db "Diamonds v1.4",0 xc EQU TEXT_MEM ; x coordinate yc EQU TEXT_MEM+1 ; y coordinate loc EQU TEXT_MEM+2 ; memory address mloc EQU TEXT_MEM+4 ; matrix address ssz EQU TEXT_MEM+6 ; sprite size dir EQU TEXT_MEM+8 ; direction (up/down) tmp EQU TEXT_MEM+10 ; temp variable ovrflag EQU TEXT_MEM+13 ; game over flag cblk EQU TEXT_MEM+14 ; current block ta EQU TEXT_MEM+15 ; temp a tb EQU TEXT_MEM+16 ; temp b blks EQU TEXT_MEM+17 ; number of regular blocks left lblks EQU TEXT_MEM+18 ; number of last blocks left winflag EQU TEXT_MEM+19 ; winner flag lvs EQU TEXT_MEM+20 ; lives left lev EQU TEXT_MEM+21 ; current level level EQU APD_BUF ; current level matrix (84 bytes) score EQU TEXT_MEM+25 ; score tickc EQU TEXT_MEM+27 ; count between ticks tick EQU TEXT_MEM+28 ; how many ticks left xc2 EQU TEXT_MEM+30 yc2 EQU TEXT_MEM+31 startlev EQU TEXT_MEM+32 ; Start level string EQU TEXT_MEM+40 ;for disphl ;------------ Beginning of ASM code ------------ ;------------ Main Menu ------------ ld a,1 ld (startlev),a menu: call settop ld bc,0x1714 ld hl,opt1 CALL DZM ld bc,0x1E14 ld hl,opt2 CALL DZM ld bc,0x2514 ld hl,opt3 CALL DZM menulp: call GET_KEY cp 54 ;2nd Key jp z,strtgm cp 48 ;alpha key jr z,sslev cp 56 ;delete key jr nz,menulp ret ;---------- Setup the top of the screen ---------- settop: CALL ROM_CALL .DW CLEARLCD ld hl,512 ld (CURSOR_POS),hl ld hl,name CALL ROM_CALL .DW D_ZT_STR ld bc,0x0037 ld de,0x5E37 ld h,0x01 call iline res 7,(iy+20) ld bc,0x0901 ld hl,abt CALL DZM ld bc,0x3801 ld hl,hscr CALL DZM ld hl,56*256+40 ld (CURSOR_X),hl ld hl,(HI_SCORE) call disphl ret ;---------- Set Start Level ---------- sslev: call settop ld a,(startlev) ld (ta),a ld bc,0x1714 ld hl,sls CALL DZM ld bc,0x1E14 ld hl,phlp1 CALL DZM ld bc,0x2514 ld hl,phlp2 CALL DZM ld bc,0x2C14 ld hl,phlp3 CALL DZM sllp: ld a,(ta) sub 10 jr nc,nopei ld bc,0x1730 ;was 1730 ld hl,blank CALL DZM nopei: ld hl,0x1730-4 ld (CURSOR_X),hl ;ld a,0x2A ;ld (CURSOR_X),a ld a,(ta) LD H,0 LD L,A call disphl ;display value in a at current position call GET_KEY cp 54 ;2nd key, set level jr z,ssl cp 0x04 ;up arrow, inc level jr z,adslv cp 0x01 ;down arrow, dec level jr z,sbslv cp 56 ;delete key, exit to main menu jp z,menu jr sllp sbslv: ld a,(ta) dec a jr nz,adslvc ld a,27 jr adslvc adslv: ld a,(ta) inc a cp 28 jr nz,adslvc ld a,0x01 adslvc: ld (ta),a jr sllp ssl: ld a,(ta) ld (startlev),a jp menu ;------------ Set up the game ------------ strtgm: ld a,(startlev) ld (lev),a ld a,0x05 ld (lvs),a ld hl,0x0000 ld (score),hl slev: ld hl,level1-0x002C ld a,(lev) ld b,a ld de,0x002C lslp: add hl,de djnz lslp xor a ld (cblk),a ld de,level ; decompress/load a level ld b,0x29 lllp: ld a,(hl) and %11110000 rra rra rra rra ld (de),a inc de ld a,(hl) and %00001111 ld (de),a inc de inc hl djnz lllp dec hl ld bc,0x0004 ld de,level+0x0050 ldir ld hl,level+0x0052 ld a,(hl) ld (blks),a inc hl ld a,(hl) ld (lblks),a ld a,0x28 ld (tickc),a ld hl,0x003C ld (tick),hl start: call clrgbuf CALL ROM_CALL .DW CLEARLCD call drwlev ld h,0x01 ld bc,0x0001 ld d,b ld e,0x3E call iline ld b,0x51 ld d,b call iline ld bc,0x0101 ld d,0x50 ld e,c call iline ld c,0x3E ld e,c call iline ld a,0x32 dlp6: ld c,a ld b,0x53 ld d,0x5F ld e,c call iline sub 0x0E cp 0x08 jr nz,dlp6 ld c,0x0E ld e,c call iline set 7, (iy+0x14) ld bc,0x1C53 ld hl,scr CALL DZM ld bc,0x0E53 ld hl,levl CALL DZM ld bc,0x0053 ld hl,tcks CALL DZM ;ld hl,0x2A5A ;ld (CURSOR_X),hl ;ld a,(lvs) ;LD H,0 ;LD L,A ;call disphl ;display value in a at current position ;ld hl,0x1455 ;ld (CURSOR_X),hl ;ld a,(lev) ;LD H,0 ;LD L,A ;call disphl ld hl,0x2A5A ld (CURSOR_X),hl ld a,(lvs) call setxxop2 CALL ROM_CALL .dw 0x1D19 ld a,2 call dispop1a ld hl,0x1455 ld (CURSOR_X),hl ld a,(lev) call setxxop2 CALL ROM_CALL .dw 0x1D19 ld a,3 call dispop1a ld a,0x05 ld (ssz),a ld hl,0x2B52 ld (xc),hl ld hl,lives ld (loc),hl call dispsc call sprite call sbtck xor a ld (ovrflag),a ld (winflag),a ld a,(cblk) cp 0x06 jr z,sblks ld a,0x01 ld (cblk),a sblks: call update ld hl,level+0x0050 ld a,(hl) ld (xc),a inc hl ld a,(hl) ld (yc),a ld a,0x04 ld (ssz),a ld hl,ball ld (loc),hl call sprite xor a ld (dir),a ;------------ MAIN GAME LOOP ------------ main: CALL ROM_CALL .DW DISP_GRAPH ld a,(tickc) dec a call z,sbtck ld (tickc),a ld a,(ovrflag) cp 0x07 jr z,exit ld a,(winflag) cp 0x01 jr z,won call mvball ld a,0ffh out (1),a ld a,0fdh out (1),a in a,(1) cp 191 jp z,gmovr ld a,0ffh out (1),a ld a,0feh out (1),a in a,(1) cp 251 jp z,mright cp 253 jp z,mleft jr main ;cp 0x02 ;left arrow key ;jp z,mleft ;cp 0x03 ;right arrow key ;jp z,mright ;cp 55 ;mode key ;jp z,pause ;cp 56 ;delete key, to exit ;jr nz,main exit: call clrgbuf CALL ROM_CALL .DW CLEARLCD ld a,(lvs) dec a jr z,gmovr ld (lvs),a jp start gmovr: CALL ROM_CALL .DW CLEARLCD ld hl,770 ld (CURSOR_POS),hl ld hl,losser CALL ROM_CALL .DW D_ZT_STR call shwscr call tsths call wkey jp menu won: ld a,(tick) or a jr z,nobon ld b,a bonus: ld hl,(score) inc hl ld (score),hl push bc call sbtck call dispsc CALL ROM_CALL .DW DISP_GRAPH pop bc djnz bonus nobon: call clrgbuf CALL ROM_CALL .DW CLEARLCD ld a,(lev) inc a ld (lev),a cp 28 jp nz,slev ld hl,1026 ld (CURSOR_POS),hl ld hl,winner CALL ROM_CALL .DW D_ZT_STR call shwscr call tsths call wkey jp menu tsths: ; test for a high score ld hl,(score) ;current score ld de,(HI_SCORE) ;high score ld bc,HI_SCORE ;it is just needed call CP_HL_DE ret c ret z newhs: ; set current score to the high score ld hl,(score) ld (HI_SCORE),hl ld hl,261 ld (CURSOR_POS),hl ld hl,dnhs CALL ROM_CALL .DW D_ZT_STR ;call wkey ret shwscr: ; show the score (game over version) ld hl,515 ld (CURSOR_POS),hl ld hl,dscr CALL ROM_CALL .DW D_ZT_STR ld hl,(score) CALL ROM_CALL .dw D_HL_DECI ret ;------------ Pause ------------ pause: call wkey pausex: jp main ;------------ Subtract number of ticks ------------ sbtck: ld a,(tick) or a jr z,sbts dec a ld (tick),a sbts: ld bc,0x065B ld hl,blank CALL DZM ;ld a,0x55 ;ld (CURSOR_X),a ;ld a,(tick) ;LD H,0 ;LD L,A ;call disphl ld a,0x55 ld (CURSOR_X),a ld a,(tick) call setxxop2 CALL ROM_CALL .dw 0x1D19 ld a,5 call dispop1a ld a,0x28 ret ;------------ Move the ball left ------------ mleft: ld a,(xc) cp 0x01 jr z,mls call mball ld a,(xc) dec a ld (xc),a call tstblk or a jr z,mlc ld a,(xc) inc a ld (xc),a mlc: call mball mls: jp main ;------------ Move the ball right ------------ mright: ld a,(xc) cp 77 jr z,mrs call mball ld a,(xc) inc a ld (xc),a call tstblk or a jr z,mrc ld a,(xc) dec a ld (xc),a mrc: call mball mrs: jp main ;------------ Update on-screen status ------------ update: call pshc ld a,0x06 ld (ssz),a ld hl,50*256+84 ;was ld hl,0x3645 ld (xc),hl ld hl,blocks-0x000C ld a,(cblk) ld b,a ld de,0x000C udl1: add hl,de djnz udl1 ld (loc),hl call sprite ld a,92 ld (xc),a ld hl,(loc) ld bc,0x06 add hl,bc ld (loc),hl call sprite call popc ret ;------------ Check which block the ball is at ------------ ;------------ and do whatever is necessary ------------ tstblk: ld hl,0x0000 ld (tmp),hl ld a,(xc) ld d,a ld e,0x0A call div ld a,d ld (xc2),a ld (tmp),a ld a,(yc) ld d,a ld e,0x06 call div ld a,d ld (yc2),a or a jr z,tbs1 ld b,d tblp1: push bc ld bc,0x08 add hl,bc pop bc djnz tblp1 tbs1: ld bc,(tmp) add hl,bc ld bc,level add hl,bc ld a,(hl) tbs2: ld (ovrflag),a cp 0x03 jp z,chg2 cp 0x05 jp z,chg4 cp 0x09 jp z,chg8 push af ld b,a ld a,(cblk) cp b jp nz,tbx ;------------ Eliminate a Block ------------ call pshc xor a ld (hl),a ld a,(xc2) or a jr z,els1 ld b,a ell1: add a,0x09 djnz ell1 els1: inc a ld (xc),a ld a,(yc2) or a jr z,els2 ld b,a ell2: add a,0x05 djnz ell2 els2: inc a inc a ld (yc),a ld a,0x06 ld (ssz),a ld hl,blocks ld a,(cblk) dec a jr z,els3 ld b,a ld de,0x000C ell3: add hl,de djnz ell3 els3: ld (loc),hl push hl call sprite pop hl ld de,0x0006 add hl,de ld (loc),hl ld a,(xc) add a,0x0008 ld (xc),a call sprite call popc ld de,(score) inc de ld (score),de call dispsc ld a,(blks) or a jr z,sb1 dec a call z,chg6 ld (blks),a jr tbx sb1: ld a,(lblks) dec a ld (lblks),a jr nz,tbx ld a,0x01 ld (winflag),a tbx: pop af tbxx: ret chg2: ; set the block type to 2 push af ld a,(cblk) cp 0x06 jr z,c2x call update ld a,2 ld (cblk),a call update c2x: pop af jr tbxx chg4: ; set the block type to 4 push af ld a,(cblk) cp 6 jr z,c4x call update ld a,4 ld (cblk),a call update c4x: pop af jr tbxx chg8: ; set the block type to 8 push af ld a,(cblk) cp 6 jr z,c8x call update ld a,8 ld (cblk),a call update c8x: pop af jr tbxx chg6: ; set the block type to 6 push af call update ld a,0x06 ld (cblk),a call update pop af ret ;----------- Save/Recall xc and yc ------------ pshc: ; save xc in ta and yc in tb ld a,(xc) ld (ta),a ld a,(yc) ld (tb),a ret popc: ; return ta to xc and tb to yc ld a,(ta) ld (xc),a ld a,(tb) ld (yc),a ret ;------------ Divide D by E ------------ div: ; divide d by e and return d=answer e=remainder (d mod e) ld a,d ld c,0 dv1: ld b,e inc a dv2: cp b jr z,dv3 djnz dv2 dec a sub e inc c jr dv1 dv3: ld d,c ld e,a dec e ret ;------------ Turn on/off the ball ------------ mball: ld a,0x04 ld (ssz),a ld hl,ball ld (loc),hl call sprite ret ;------------ Move the ball vertically ------------ mvball: call mball ld a,(yc) cp 0x02 jr nz,mn2 xor a ld (dir),a mn2: ld a,(yc) cp 57 jr nz,mn57 ld a,0x01 ld (dir),a jr mup mn57: ld a,(dir) or a jr nz,mup ld a,(yc) inc a ld (yc),a jr cmx mup: ld a,(yc) dec a ld (yc),a cmx: call tstblk or a jr z,cmxx ld a,(dir) inc a cp 0x02 jr nz,cmxc xor a cmxc: ld (dir),a cmxx: call mball ret ;------------ Display the Score ------------ dispsc: ;ld hl,6*258+85 ;ld (CURSOR_X),hl ;ld hl,(score) ;call disphl ;ret ld hl,(score) call ROM_CALL .dw 0x359A call ROM_CALL .dw 0x19F5 ld hl,8787 ld (CURSOR_X),hl ld a,5 call dispop1a ret ;------------ Draw the level (on/off) ------------ drwlev: ld a,0x06 ld (ssz),a ld hl,513 ld (xc),hl ld hl,level ld (mloc),hl ld b,0x0A dlp1: push bc ld b,0x08 dlp2: push bc ld hl,(mloc) ld a,(hl) or a jr z,dskp ld hl,blocks ld (loc),hl cp 0x01 jr z,dcn dlp3: ld bc,12 add hl,bc dec a cp 0x01 jr nz,dlp3 ld (loc),hl dcn: call sprite ld hl,(loc) ld bc,0x0006 add hl,bc ld (loc),hl ld a,(xc) add a,0x08 ld (xc),a call sprite ld a,(xc) sub 0x08 ld (xc),a dskp: ld a,(xc) add a,10 ld (xc),a ld hl,(mloc) inc hl ld (mloc),hl pop bc djnz dlp2 ld a,(yc) add a,0x06 ld (yc),a ld a,0x01 ld (xc),a pop bc djnz dlp1 ret ; This sprite routine was origionally by Movax. ; input: ssz = height of the sprite ; loc = location of the sprite in ram ; yc = y coordinate of the sprite ; xc = x coordinate of the sprite ; output: puts a sprite on the graph buffer sprite: ld a,(yc) ld l,a ld e,a ld h,0x00 ld d,h add hl,de add hl,de add hl,hl add hl,hl ld a,(xc) ld e,a srl e srl e srl e add hl,de ld de,0x88B8 add hl,de ld b,0x07 and b jr z,align ; shift sprite if necessary ld ix,(loc) ld d,a ld a,(ssz) ld e,a snal1: ld b,(ix+0x00) ld c,0x00 push de snal2: srl b rr c dec d jr nz,snal2 pop de ld a,b xor (hl) ld (hl),a inc hl ld a,c xor (hl) ld (hl),a ld bc,0x000B add hl,bc inc ix dec e jr nz,snal1 jp sprtx align: ld de,(loc) ld a,(ssz) ld b,a salp: ld a,(de) xor (hl) ld (hl),a inc de push bc ld bc,0x000C add hl,bc pop bc djnz salp sprtx: ret disphl: push de push hl ld de,string+5 xor a ld (de),a Repeat: call UNPACK_HL add a,'0' dec de ld (de),a ld a,h or l jr nz,Repeat ex de,hl CALL ROM_CALL .DW D_ZM_STR pop hl pop de ret clrgbuf: ld hl,0x88B8 ld de,0x88B9 ld bc,0x2FF ld (hl),0 ldir ret iline: CALL ROM_CALL .dw 0x2E60-0x1A .dw 0x4025 .db 0x04 setxxop2: push hl ld h,0 ld l,a CALL ROM_CALL .dw 0x359A pop hl ret dispop1a: CALL ROM_CALL .dw 0x2E46 .dw 0x6CA4 .db 0x04 DZM: ld (CURSOR_X),bc CALL ROM_CALL .dw D_ZM_STR ret ;------------ Wait for a key press ------------ ; I use this method instead of GetKey to prevent ; apd which would mess up all the variables. wkey: call GET_KEY cp 56 jp z,gmovr cp 0x09 ret z jr wkey ;------------ Sprites ------------ ball: .db 01100000b .db 11110000b .db 11110000b .db 01100000b blocks: ; each block is 12 bytes block1: .db 01111111b ; width=10 .db 10000000b ; height=6 .db 10000000b ; clear .db 10000000b .db 10000000b .db 01111111b blk1b: .db 10000000b .db 01000000b .db 01000000b .db 01000000b .db 01000000b .db 10000000b block2: .db 01111111b ; spotted .db 11010101b .db 10101010b .db 11010101b .db 10101010b .db 01111111b .db 10000000b .db 01000000b .db 11000000b .db 01000000b .db 11000000b .db 10000000b block3: .db 01111111b ; change to spotted .db 11010111b .db 10101111b .db 11010111b .db 10101111b .db 01111111b .db 10000000b .db 11000000b .db 11000000b .db 11000000b .db 11000000b .db 10000000b block4: .db 01111111b ; bordered .db 10000000b .db 10111111b .db 10111111b .db 10000000b .db 01111111b .db 10000000b .db 01000000b .db 01000000b .db 01000000b .db 01000000b .db 10000000b block5: .db 01111111b ; change to bordered .db 10000111b .db 10110111b .db 10110111b .db 10000111b .db 01111111b .db 10000000b .db 11000000b .db 11000000b .db 11000000b .db 11000000b .db 10000000b block6: .db 01111111b ; last (thick border) .db 11111111b .db 11000000b .db 11000000b .db 11111111b .db 01111111b .db 10000000b .db 11000000b .db 11000000b .db 11000000b .db 11000000b .db 10000000b block7: .db 01111111b ; killer .db 11100111b .db 10000000b .db 10000000b .db 11100111b .db 01111111b .db 10000000b .db 11000000b .db 01000000b .db 01000000b .db 11000000b .db 10000000b block8: .db 01111111b ; spotted 2 .db 11100110b .db 10011001b .db 11100110b .db 10011001b .db 01111111b .db 10000000b .db 01000000b .db 11000000b .db 01000000b .db 11000000b .db 10000000b block9: .db 01111111b ; change to spotted 2 .db 11100111b .db 10011111b .db 11100111b .db 10011111b .db 01111111b .db 10000000b .db 11000000b .db 11000000b .db 11000000b .db 11000000b .db 10000000b blockA: .db 01111111b ; blocker .db 10111101b .db 11110111b .db 11011111b .db 11111011b .db 01111111b .db 10000000b .db 11000000b .db 11000000b .db 01000000b .db 11000000b .db 10000000b lives: .db 00101000b ; heart (for lives) .db 01111100b .db 01111100b .db 00111000b .db 00010000b ;------------ Dialog ------------ name: .db "Diamonds v1.4",0 opt1: .db "2nd - Start Game",0 opt2: .db "ALPHA - Set Level",0 opt3: .db "DEL - Exit",0 hscr: .db "High Score: ",0 abt: .db "by Joe W./Ilya W.",0 sls: .db "Level:",0 phlp1: .db "UP/DOWN - Select",0 phlp2: .db "2nd - Set",0 phlp3: .db "DEL - Cancel",0 winner: .db "You Won!",0 losser: .db "Game Over",0 dscr: .db "Score:",0 dnhs: .db "New High Score",0 scr: .db "Scr",0 levl: .db "Lev",0 tcks: .db "Bon",0 blank: .db " ",0 HI_SCORE: .db 0x00, 0x00 level1: .DB 0,116,71,0,0,114,39,0,5,68,68,48,1,0,0,16,0,6,96,0,0,6,96,0,1,0,0,16,3,68,68,80,0,114,39,0,0,116,71,0,5,5,20,4 level2: .DB 0,0,0,0,48,0,0,5,98,0,0,38,98,64,4,38,114,65,20,39,114,65,20,39,98,64,4,38,98,0,0,38,80,0,0,3,0,0,0,0,44,54,24,8 level3: .DB 48,106,166,2,32,166,106,2,0,102,102,0,0,166,106,0,136,166,106,68,136,0,0,68,137,0,0,84,0,0,0,0,0,0,0,0,17,122,167,17,75,50,17,12 level4: .DB 90,106,164,68,42,106,164,68,0,4,64,0,0,10,160,0,162,170,170,170,162,167,58,170,0,1,16,0,0,0,0,0,161,26,161,17,166,106,166,102,77,44,18,7 level5: .DB 1,64,6,102,0,20,0,0,16,1,80,0,33,0,18,0,7,16,1,112,0,65,0,20,0,3,16,1,0,0,33,0,102,96,2,16,170,170,170,42,75,50,23,6 level6: .DB 115,118,103,87,17,166,106,17,0,166,106,0,0,164,74,0,0,0,0,0,0,0,0,0,0,0,0,0,17,17,17,17,34,39,114,34,39,39,114,114,76,40,24,6 level7: .DB 102,106,0,21,102,106,0,17,138,170,0,0,0,0,0,0,0,0,0,0,170,170,170,160,170,170,170,160,144,0,0,0,112,4,36,39,48,4,36,39,8,24,12,6 level8: .DB 167,167,170,55,0,16,16,16,0,0,0,0,161,1,1,0,122,165,122,160,0,0,0,0,0,0,0,0,122,68,34,167,122,71,114,167,122,70,98,167,6,8,14,2 level9: .DB 147,160,0,7,0,16,0,4,0,16,170,170,0,16,160,34,0,16,128,37,17,160,160,34,102,112,170,170,170,160,0,4,0,0,0,7,0,0,0,4,5,54,15,2 level10: .DB 0,128,2,0,4,160,10,64,4,160,10,64,1,80,3,0,1,118,103,0,1,118,103,0,1,57,149,0,4,160,10,64,4,160,10,64,0,32,2,0,6,8,16,4 level11: .DB 32,0,0,5,64,0,0,7,112,6,130,67,112,122,170,170,112,136,121,132,0,0,0,100,0,0,0,2,0,0,0,98,23,33,17,36,23,113,17,116,44,30,24,3 level12: .DB 7,65,16,0,116,0,1,17,64,0,0,17,64,0,0,113,0,33,64,49,0,118,112,122,32,71,32,90,32,0,0,122,114,0,0,102,7,32,17,102,75,5,24,5 level13: .DB 100,26,8,70,113,0,0,23,0,0,0,0,0,32,0,0,0,0,10,5,0,113,32,2,0,167,160,169,64,112,0,0,0,128,0,4,96,120,48,118,6,50,14,4 level14: .DB 98,0,0,134,112,0,0,7,42,7,0,160,0,1,24,8,58,32,10,106,166,160,8,169,32,33,16,0,10,0,112,168,112,0,0,7,98,0,0,134,37,30,16,6 level15: .DB 103,103,103,103,0,0,0,0,0,0,0,0,2,66,66,64,5,118,103,48,3,118,103,80,4,36,36,32,0,0,0,0,0,0,0,0,118,118,118,118,8,5,12,12 level16: .DB 16,4,0,58,10,0,0,166,0,167,74,32,0,5,168,0,112,0,0,0,0,0,0,7,0,42,80,0,8,164,122,0,106,0,0,160,169,0,64,1,5,47,10,2 level17: .DB 146,16,0,16,170,160,170,26,0,0,64,16,10,170,112,112,10,49,112,112,20,112,160,112,168,112,0,112,114,122,170,160,102,117,129,0,170,170,170,170,75,4,13,2 level18: .DB 144,118,0,118,112,118,0,118,112,170,162,113,0,128,0,113,0,0,10,0,7,163,160,0,0,122,0,161,0,160,0,118,10,0,7,118,64,0,5,118,44,54,6,7 level19: .DB 119,167,167,167,118,6,6,7,112,0,0,7,122,90,26,71,120,16,1,71,120,16,1,71,120,161,169,167,112,0,0,7,112,96,96,103,122,122,122,119,42,30,12,6 level20: .DB 16,2,128,1,2,32,0,0,0,0,8,0,144,0,8,3,96,7,112,6,96,7,112,6,48,32,0,9,0,32,0,0,0,0,2,32,16,8,32,1,15,27,16,4 level21: .DB 10,144,8,136,1,166,74,136,161,26,68,168,58,16,160,7,0,80,10,4,0,10,0,116,7,0,160,0,2,160,74,0,2,42,68,164,98,34,164,68,5,3,28,2 level22: .DB 72,101,118,130,98,97,118,70,0,112,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,151,7,0,100,103,22,38,40,103,54,132,75,31,14,12 level23: .DB 48,0,7,98,112,0,0,0,170,170,0,10,71,170,7,164,0,0,10,96,5,0,2,0,10,170,0,0,6,166,0,0,0,162,0,0,116,167,7,119,13,5,6,4 level24: .DB 148,136,34,67,0,0,0,0,0,0,0,0,10,122,122,112,0,6,160,0,0,1,160,0,0,6,160,0,2,1,160,128,2,6,160,128,146,65,165,131,54,10,16,3 level25: .DB 64,32,112,80,0,0,0,0,4,8,10,8,0,0,0,0,144,112,64,128,0,0,0,0,8,4,3,6,0,0,0,0,32,32,112,16,0,0,0,0,75,55,12,1 level26: .DB 0,0,3,117,0,0,0,112,71,0,0,112,39,0,0,112,71,1,16,112,135,1,16,112,71,0,0,112,39,0,0,112,71,0,0,0,103,144,0,0,54,55,11,1 level27: .DB 56,87,64,136,24,0,0,0,0,0,0,0,0,0,80,0,112,166,106,7,0,4,0,0,0,0,0,0,0,0,0,0,0,5,0,34,34,5,117,41,15,36,12,2 2Norton CommentSaver Datamdiamonds! copydWDBNMSWDWDBNMSWDL2Norton FileSaver DataPNCfPNfs@^Fx4 8  2/>2styl 0