// // ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» // º This file is generated by The Interactive Disassembler (IDA) FW º // º Copyright (c) 1997 by DataRescue sprl, º // º Professional version of IDA is at http://www.idapro.com º // ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ // #include static main(void) { GenInfo(); Segments(); Bytes(); } //------------------------------------------------------------------------ // General information static GenInfo(void) { DeleteAll(); // purge database SetPrcsr("z80"); StringEnd(0x24); StringStp(0xA); Tabs(1); Comments(0); Voids(1); XrefShow(2); AutoShow(1); Indent(16); CmtIndent(40); LowVoids(0x20); HighVoids(0x10000); TailDepth(0x10); } //------------------------------------------------------------------------ // Information about segmentation static Segments(void) { SegCreate(0x10000,0x13FE5,0x1000,0,1,2); SegRename(0x10000,"ROM"); SegClass(0x10000,""); SegCreate(0x13FE5,0x20000,0x1000,0,1,2); SegRename(0x13FE5,"SNA"); SegClass(0x13FE5,""); } //------------------------------------------------------------------------ // Information about bytes static Bytes_0(void) { auto x; MakeName(0x10000,"coldboot"); MakeByte(0x10000); MakeArray(0x10000,16357); MakeComm(0x13FE5,"SNA header: I"); ExtLinA(0x13FE5,0,"; File Name disasm\\jsw.sna"); ExtLinA(0x13FE5,1,"; Format Binary"); ExtLinA(0x13FE5,2,"; Base Address: 1000h Range: 13FE5h - 20000h Loaded length: C01Bh"); MakeByte(x=0x13FE5); OpNumber(x,0); MakeComm(0x13FE6,"HL'"); MakeWord(x=0x13FE6); OpNumber(x,0); MakeComm(0x13FE8,"DE'"); MakeWord(x=0x13FE8); OpNumber(x,0); MakeComm(0x13FEA,"BC'"); MakeWord(x=0x13FEA); OpNumber(x,0); MakeComm(0x13FEC,"AF'"); MakeWord(x=0x13FEC); OpNumber(x,0); MakeComm(0x13FEE,"HL"); MakeWord(x=0x13FEE); OpOff(x,0,0x10000); MakeComm(0x13FF0,"DE"); MakeWord(x=0x13FF0); OpNumber(x,0); MakeComm(0x13FF2,"BC"); MakeWord(x=0x13FF2); OpNumber(x,0); MakeComm(0x13FF4,"IY"); MakeWord(x=0x13FF4); OpNumber(x,0); MakeComm(0x13FF6,"IX"); MakeWord(x=0x13FF6); OpOff(x,0,0x10000); MakeComm(0x13FF8,"IFF2"); MakeByte(0x13FF8); MakeComm(0x13FF9,"R"); MakeByte(0x13FF9); MakeComm(0x13FFA,"AF"); MakeWord(x=0x13FFA); OpNumber(x,0); MakeComm(0x13FFC,"SP"); MakeWord(x=0x13FFC); OpOff(x,0,0x10000); MakeComm(0x13FFE,"Interrupt mode"); MakeByte(0x13FFE); MakeComm(0x13FFF,"Border"); MakeByte(0x13FFF); MakeName(0x14000,"scr_line0"); MakeByte(0x14000); MakeArray(0x14000,32); MakeName(0x14020,"scr_line1"); MakeByte(0x14020); MakeArray(0x14020,32); MakeName(0x14040,"scr_line2"); MakeByte(0x14040); MakeArray(0x14040,32); MakeName(0x14060,"scr_line3"); MakeByte(0x14060); MakeArray(0x14060,32); MakeName(0x14080,"scr_line4"); MakeByte(0x14080); MakeArray(0x14080,32); MakeName(0x140A0,"scr_line5"); MakeByte(0x140A0); MakeArray(0x140A0,32); MakeName(0x140C0,"scr_line6"); MakeByte(0x140C0); MakeArray(0x140C0,32); MakeName(0x140E0,"scr_line7"); MakeByte(0x140E0); MakeArray(0x140E0,32); MakeByte(0x14100); MakeArray(0x14100,768); MakeByte(0x14400); MakeArray(0x14400,1024); MakeName(0x14800,"scr_line8"); MakeByte(0x14800); MakeArray(0x14800,32); MakeName(0x14820,"scr_line9"); MakeByte(0x14820); MakeArray(0x14820,32); MakeName(0x14840,"scr_line10"); MakeByte(0x14840); MakeArray(0x14840,32); MakeName(0x14860,"scr_line11"); MakeByte(x=0x14860); MakeArray(x,32); OpNumber(x,1); OpBinary(x,1); MakeName(0x14880,"scr_line12"); MakeByte(0x14880); MakeArray(0x14880,32); MakeName(0x148A0,"scr_line13"); MakeByte(0x148A0); MakeArray(0x148A0,32); MakeName(0x148C0,"scr_line14"); MakeByte(0x148C0); MakeArray(0x148C0,32); MakeName(0x148E0,"scr_line15"); MakeByte(0x148E0); MakeArray(0x148E0,32); MakeByte(0x14900); MakeArray(0x14900,768); MakeByte(0x14C00); MakeArray(0x14C00,1024); MakeName(0x15000,"scr_row16"); MakeByte(0x15000); MakeArray(0x15000,32); MakeName(0x15020,"scr_row17"); MakeByte(0x15020); MakeArray(0x15020,32); MakeName(0x15040,"scr_row18"); MakeByte(0x15040); MakeArray(0x15040,32); MakeName(0x15060,"scr_row19"); MakeByte(0x15060); MakeArray(0x15060,32); MakeName(0x15080,"scr_row20"); MakeByte(0x15080); MakeArray(0x15080,32); MakeName(0x150A0,"scr_row21"); MakeByte(0x150A0); MakeArray(0x150A0,32); MakeName(0x150C0,"scr_row22"); MakeByte(0x150C0); MakeArray(0x150C0,32); MakeName(0x150E0,"scr_row23"); MakeByte(0x150E0); MakeArray(0x150E0,32); MakeByte(0x15100); MakeArray(0x15100,768); MakeByte(0x15400); MakeArray(0x15400,1024); MakeName(0x15800,"scr_attrs"); MakeByte(0x15800); MakeArray(0x15800,768); MakeName(0x15B00,"printer_buf"); MakeWord(0x15B00); MakeArray(0x15B00,124); MakeWord(x=0x15BF8); OpNumber(x,0); MakeWord(x=0x15BFA); OpNumber(x,0); MakeName(0x15BFC,"stack_base"); MakeWord(x=0x15BFC); OpOff(x,0,0x10000); MakeName(0x15BFE,"stack_top"); MakeWord(x=0x15BFE); OpOff(x,0,0x10000); MakeName(0x15C00,"room_attrs2"); MakeByte(x=0x15C00); MakeArray(x,512); OpNumber(x,0); MakeName(0x15E00,"room_attrs"); MakeByte(x=0x15E00); MakeArray(x,512); OpNumber(x,1); MakeName(0x16000,"backbuf_image"); MakeByte(0x16000); MakeArray(0x16000,2048); MakeName(0x16800,"backbuf_image2"); MakeByte(0x16800); MakeArray(0x16800,2048); MakeName(0x17000,"room_image"); MakeByte(0x17000); MakeArray(0x17000,2048); MakeName(0x17800,"room_image2"); MakeByte(0x17800); MakeArray(0x17800,2048); MakeName(0x18000,"room_bitmap"); ExtLinA(0x18000,0,";"); ExtLinA(0x18000,1,"; Start of JSW data file."); ExtLinA(0x18000,2,"; The current room is copied to here. At its most basic, all the "); ExtLinA(0x18000,3,"; JSW128 patch does is copy the room in from 128k RAM rather than 48k"); ExtLinA(0x18000,4,"; RAM."); ExtLinA(0x18000,5,";"); MakeByte(0x18000); MakeArray(0x18000,128); MakeName(0x18080,"room_title"); MakeByte(0x18080); MakeArray(0x18080,32); MakeName(0x180A0,"room_air"); MakeByte(0x180A0); MakeArray(0x180A0,9); MakeName(0x180A9,"room_water"); MakeByte(0x180A9); MakeArray(0x180A9,9); MakeName(0x180B2,"room_earth"); MakeByte(0x180B2); MakeArray(0x180B2,9); MakeName(0x180BB,"room_fire"); MakeByte(0x180BB); MakeArray(0x180BB,9); MakeName(0x180C4,"room_ramp"); MakeByte(0x180C4); MakeArray(0x180C4,9); MakeName(0x180CD,"room_convey"); MakeByte(0x180CD); MakeArray(0x180CD,9); MakeName(0x180D6,"room_convey_dir"); MakeByte(0x180D6); MakeName(0x180D7,"room_convey_pos"); MakeWord(0x180D7); MakeName(0x180D9,"room_convey_len"); MakeByte(0x180D9); MakeName(0x180DA,"room_ramp_dir"); MakeByte(0x180DA); MakeName(0x180DB,"room_ramp_pos"); MakeWord(0x180DB); MakeName(0x180DD,"room_ramp_len"); MakeByte(0x180DD); MakeName(0x180DE,"room_border"); MakeByte(0x180DE); MakeComm(0x180DF,"Unused"); MakeWord(0x180DF); MakeName(0x180E1,"room_item"); MakeByte(0x180E1); MakeArray(0x180E1,8); MakeName(0x180E9,"room_exit_l"); MakeByte(0x180E9); MakeName(0x180EA,"room_exit_r"); MakeByte(0x180EA); MakeName(0x180EB,"room_exit_u"); MakeByte(0x180EB); MakeName(0x180EC,"room_exit_d"); MakeByte(0x180EC); MakeByte(0x180ED); MakeArray(0x180ED,3); MakeName(0x180F0,"room_guards"); MakeWord(0x180F0); MakeArray(0x180F0,8); MakeName(0x18100,"room_xguards"); ExtLinA(0x18100,0,";"); ExtLinA(0x18100,1,"; The compressed guardians in the room definition are expanded to "); ExtLinA(0x18100,2,"; a table at 8100h with 8 bytes/guardian."); ExtLinA(0x18100,3,";"); MakeByte(0x18100); MakeArray(0x18100,64); MakeComm(0x18140,"If there are 8 guardians, this \nwill be the end-marker for the \nguardian list."); MakeByte(x=0x18140); MakeArray(x,8); OpNumber(x,0); ExtLinA(0x18148,0,";"); ExtLinA(0x18148,1,"; The rest of this page does not appear to be used."); ExtLinA(0x18148,2,";"); MakeByte(0x18148); MakeArray(0x18148,184); MakeName(0x18200,"backbuf_lookup"); ExtLinA(0x18200,0,";"); ExtLinA(0x18200,1,"; This used to convert a Y-coordinate to an address in the back buffer"); ExtLinA(0x18200,2,"; used to draw screen lines."); ExtLinA(0x18200,3,";"); MakeWord(x=0x18200); MakeArray(x,128); OpOff(x,0,0x10000); OpOff(x,1,0x10000); MakeName(0x18300,"rope_movement"); ExtLinA(0x18300,0,";"); ExtLinA(0x18300,1,"; This page is used to calculate the position of the rope. The first 128"); ExtLinA(0x18300,2,"; entries are delta Y; the next 128 are delta X."); ExtLinA(0x18300,3,";"); ExtLinA(0x18300,4,"; See guardian.cxx in JSWED for a C++ translation of the rope movement"); ExtLinA(0x18300,5,"; algorithm."); ExtLinA(0x18300,6,";"); MakeByte(0x18300); MakeArray(0x18300,256); ExtLinA(0x18400,0,";"); ExtLinA(0x18400,1,"; Original entry point. This unobfuscates the file (which is saved in "); ExtLinA(0x18400,2,"; obfuscated form) and then jumps to the protection mechanism. Snapshots"); ExtLinA(0x18400,3,"; exist in which this is bypassed and the system jumps straight to 87CAh"); ExtLinA(0x18400,4,"; to start the game."); ExtLinA(0x18400,5,";"); MakeCode(0x18400); MakeCode(x=0x18401); OpOff(x,1,0x10000); MakeCode(x=0x18404); OpNumber(x,1); MakeComm(0x18407,"Code entry at 869Fh"); MakeCode(x=0x18407); OpNumber(x,1); MakeCode(x=0x18409); OpOff(x,1,0x10000); MakeName(0x18415,"unobfuscate"); MakeComm(0x18415,"Perform a decryption"); MakeName(0x18420,"SHEET"); MakeRptCmt(0x18420,"Current room"); MakeByte(x=0x18420); OpNumber(x,0); MakeByte(0x18421); MakeArray(0x18421,16); MakeName(0x18431,"stripe_bitmaps"); MakeByte(x=0x18431); MakeArray(x,8); OpNumber(x,0); MakeByte(0x18439); MakeArray(0x18439,8); MakeByte(x=0x18441); MakeArray(x,8); OpNumber(x,0); MakeByte(x=0x18449); MakeArray(x,8); OpNumber(x,0); MakeName(0x18451,"aAir"); MakeComm(0x18451,"Unused - a fossil from Manic Miner?"); MakeStr(0x18451,3); MakeName(0x18454,"scrolly"); MakeStr(0x18454,256); MakeName(0x18554,"aItemsCollected"); MakeStr(0x18554,32); MakeName(0x18574,"aGame"); MakeStr(0x18574,4); MakeName(0x18578,"aOver"); MakeStr(0x18578,4); MakeName(0x1857C,"item_count_msg"); MakeStr(0x1857C,3); MakeName(0x1857F,"current_time"); MakeStr(0x1857F,6); MakeName(0x18585,"start_time"); MakeStr(0x18585,6); MakeName(0x1858B,"aEnterCodeAtGri"); MakeStr(0x1858B,32); MakeName(0x185AB,"aSorryTryCodeAt"); MakeStr(0x185AB,32); MakeName(0x185CB,"frame_count"); MakeByte(0x185CB); MakeName(0x185CC,"NOMEN"); MakeRptCmt(0x185CC,"Number of lives"); MakeByte(0x185CC); MakeName(0x185CD,"flash_colour"); MakeRptCmt(0x185CD,"Never set to nonzero in JSW?"); ExtLinA(0x185CD,0,";"); ExtLinA(0x185CD,1,"; flash_colour looks like another curious little fossil from Manic "); ExtLinA(0x185CD,2,"; Miner. If set to a nonzero value, it will flash the background "); ExtLinA(0x185CD,3,"; colour that number of times. I'm not aware of any JSW game that"); ExtLinA(0x185CD,4,"; uses this facility. I think it, or a similar facility, handles the"); ExtLinA(0x185CD,5,"; \"extra life\" effect in Manic Miner."); ExtLinA(0x185CD,6,";"); MakeByte(0x185CD); MakeName(0x185CE,"kempston"); MakeByte(0x185CE); MakeName(0x185CF,"WILLY_Y"); MakeByte(x=0x185CF); OpNumber(x,0); MakeByte(0x185D0); MakeName(0x185D1,"AIRBORNE"); MakeRptCmt(0x185D1,"0 if on the ground\n1 if jumping\n2 or more if falling. Increases by\n 1 for each character cell Willy\n falls.\n0FFh dead of falling"); MakeByte(0x185D1); MakeName(0x185D2,"willy_frame"); MakeByte(0x185D2); MakeName(0x185D3,"WILLY_X"); MakeWord(x=0x185D3); OpOff(x,0,0x10000); MakeName(0x185D5,"jumpc"); MakeRptCmt(0x185D5,"Position in jump"); MakeByte(0x185D5); MakeName(0x185D6,"willy_rope_y"); MakeByte(0x185D6); MakeName(0x185D7,"room_entrypos"); MakeByte(0x185D7); MakeArray(0x185D7,7); MakeName(0x185DE,"items_to_get"); MakeRptCmt(0x185DE,"256 - number of items to get"); MakeByte(x=0x185DE); OpNumber(x,0); MakeName(0x185DF,"GAME_MODE"); MakeRptCmt(0x185DF,"0=Normal\n1=All objects taken\n2=Running right\n3=Hit toilet"); MakeByte(0x185DF); MakeName(0x185E0,"PAUSECT"); MakeByte(0x185E0); MakeName(0x185E1,"TICKER"); MakeByte(0x185E1); MakeName(0x185E2,"options"); MakeRptCmt(0x185E2,"Bit 1 set to disable tune"); MakeByte(0x185E2); MakeName(0x185E3,"write_typer"); MakeRptCmt(0x185E3,"0: No WRITETYPER\n1: W pressed, waiting for R\n2: R pressed, waiting for I\n...\n10: Writetyper mode engaged"); MakeByte(0x185E3); MakeName(0x185E4,"scrolly_pos"); MakeByte(x=0x185E4); OpNumber(x,0); MakeComm(0x185E5,"---------- No key"); MakeWord(x=0x185E5); OpNumber(x,0); MakeName(0x185E7,"wtype_keys"); MakeComm(0x185E7,"-W--------"); MakeWord(x=0x185E7); OpNumber(x,0); MakeComm(0x185E9,"---R------"); MakeWord(x=0x185E9); OpNumber(x,0); MakeComm(0x185EB,"-------I--"); MakeWord(x=0x185EB); OpNumber(x,0); MakeComm(0x185ED,"----T-----"); MakeWord(x=0x185ED); OpNumber(x,0); MakeComm(0x185EF,"--E-------"); MakeWord(x=0x185EF); OpNumber(x,0); MakeComm(0x185F1,"----T-----"); MakeWord(x=0x185F1); OpNumber(x,0); MakeComm(0x185F3,"-----Y----"); MakeWord(x=0x185F3); OpNumber(x,0); MakeComm(0x185F5,"---------P"); MakeWord(x=0x185F5); OpNumber(x,0); MakeComm(0x185F7,"--E-------"); MakeWord(x=0x185F7); OpNumber(x,0); MakeComm(0x185F9,"---R------"); MakeWord(x=0x185F9); OpNumber(x,0); MakeName(0x185FB,"title_tune"); MakeByte(x=0x185FB); MakeArray(x,100); OpNumber(x,1); MakeName(0x1865F,"ingame_tune"); MakeByte(x=0x1865F); MakeArray(x,64); OpNumber(x,1); MakeName(0x1869F,"after_decrypt"); MakeComm(0x1869F,"Clear screen"); MakeCode(x=0x1869F); OpOff(x,1,0x10000); MakeCode(x=0x186A2); OpOff(x,1,0x10000); MakeCode(x=0x186A5); OpNumber(x,1); MakeComm(0x186AC,"Now then, my good man, what's the password?"); MakeCode(x=0x186AC); OpOff(x,1,0x10000); MakeComm(0x186B3,"Ooh, he got it right first time and all"); MakeCode(x=0x186B6); OpOff(x,1,0x10000); MakeComm(0x186BD,"Got it right second time"); MakeComm(0x186C0,"Oops"); MakeName(0x186C3,"get_code"); MakeCode(x=0x186C3); OpOff(x,1,0x10000); MakeCode(x=0x186C6); OpNumber(x,1); MakeCode(x=0x186CB); OpOff(x,1,0x10000); MakeCode(x=0x186CE); OpOff(x,1,0x10000); MakeCode(x=0x186D6); OpOff(x,1,0x10000); MakeCode(x=0x186DC); OpOff(x,1,0x10000); MakeCode(x=0x186E2); OpOff(x,1,0x10000); MakeCode(x=0x186E8); OpOff(x,1,0x10000); MakeCode(x=0x186EB); OpOff(x,1,0x10000); MakeCode(x=0x186EE); OpNumber(x,1); MakeCode(x=0x186F6); OpNumber(x,1); MakeCode(x=0x186FB); OpNumber(x,1); MakeCode(x=0x186FF); OpNumber(x,1); MakeComm(0x18702,"->9E00 + A"); MakeCode(x=0x18702); OpNumber(x,1); MakeCode(x=0x1870A); OpNumber(x,1); MakeCode(0x18717); MakeCode(x=0x18718); OpOff(x,1,0x10000); MakeCode(x=0x1871F); OpChr(x,1); MakeCode(x=0x18721); OpOff(x,1,0x10000); MakeCode(x=0x18727); OpOff(x,1,0x10000); MakeCode(x=0x18736); OpNumber(x,1); MakeCode(x=0x1873C); OpNumber(x,1); MakeCode(x=0x18747); OpNumber(x,1); MakeCode(x=0x18752); OpNumber(x,1); MakeCode(x=0x18780); OpOff(x,1,0x10000); MakeCode(0x18785); MakeCode(x=0x1878D); OpNumber(x,0); MakeCode(x=0x18791); OpNumber(x,0); MakeCode(x=0x18795); OpNumber(x,1); MakeCode(x=0x187AE); OpNumber(x,1); MakeCode(x=0x187BB); OpNumber(x,0); MakeCode(x=0x187BE); OpNumber(x,0); MakeName(0x187CA,"restart_game"); ExtLinA(0x187CA,0,";"); ExtLinA(0x187CA,1,"; End of protection. Start of game proper."); ExtLinA(0x187CA,2,";"); MakeCode(0x187CA); MakeCode(x=0x187E5); OpNumber(x,1); MakeCode(x=0x187EA); OpNumber(x,1); OpDecimal(x,1); MakeCode(x=0x187EF); OpOff(x,1,0x10000); MakeCode(x=0x187F5); OpOff(x,1,0x10000); MakeCode(x=0x187F8); OpChr(x,1); MakeCode(x=0x187FB); OpChr(x,1); MakeCode(x=0x187FE); OpChr(x,1); MakeCode(x=0x18800); OpNumber(x,1); MakeName(0x18809,"reset_items"); MakeComm(0x18809,"Reset all items to not-taken"); MakeCode(x=0x1880E); OpOff(x,1,0x10000); MakeName(0x18813,"title_draw"); MakeCode(x=0x18813); OpOff(x,1,0x10000); MakeCode(x=0x18816); OpOff(x,1,0x10000); MakeCode(x=0x18819); OpNumber(x,1); MakeCode(x=0x18820); OpOff(x,1,0x10000); MakeCode(x=0x18823); OpNumber(x,1); MakeCode(x=0x18828); OpOff(x,1,0x10000); MakeCode(x=0x1882B); OpOff(x,1,0x10000); MakeComm(0x1882E,"\"Press enter to start\" bar"); MakeCode(x=0x18831); OpNumber(x,1); MakeCode(x=0x18835); OpOff(x,1,0x10000); MakeCode(x=0x18839); OpOff(x,1,0x10000); MakeCode(x=0x1883C); OpNumber(x,1); MakeComm(0x18841,"Draw the diagonals that make up\nthe impossible triangle"); MakeCode(x=0x18841); OpOff(x,1,0x10000); MakeName(0x18844,"draw_slopes"); MakeCode(x=0x18848); OpNumber(x,1); MakeCode(x=0x18850); OpNumber(x,1); MakeCode(x=0x18854); OpNumber(x,1); MakeCode(x=0x1885E); OpNumber(x,1); MakeCode(x=0x18862); OpNumber(x,1); MakeCode(x=0x1886E); OpNumber(x,1); MakeCode(x=0x1887B); OpOff(x,1,0x10000); MakeCode(x=0x18882); OpNumber(x,1); MakeCode(x=0x18886); OpNumber(x,1); MakeCode(x=0x18890); OpNumber(x,1); MakeComm(0x18895,"Probe for Kempston joystick"); MakeName(0x1889A,"chk_kempston"); MakeComm(0x1889A,"Try reading the Kempston port 256 \ntimes"); MakeComm(0x1889F,"And if an invalid value was read,\nthere is no kempston stick"); MakeCode(x=0x1889F); OpNumber(x,1); MakeCode(x=0x188A8); OpOff(x,1,0x10000); MakeName(0x188B5,"scrolly_loop"); MakeCode(x=0x188B8); OpOff(x,1,0x10000); MakeCode(x=0x188BB); OpOff(x,1,0x10000); MakeCode(x=0x188C1); OpNumber(x,1); MakeCode(x=0x188C8); OpOff(x,1,0x10000); MakeCode(x=0x188D1); OpOff(x,1,0x10000); MakeCode(x=0x188D4); OpNumber(x,1); MakeCode(x=0x188DE); OpNumber(x,1); MakeComm(0x188E3,"Check for ENTER or zero"); MakeCode(x=0x188E3); OpNumber(x,1); MakeCode(x=0x188F2); OpNumber(x,1); MakeCode(x=0x188FC); OpOff(x,1,0x10000); MakeCode(x=0x188FF); OpOff(x,1,0x10000); MakeCode(x=0x18907); OpOff(x,1,0x10000); MakeCode(x=0x1890A); OpOff(x,1,0x10000); MakeCode(x=0x1890D); OpNumber(x,1); MakeName(0x18912,"goto_room"); MakeCode(x=0x18915); OpNumber(x,1); MakeCode(x=0x1891A); OpOff(x,1,0x10000); MakeCode(x=0x1891D); OpNumber(x,1); MakeCode(x=0x18922); OpOff(x,1,0x10000); MakeCode(x=0x18926); OpOff(x,1,0x10000); MakeCode(x=0x1894A); OpOff(x,1,0x10000); MakeCode(x=0x1894D); OpOff(x,1,0x10000); MakeCode(x=0x18958); OpOff(x,1,0x10000); MakeCode(x=0x1895B); OpOff(x,1,0x10000); MakeCode(x=0x1895E); OpNumber(x,1); MakeCode(x=0x18965); OpOff(x,1,0x10000); MakeCode(x=0x18969); OpNumber(x,1); MakeCode(x=0x1896B); OpOff(x,1,0x10000); MakeCode(x=0x18971); OpOff(x,1,0x10000); MakeCode(x=0x18975); OpOff(x,1,0x10000); MakeCode(x=0x18978); OpNumber(x,1); MakeCode(x=0x18980); OpNumber(x,1); MakeName(0x1898B,"draw_lives"); MakeCode(0x1898B); MakeCode(x=0x1898E); OpOff(x,1,0x10000); MakeName(0x18994,"draw_life"); MakeCode(x=0x1899E); OpNumber(x,1); MakeComm(0x189A1,"Willy's sprite"); MakeCode(x=0x189A1); OpNumber(x,1); MakeName(0x189AD,"game_actionloop"); MakeCode(0x189AD); MakeCode(x=0x189B0); OpOff(x,1,0x10000); MakeCode(x=0x189B3); OpOff(x,1,0x10000); MakeCode(x=0x189B6); OpNumber(x,1); MakeCode(x=0x189BB); OpOff(x,1,0x10000); MakeCode(x=0x189BE); OpOff(x,1,0x10000); MakeCode(x=0x189C1); OpNumber(x,1); MakeCode(x=0x189D4); OpNumber(x,1); MakeCode(x=0x189F5); OpNumber(x,1); MakeCode(x=0x189F8); OpNumber(x,1); MakeCode(x=0x189FB); OpNumber(x,1); MakeComm(0x189FE,"Blit the back buffer to the screen"); MakeCode(x=0x18A06); OpOff(x,1,0x10000); MakeCode(x=0x18A18); OpNumber(x,1); MakeCode(x=0x18A1A); OpOff(x,1,0x10000); MakeCode(x=0x18A1D); OpOff(x,1,0x10000); MakeCode(x=0x18A20); OpNumber(x,1); MakeCode(x=0x18A26); OpOff(x,1,0x10000); MakeCode(x=0x18A29); OpOff(x,1,0x10000); MakeCode(x=0x18A2C); OpNumber(x,1); MakeCode(x=0x18A31); OpOff(x,1,0x10000); MakeCode(x=0x18A35); OpOff(x,1,0x10000); MakeCode(x=0x18A3D); OpOff(x,1,0x10000); MakeCode(x=0x18A41); OpOff(x,1,0x10000); MakeCode(x=0x18A52); OpOff(x,1,0x10000); MakeCode(x=0x18A5C); OpChr(x,1); MakeCode(x=0x18A60); OpChr(x,1); MakeCode(x=0x18A6A); OpChr(x,1); MakeCode(x=0x18A6E); OpChr(x,1); MakeCode(x=0x18A75); OpChr(x,1); MakeCode(x=0x18A7F); OpChr(x,1); MakeComm(0x18A83,"Midnight!"); MakeComm(0x18A86,"Game over - out of time"); MakeCode(x=0x18A86); OpChr(x,1); MakeCode(x=0x18A8B); OpChr(x,1); MakeCode(x=0x18A8F); OpChr(x,1); MakeCode(x=0x18A93); OpChr(x,1); MakeCode(0x18A99); MakeCode(x=0x18A9F); OpChr(x,1); MakeCode(x=0x18AA3); OpChr(x,1); MakeCode(x=0x18AA7); OpChr(x,1); MakeName(0x18AAB,"no_time_inc"); MakeComm(0x18AAB,"Check for BREAK (restart)"); MakeCode(x=0x18AAB); OpNumber(x,1); MakeCode(x=0x18AB1); OpNumber(x,1); MakeCode(x=0x18AC4); OpNumber(x,1); MakeName(0x18AD1,"pause"); MakeComm(0x18AD9,"Source for this bit was left in\nJSW at 9C00h"); MakeComm(0x18AE4,"WRITETYPER disables multicolour\nduring pause"); MakeName(0x18AEB,"flash_colours"); MakeCode(x=0x18AEB); OpOff(x,1,0x10000); MakeCode(x=0x18AF1); OpNumber(x,0); OpNumber(x,1); MakeCode(x=0x18AFC); OpNumber(x,1); MakeCode(x=0x18B02); OpNumber(x,1); MakeName(0x18B07,"end_pause"); MakeCode(x=0x18B07); OpOff(x,1,0x10000); MakeCode(x=0x18B0A); OpOff(x,1,0x10000); MakeCode(x=0x18B0D); OpNumber(x,1); MakeComm(0x18B10,"BUG: This sets C to 0, but the code\nbelow needs it to be 0FEh. On an \nunexpanded Spectrum, this will \nwork; but it will crash a system\nwith Interface 1."); MakeCode(x=0x18B15); OpNumber(x,0); OpNumber(x,1); MakeName(0x18B17,"no_pause"); MakeCode(x=0x18B1A); OpNumber(x,1); MakeCode(x=0x18B1F); OpNumber(x,1); MakeCode(x=0x18B21); OpOff(x,1,0x10000); MakeCode(0x18B36); MakeCode(x=0x18B47); OpNumber(x,1); MakeCode(x=0x18B4D); OpOff(x,1,0x10000); MakeComm(0x18B5A,"Lower pitch of tune as lives run out"); MakeCode(x=0x18B63); OpNumber(x,0); OpNumber(x,1); MakeName(0x18B70,"no_tune"); MakeCode(x=0x18B70); OpNumber(x,1); MakeComm(0x18B75,"Is 9 being pressed"); MakeComm(0x18B7C,"State of '6'"); MakeComm(0x18B7E,"->bit 5 of room number"); MakeComm(0x18B88,"Read keys 0-5"); MakeCode(x=0x18B88); OpNumber(x,1); MakeComm(0x18B90,"Generated room number"); MakeName(0x18B97,"no_teleport"); MakeCode(0x18B97); MakeComm(0x18BA2,"Not in 1st landing"); MakeComm(0x18BAA,"Not standing on floor"); MakeCode(x=0x18BAA); OpNumber(x,1); MakeComm(0x18BB3,"Check if keypress is either the \nsame as last time or the next\none we want."); MakeCode(x=0x18BB6); OpOff(x,1,0x10000); MakeComm(0x18BBC,"Check QWERT for magic keys"); MakeCode(x=0x18BBC); OpNumber(x,1); MakeComm(0x18BC3,"Correct keypress."); MakeComm(0x18BC8,"No keypress"); MakeComm(0x18BCD,"Same as last time"); MakeCode(x=0x18BCD); OpNumber(x,1); MakeComm(0x18BD3,"Wrong keypress"); MakeComm(0x18BDA,"Repeat for YUIOP"); MakeCode(x=0x18BDA); OpNumber(x,1); MakeCode(x=0x18BEA); OpNumber(x,1); MakeName(0x18BF7,"wtype_incr"); MakeCode(0x18BF7); MakeName(0x18C01,"MANDEAD"); MakeCode(x=0x18C01); OpNumber(x,1); MakeCode(x=0x18C03); OpOff(x,1,0x10000); MakeCode(x=0x18C06); OpOff(x,1,0x10000); MakeCode(x=0x18C09); OpNumber(x,1); MakeCode(x=0x18C23); OpNumber(x,0); OpNumber(x,1); MakeCode(x=0x18C2F); OpNumber(x,1); MakeCode(x=0x18C33); OpOff(x,1,0x10000); MakeComm(0x18C3B,"Decrease number of lives.\nChange this to NOP for infinite lives"); MakeComm(0x18C3C,"Move Willy back to where he came in"); MakeCode(x=0x18C3C); OpOff(x,1,0x10000); MakeCode(x=0x18C3F); OpOff(x,1,0x10000); MakeName(0x18C4A,"game_over_seq"); MakeCode(x=0x18C4A); OpOff(x,1,0x10000); MakeCode(x=0x18C4D); OpOff(x,1,0x10000); MakeComm(0x18C50,"Clear top 2/3 of screen"); MakeCode(x=0x18C50); OpNumber(x,1); MakeComm(0x18C5B,"Willy facing right"); MakeCode(x=0x18C5B); OpOff(x,1,0x10000); MakeCode(x=0x18C5E); OpOff(x,1,0x10000); MakeComm(0x18C66,"On barrel"); MakeCode(x=0x18C66); OpOff(x,1,0x10000); MakeCode(x=0x18C69); OpOff(x,1,0x10000); MakeName(0x18C71,"move_foot"); MakeCode(x=0x18C75); OpNumber(x,1); MakeCode(x=0x18C7D); OpNumber(x,1); MakeCode(x=0x18C80); OpOff(x,1,0x10000); MakeCode(x=0x18C8E); OpNumber(x,1); MakeCode(x=0x18C91); OpNumber(x,0); OpNumber(x,1); MakeCode(x=0x18C9B); OpOff(x,1,0x10000); MakeCode(x=0x18C9E); OpOff(x,1,0x10000); MakeCode(x=0x18CA1); OpNumber(x,1); MakeCode(x=0x18CAA); OpNumber(x,1); MakeCode(x=0x18CAF); OpNumber(x,1); MakeCode(x=0x18CC7); OpNumber(x,1); MakeCode(x=0x18CCB); OpOff(x,1,0x10000); MakeCode(x=0x18CD1); OpOff(x,1,0x10000); MakeCode(x=0x18CD7); OpOff(x,1,0x10000); MakeCode(x=0x18CDD); OpOff(x,1,0x10000); MakeComm(0x18CE6,"6 flickers"); MakeName(0x18CE8,"flash_gameover"); MakeCode(x=0x18CED); OpNumber(x,1); MakeCode(x=0x18CF5); OpNumber(x,1); MakeCode(x=0x18CFD); OpNumber(x,1); MakeCode(x=0x18D05); OpNumber(x,1); MakeCode(x=0x18D0D); OpNumber(x,1); MakeCode(x=0x18D15); OpNumber(x,1); MakeCode(x=0x18D1D); OpNumber(x,1); MakeCode(x=0x18D25); OpNumber(x,1); MakeName(0x18D33,"mk_room_images"); MakeCode(0x18D33); MakeCode(x=0x18D36); OpOff(x,1,0x10000); MakeCode(x=0x18D3A); OpNumber(x,1); MakeCode(x=0x18D42); OpOff(x,1,0x10000); MakeCode(x=0x18D46); OpNumber(x,1); MakeName(0x18D4B,"create_bitmaps"); MakeComm(0x18D4E,"BUG: This is the \"Block Graphics\"\nbug, caused by comparing attribute\nbytes with bitmaps. Apparently it\naffects Manic Miner as well."); MakeCode(x=0x18D51); OpOff(x,1,0x10000); MakeCode(x=0x18D54); OpNumber(x,1); MakeName(0x18D5C,"backbuf_addr"); MakeName(0x18D5E,"copybits"); MakeName(0x18D6B,"mk_room_attrs"); MakeCode(x=0x18D6B); OpOff(x,1,0x10000); MakeCode(x=0x18D6E); OpOff(x,1,0x10000); MakeName(0x18D72,"room_attr_loop"); MakeCode(x=0x18D8C); OpNumber(x,1); MakeName(0x18D9D,"convey_setup"); MakeName(0x18DA1,"no_conveyor"); MakeCode(x=0x18DAF); OpNumber(x,1); MakeCode(x=0x18DB2); OpNumber(x,1); MakeName(0x18DBB,"ramp_setup"); MakeName(0x18DC0,"lookup_attribut"); MakeCode(0x18DC0); MakeComm(0x18DC3,"*2"); MakeComm(0x18DC4,"*4"); MakeComm(0x18DC5,"*8"); MakeComm(0x18DC6,"*9"); MakeCode(x=0x18DC7); OpNumber(x,1); MakeComm(0x18DCA,"->attribute/bitmap"); MakeCode(x=0x18DCA); OpNumber(x,1); MakeComm(0x18DCD,"Set attribute"); MakeCode(0x18DD3); MakeCode(x=0x18DE6); OpNumber(x,1); MakeCode(x=0x18DEA); OpOff(x,1,0x10000); MakeCode(x=0x18DEF); OpNumber(x,1); MakeComm(0x18DFB,"Hitting earth stops the jump"); MakeCode(x=0x18E16); OpNumber(x,1); MakeCode(x=0x18E1B); OpNumber(x,0); OpNumber(x,1); MakeComm(0x18E28,"Have now jumped so far that \nhorizontal momentum is lost and\nWilly starts falling"); MakeName(0x18E36,"not_jumping"); MakeComm(0x18E36,"If Willy is about to fall into\na new character cell, check what\nhe's falling into."); MakeCode(x=0x18E40); OpNumber(x,1); MakeComm(0x18E44,"Fell into the room below"); MakeComm(0x18E4C,"Fell into fire"); MakeComm(0x18E50,"This instruction is unnecessary."); MakeComm(0x18E56,"Fall into air as well"); MakeComm(0x18E5B,"But stop if hit anything else"); MakeName(0x18E62,"fall_into"); ExtLinA(0x18E62,0,";"); ExtLinA(0x18E62,1,"; There is no ground below Willy. Find out why."); ExtLinA(0x18E62,2,";"); MakeComm(0x18E67,"He's jumping"); MakeCode(x=0x18E6A); OpOff(x,1,0x10000); MakeComm(0x18E72,"He has just started falling"); MakeComm(0x18E77,"He is already falling. Play the \n\"falling\" sound"); MakeCode(x=0x18E85); OpNumber(x,1); MakeCode(x=0x18E8A); OpNumber(x,0); OpNumber(x,1); MakeName(0x18E9C,"x_from_y"); MakeCode(x=0x18E9C); OpNumber(x,1); MakeCode(x=0x18EA2); OpNumber(x,1); MakeName(0x18EB0,"fall6"); MakeCode(0x18EB0); MakeName(0x18EB6,"fall2"); MakeCode(0x18EB6); MakeName(0x18EBC,"stop_jump"); MakeRptCmt(0x18EBC,"Willy hit something while jumping."); MakeCode(0x18EBC); MakeCode(x=0x18EC1); OpNumber(x,1); MakeCode(x=0x18ECE); OpOff(x,1,0x10000); MakeName(0x18ED4,"break_fall"); MakeRptCmt(0x18ED4,"Willy fell on something"); MakeCode(x=0x18ED4); OpNumber(x,1); MakeCode(x=0x18EFA); OpNumber(x,1); MakeCode(x=0x18F01); OpNumber(x,1); MakeCode(x=0x18F0D); OpNumber(x,1); MakeCode(x=0x18F1A); OpNumber(x,1); MakeCode(x=0x18F1F); OpNumber(x,1); MakeCode(x=0x18F23); OpNumber(x,1); MakeCode(x=0x18F27); OpNumber(x,1); MakeCode(x=0x18F2E); OpNumber(x,1); MakeComm(0x18F3D,"Read Kempston's left/right switches"); MakeCode(x=0x18F45); OpNumber(x,1); MakeCode(x=0x18F47); OpNumber(x,1); MakeCode(x=0x18F65); OpOff(x,1,0x10000); MakeCode(x=0x18F6D); OpNumber(x,1); MakeCode(x=0x18F78); OpNumber(x,1); MakeComm(0x18F96,"Jump starting"); MakeCode(x=0x18FA9); OpNumber(x,1); MakeCode(x=0x18FB1); OpNumber(x,1); MakeCode(x=0x18FB6); OpOff(x,1,0x10000); MakeName(0x18FBC,"is_jumping"); MakeCode(0x18FBC); MakeCode(0x18FDC); MakeCode(x=0x18FF0); OpNumber(x,1); MakeCode(x=0x18FF2); OpNumber(x,1); MakeCode(x=0x18FFE); OpNumber(x,1); MakeCode(x=0x19007); OpNumber(x,1); MakeCode(x=0x19015); OpNumber(x,1); MakeCode(0x19042); MakeCode(0x1904E); MakeCode(x=0x1905E); OpNumber(x,1); MakeCode(x=0x19060); OpNumber(x,1); MakeCode(x=0x1906C); OpNumber(x,1); MakeCode(x=0x19075); OpNumber(x,1); MakeCode(x=0x19084); OpNumber(x,1); MakeName(0x190B6,"mandead2"); MakeCode(0x190B6); MakeName(0x190B7,"mandead1"); MakeCode(x=0x190B8); OpNumber(x,1); MakeName(0x190C0,"move_guardians"); MakeCode(x=0x190C0); OpOff(x,1,0x10000); MakeCode(x=0x190C7); OpNumber(x,1); MakeComm(0x190CC,"None, or arrow"); MakeComm(0x190D1,"Horizontal"); MakeComm(0x190D6,"Vertical"); MakeComm(0x190DD,"Rope going right"); MakeComm(0x190DF,"Default: Rope going left"); MakeComm(0x190E6,"Decrease rope X"); MakeCode(x=0x190E8); OpNumber(x,1); MakeComm(0x190EC,"At extreme ends, decrease it more"); MakeComm(0x190EE,"If X=-128, reverse rope"); MakeCode(x=0x190EE); OpNumber(x,1); MakeCode(0x190F5); MakeName(0x190FF,"rope_right"); MakeCode(0x190FF); MakeCode(x=0x19111); OpNumber(x,1); MakeCode(0x19115); MakeCode(x=0x19117); OpNumber(x,1); MakeName(0x1911D,"rope_reverse"); MakeCode(x=0x19120); OpNumber(x,1); MakeCode(x=0x1912B); OpNumber(x,1); MakeName(0x19133,"hguard"); MakeComm(0x19133,"Going right?"); MakeCode(0x19133); MakeComm(0x1913C,"Next frame"); MakeCode(x=0x1913C); OpNumber(x,1); MakeCode(x=0x1913E); OpNumber(x,1); MakeCode(x=0x19143); OpNumber(x,1); MakeComm(0x1914A,"Hit left bound?"); MakeName(0x19156,"h_goright"); MakeCode(x=0x19156); OpNumber(x,1); MakeName(0x1915C,"h_right"); MakeCode(0x1915C); MakeComm(0x1915F,"Bits 5,6 of type byte = frame count"); MakeCode(x=0x1915F); OpNumber(x,1); MakeCode(x=0x19161); OpNumber(x,1); MakeCode(x=0x19166); OpNumber(x,1); MakeName(0x19179,"h_goleft"); MakeCode(x=0x19179); OpNumber(x,1); MakeName(0x1917F,"vguard"); MakeCode(0x1917F); MakeComm(0x19187,"If bit 4 set, do 'fast' animation\nOtherwise, do 'slow'."); MakeCode(x=0x1918E); OpNumber(x,1); MakeComm(0x19193,"Height"); MakeComm(0x19196,"Direction/speed"); MakeComm(0x1919C,"At limit?"); MakeName(0x191A8,"v_vlimit"); MakeName(0x191AE,"v_reverse"); MakeName(0x191B6,"skip_guard"); MakeName(0x191BE,"paint_guards"); MakeCode(x=0x191BE); OpOff(x,1,0x10000); MakeCode(x=0x191C5); OpNumber(x,1); MakeComm(0x191D6,"Sprite Y"); ExtLinA(0x191D6,0,";"); ExtLinA(0x191D6,1,"; Paint the sort that has a sprite"); ExtLinA(0x191D6,2,";"); MakeCode(x=0x191D9); OpNumber(x,1); MakeComm(0x191DD,"Sprite X"); MakeComm(0x191E8,"HL becomes position"); MakeCode(x=0x191E8); OpNumber(x,1); MakeComm(0x191F1,"Ink"); MakeCode(x=0x191F3); OpNumber(x,1); MakeCode(x=0x191F5); OpNumber(x,1); MakeCode(x=0x191F9); OpNumber(x,1); MakeComm(0x1920C,"If it doesn't fit on a line, colour\nthe line below."); MakeComm(0x19211,"Animation number"); MakeComm(0x19214,"Tick"); MakeComm(0x19217,"Start frame"); MakeComm(0x1921A,"Limit to top 3 bits to give sprite\nframe offset"); MakeCode(x=0x1921A); OpNumber(x,1); MakeCode(x=0x19220); OpNumber(x,1); MakeComm(0x19222,"Y"); MakeComm(0x19225,"X"); MakeComm(0x19228,"Look up in table at 8200h"); MakeComm(0x1922B,"HL = address to draw guardian"); MakeComm(0x1922E,"Draw guardian & check for collision"); MakeComm(0x19231,"Collided with Willy!"); MakeName(0x19237,"paint_arrow"); MakeCode(0x19237); MakeComm(0x19240,"Move arrow to new position"); MakeCode(x=0x19240); OpNumber(x,1); MakeName(0x19244,"arrow_right"); MakeCode(0x19244); MakeComm(0x19247,"C = position at which arrow is fired"); MakeCode(x=0x19247); OpNumber(x,1); MakeCode(x=0x1924F); OpNumber(x,1); MakeName(0x19255,"play_arrow_fire"); MakeCode(x=0x19255); OpNumber(x,0); OpNumber(x,1); MakeName(0x19262,"no_arrow_fire"); MakeComm(0x19262,"If arrow is onscreen"); MakeCode(x=0x19262); OpNumber(x,1); MakeComm(0x19267,"then draw it"); MakeCode(x=0x1926A); OpNumber(x,1); MakeCode(x=0x19272); OpNumber(x,1); MakeCode(x=0x19275); OpNumber(x,1); MakeCode(x=0x1929A); OpNumber(x,1); MakeName(0x192A4,"paint_rope"); MakeCode(x=0x192A4); OpOff(x,1,0x10000); MakeComm(0x192A8,"Draw rope. Note that this uses IX+9, \nwhich is in the next guardian; so\na rope must be followed by a blank\nguardian.\nPossible fix: Amend to IX+49h, which\nwould be in the apparently-unused\narea at 8140h-8180h"); MakeCode(x=0x192B2); OpNumber(x,1); MakeComm(0x192C0,"If Willy is not one the rope"); MakeComm(0x192C9,"and he touches it"); MakeComm(0x192CC,"then put him on it"); MakeComm(0x192D6,"If Willy is on the rope at this height"); MakeComm(0x192DB,"and he didn't just get on"); MakeComm(0x192E1,"Move him with the rope?"); MakeCode(x=0x192F6); OpNumber(x,1); MakeComm(0x1931C,"E = 8380h[Y + (IX+1)]"); MakeCode(x=0x1931C); OpNumber(x,1); MakeComm(0x19325,"A = 8300h[Y + (IX+1)]"); MakeComm(0x1932E,"Move dot to the right by B pixels"); MakeName(0x19330,"next_l"); MakeComm(0x19330,"Move dot to the left by B pixels"); MakeName(0x19341,"next_r"); MakeCode(0x19341); MakeName(0x1935E,"ropedone"); MakeCode(0x1935E); MakeCode(0x1936F); MakeCode(x=0x19385); OpOff(x,1,0x10000); MakeComm(0x19391,"If upward exit = this room, then\nWilly can't climb to top of rope"); MakeCode(x=0x193A3); OpNumber(x,1); MakeCode(x=0x193A8); OpNumber(x,1); MakeName(0x193B3,"paint_skip"); ExtLinA(0x193BB,0,";"); ExtLinA(0x193BB,1,"; This code does not appear to be used anywhere. It may"); ExtLinA(0x193BB,2,"; be part of a subroutine left from Manic Miner."); ExtLinA(0x193BB,3,";"); MakeCode(0x193BB); MakeCode(x=0x193BF); OpNumber(x,1); MakeName(0x193D1,"paint_items"); MakeCode(x=0x193D1); OpNumber(x,1); MakeComm(0x193D6,"HL->first object"); MakeComm(0x193DD,"Is object in this room?"); MakeCode(x=0x193DD); OpNumber(x,1); MakeComm(0x193E0,"No."); MakeComm(0x193E6,"Convert to screen position:"); MakeCode(x=0x193E6); OpNumber(x,1); MakeComm(0x193E8,"Bit 7 of [HL] = 0 for top 8 lines,\n 1 for bottom 8"); MakeComm(0x193EA,"[HL+256] = rest of Y coord, and X."); MakeComm(0x193ED,"If object is on a white cell (ie,\nWilly is touching it), collect it."); MakeCode(x=0x193F3); OpOff(x,1,0x10000); MakeName(0x193F7,"collect_item"); MakeCode(x=0x193FD); OpNumber(x,1); MakeCode(x=0x19401); OpChr(x,1); MakeComm(0x19409,"Play collect-item sound."); MakeCode(0x19409); MakeCode(x=0x1940C); OpNumber(x,1); MakeCode(x=0x1940E); OpNumber(x,0); OpNumber(x,1); MakeCode(x=0x19413); OpNumber(x,1); MakeComm(0x19427,"When we have all items, remove Maria."); MakeComm(0x1942C,"Flag item as collected."); MakeCode(0x19430); MakeComm(0x19433,"Make items change colour."); MakeComm(0x19436,"cycle through 4,5,6,7"); MakeCode(x=0x1943A); OpNumber(x,1); MakeCode(x=0x19445); OpNumber(x,1); MakeComm(0x19447,"DE = item address in back buffer"); MakeCode(x=0x19449); OpOff(x,1,0x10000); MakeComm(0x1944C,"Draw item bitmap"); MakeName(0x19452,"skip_item"); MakeName(0x19456,"draw_sprite"); MakeComm(0x19456,"Draw a generic sprite"); MakeCode(0x19456); MakeCode(x=0x1947B); OpNumber(x,1); MakeCode(x=0x1947E); OpNumber(x,1); MakeName(0x1948A,"exit_left"); MakeCode(0x1948A); MakeComm(0x19495,"Reset X to 30"); MakeCode(x=0x19495); OpNumber(x,1); MakeName(0x1949E,"exit_right"); MakeCode(0x1949E); MakeCode(x=0x194A7); OpNumber(x,1); MakeComm(0x194A9,"Reset X to 0"); MakeName(0x194B0,"exit_upwards"); MakeCode(0x194B0); MakeCode(x=0x194BB); OpNumber(x,1); MakeCode(x=0x194C0); OpNumber(x,1); MakeCode(x=0x194C5); OpNumber(x,1); MakeName(0x194D2,"exit_downwards"); MakeCode(0x194D2); MakeComm(0x194DF,"If falling, but not yet fatal fall,\nreset fall counter."); MakeCode(x=0x194F0); OpNumber(x,1); MakeName(0x194F9,"paint_conveyor"); MakeCode(0x194F9); MakeComm(0x19502,"Find conveyor address in room \nbackground bitmap"); MakeCode(x=0x19502); OpNumber(x,1); MakeName(0x19526,"convey_right"); MakeCode(0x19526); MakeName(0x19534,"check_maria"); MakeCode(0x19534); MakeComm(0x19537,"Bedroom?"); MakeCode(x=0x19537); OpNumber(x,1); OpDecimal(x,1); MakeCode(x=0x1954A); OpNumber(x,1); MakeCode(x=0x19550); OpNumber(x,1); MakeCode(x=0x19554); OpNumber(x,1); MakeCode(x=0x19556); OpNumber(x,1); MakeCode(x=0x1955A); OpNumber(x,1); MakeName(0x1955C,"paint_maria"); MakeCode(x=0x1955C); OpNumber(x,1); MakeCode(x=0x1955E); OpOff(x,1,0x10000); MakeCode(x=0x19569); OpNumber(x,1); MakeCode(x=0x1956F); OpNumber(x,1); MakeCode(0x19576); MakeName(0x19584,"check_toilet"); MakeCode(0x19584); MakeCode(x=0x19587); OpNumber(x,1); OpDecimal(x,1); MakeCode(x=0x1958D); OpNumber(x,1); MakeName(0x1959A,"check_bathroom"); MakeCode(0x1959A); MakeCode(x=0x1959D); OpNumber(x,1); OpDecimal(x,1); MakeName(0x195B2,"paint_toilet"); MakeComm(0x195B2,"Toilet sprite page"); MakeCode(x=0x195B2); OpNumber(x,1); MakeCode(x=0x195B4); OpOff(x,1,0x10000); MakeCode(x=0x195B8); OpNumber(x,1); MakeCode(x=0x195BE); OpNumber(x,1); MakeCode(0x195C8); MakeCode(x=0x195D2); OpNumber(x,1); MakeCode(0x1961E); MakeCode(0x19637); MakeCode(x=0x1963B); OpNumber(x,1); MakeComm(0x19651,"Willy's sprite"); MakeCode(x=0x19651); OpNumber(x,1); MakeComm(0x19656,"In the Nightmare Room?"); MakeComm(0x1965A,"Pig"); MakeCode(x=0x1965A); OpNumber(x,1); MakeComm(0x1965D,"Flip sprite left/right\nFor some reason Willy is reversed\nrelative to all other sprites in\nthe game"); MakeCode(x=0x1965D); OpNumber(x,1); MakeName(0x19668,"paint_sprite"); MakeComm(0x1966B,"H = address in back buffer"); MakeComm(0x1966F,"HL = byte base address"); MakeName(0x19680,"pr_str"); MakeCode(0x19680); MakeName(0x19691,"pr_char"); MakeComm(0x19691,"Find character in Spectrum font."); MakeCode(0x19691); MakeName(0x1969B,"pr_bitmap8"); MakeName(0x196A2,"play_tune"); MakeCode(0x196A2); MakeCode(x=0x196A3); OpNumber(x,1); MakeCode(x=0x196A6); OpNumber(x,1); OpDecimal(x,1); MakeCode(x=0x196AC); OpNumber(x,0); OpNumber(x,1); MakeCode(x=0x196B8); OpNumber(x,1); MakeName(0x196C9,"check_fire"); MakeCode(0x196C9); MakeCode(x=0x196CF); OpNumber(x,0); OpNumber(x,1); MakeCode(x=0x196D4); OpNumber(x,1); MakeCode(0x196DE); MakeCode(x=0x196DF); OpNumber(x,1); ExtLinA(0x196F4,0,";"); ExtLinA(0x196F4,1,"; This code clears the screen and reboots. It does not appear to be used."); ExtLinA(0x196F4,2,";"); MakeCode(x=0x196F4); OpOff(x,1,0x10000); MakeCode(x=0x196F7); OpOff(x,1,0x10000); MakeCode(x=0x196FA); OpNumber(x,1); MakeCode(x=0x196FF); OpOff(x,1,0x10000); MakeCode(x=0x19702); OpOff(x,1,0x10000); MakeCode(x=0x19705); OpNumber(x,1); MakeCode(x=0x1970C); OpNumber(x,1); ExtLinA(0x19718,0,";"); ExtLinA(0x19718,1,"; Apparently unused memory"); ExtLinA(0x19718,2,";"); MakeByte(0x19718); MakeArray(0x19718,232); MakeName(0x19800,"title_attrs"); MakeByte(0x19800); MakeArray(0x19800,512); MakeName(0x19A00,"bottom_attrs"); MakeByte(x=0x19A00); MakeArray(x,256); OpNumber(x,1); MakeName(0x19B00,"keycode_shapes"); MakeByte(x=0x19B00); MakeArray(x,128); OpNumber(x,1); MakeName(0x19B80,"keycode_attrs"); MakeByte(x=0x19B80); MakeArray(x,128); OpNumber(x,1); MakeName(0x19C00,"aNzEndpausev"); MakeStr(0x19C00,12); MakeWord(x=0x19C0C); OpNumber(x,0); MakeName(0x19C0E,"aIncEg"); MakeStr(0x19C0E,7); MakeWord(x=0x19C15); OpNumber(x,0); MakeName(0x19C17,"aJrNzPause_0"); MakeStr(0x19C17,13); MakeWord(x=0x19C24); OpNumber(x,0); MakeName(0x19C26,"aIncDx"); MakeStr(0x19C26,7); MakeWord(x=0x19C2D); OpNumber(x,0); MakeName(0x19C2F,"aJrNzPause"); MakeStr(0x19C2F,12); MakeByte(0x19C3B); MakeWord(x=0x19C3C); OpNumber(x,0); MakeByte(x=0x19C3E); MakeArray(x,2); OpChr(x,1); MakeName(0x19C40,"spr_foot"); MakeByte(0x19C40); MakeArray(0x19C40,32); MakeName(0x19C60,"spr_barrel"); MakeByte(x=0x19C60); MakeArray(x,32); OpNumber(x,1); MakeByte(0x19C80); MakeArray(0x19C80,128); MakeName(0x19D00,"spr_willy"); MakeByte(x=0x19D00); MakeArray(x,256); OpNumber(x,1); MakeName(0x19E00,"protection_code"); MakeByte(x=0x19E00); MakeArray(x,256); OpNumber(x,0); MakeByte(0x19F00); MakeArray(0x19F00,256); MakeName(0x1A000,"guardians"); ExtLinA(0x1A000,0,";"); ExtLinA(0x1A000,1,"; The guardian table. Format is:"); ExtLinA(0x1A000,2,"; Byte 0: Bits 0-2 give type: 0=None 1=Horiz 2=Vert 3=Rope 4=Arrow"); ExtLinA(0x1A000,3,"; Bit 3: Slow animation tick"); ExtLinA(0x1A000,4,"; Bit 4: Fast animation"); ExtLinA(0x1A000,5,"; Bits 5,6: Current frame"); ExtLinA(0x1A000,6,"; Bit 7: Direction (for arrow, L->R if set)"); ExtLinA(0x1A000,7,";"); ExtLinA(0x1A000,8,"; Byte 1: Bits 0-3 = ink. Bits 4-7=animation mask. "); ExtLinA(0x1A000,9,"; Displayed frame = (tick & animation) | start frame, for 0<=tick<=7"); ExtLinA(0x1A000,10,";"); ExtLinA(0x1A000,11,"; Byte 2: For arrow: Height*2. Else: Bits 0-4 give initial X, 5-7 give"); ExtLinA(0x1A000,12,"; start frame. Copied in from room definition when sprites defined."); ExtLinA(0x1A000,13,"; "); ExtLinA(0x1A000,14,"; Byte 3: Initial height (H/V only)"); ExtLinA(0x1A000,15,"; Byte 4: Movement speed"); ExtLinA(0x1A000,16,"; Byte 5: Sprite page"); ExtLinA(0x1A000,17,"; Bytes 6,7: For horizontal, min/max X. For vertical, min/max Y. For arrow,"); ExtLinA(0x1A000,18,"; byte 6 is arrow bitmap."); ExtLinA(0x1A000,19,";"); MakeByte(0x1A000); MakeArray(0x1A000,8); MakeByte(0x1A008); MakeArray(0x1A008,8); MakeByte(0x1A010); MakeArray(0x1A010,8); MakeByte(0x1A018); MakeArray(0x1A018,8); MakeByte(0x1A020); MakeArray(0x1A020,8); MakeByte(0x1A028); MakeArray(0x1A028,8); MakeByte(0x1A030); MakeArray(0x1A030,8); MakeByte(0x1A038); MakeArray(0x1A038,8); MakeByte(0x1A040); MakeArray(0x1A040,8); MakeByte(0x1A048); MakeArray(0x1A048,8); MakeByte(0x1A050); MakeArray(0x1A050,8); MakeByte(0x1A058); MakeArray(0x1A058,8); MakeByte(0x1A060); MakeArray(0x1A060,8); MakeByte(0x1A068); MakeArray(0x1A068,8); MakeByte(0x1A070); MakeArray(0x1A070,8); MakeByte(0x1A078); MakeArray(0x1A078,8); MakeByte(0x1A080); MakeArray(0x1A080,8); MakeByte(0x1A088); MakeArray(0x1A088,8); MakeByte(0x1A090); MakeArray(0x1A090,8); MakeByte(0x1A098); MakeArray(0x1A098,8); MakeByte(0x1A0A0); MakeArray(0x1A0A0,8); MakeByte(x=0x1A0A8); MakeArray(x,8); OpNumber(x,1); MakeByte(0x1A0B0); MakeArray(0x1A0B0,8); MakeByte(0x1A0B8); MakeArray(0x1A0B8,8); MakeByte(0x1A0C0); MakeArray(0x1A0C0,8); MakeByte(0x1A0C8); MakeArray(0x1A0C8,8); MakeByte(0x1A0D0); MakeArray(0x1A0D0,8); MakeByte(0x1A0D8); MakeArray(0x1A0D8,8); MakeByte(0x1A0E0); MakeArray(0x1A0E0,8); MakeByte(0x1A0E8); MakeArray(0x1A0E8,8); MakeByte(0x1A0F0); MakeArray(0x1A0F0,8); MakeByte(0x1A0F8); MakeArray(0x1A0F8,8); MakeByte(0x1A100); MakeArray(0x1A100,8); MakeByte(0x1A108); MakeArray(0x1A108,8); MakeByte(x=0x1A110); MakeArray(x,8); OpNumber(x,1); MakeByte(x=0x1A118); MakeArray(x,8); OpNumber(x,1); MakeByte(x=0x1A120); MakeArray(x,8); OpNumber(x,1); MakeByte(0x1A128); MakeArray(0x1A128,8); MakeByte(0x1A130); MakeArray(0x1A130,8); MakeByte(0x1A138); MakeArray(0x1A138,8); MakeByte(0x1A140); MakeArray(0x1A140,8); MakeByte(0x1A148); MakeArray(0x1A148,8); MakeByte(0x1A150); MakeArray(0x1A150,8); MakeByte(0x1A158); MakeArray(0x1A158,8); MakeByte(0x1A160); MakeArray(0x1A160,8); MakeByte(0x1A168); MakeArray(0x1A168,8); MakeByte(0x1A170); MakeArray(0x1A170,8); MakeByte(0x1A178); MakeArray(0x1A178,8); MakeByte(0x1A180); MakeArray(0x1A180,8); MakeByte(0x1A188); MakeArray(0x1A188,8); MakeByte(0x1A190); MakeArray(0x1A190,8); MakeByte(0x1A198); MakeArray(0x1A198,8); MakeByte(0x1A1A0); MakeArray(0x1A1A0,8); MakeByte(0x1A1A8); MakeArray(0x1A1A8,8); MakeByte(0x1A1B0); MakeArray(0x1A1B0,8); MakeByte(x=0x1A1B8); MakeArray(x,8); OpNumber(x,1); MakeByte(x=0x1A1C0); MakeArray(x,8); OpNumber(x,1); MakeByte(x=0x1A1C8); MakeArray(x,8); OpNumber(x,1); MakeByte(0x1A1D0); MakeArray(0x1A1D0,8); MakeByte(0x1A1D8); MakeArray(0x1A1D8,8); MakeByte(x=0x1A1E0); MakeArray(x,8); OpNumber(x,1); MakeByte(x=0x1A1E8); MakeArray(x,8); OpNumber(x,1); MakeByte(0x1A1F0); MakeArray(0x1A1F0,8); MakeComm(0x1A1F8,"Guardian 63: Unused"); MakeByte(x=0x1A1F8); MakeArray(x,8); OpNumber(x,1); MakeByte(0x1A200); MakeArray(0x1A200,8); MakeByte(x=0x1A208); MakeArray(x,8); OpNumber(x,1); MakeByte(0x1A210); MakeArray(0x1A210,8); MakeByte(x=0x1A218); MakeArray(x,8); OpNumber(x,1); MakeByte(0x1A220); MakeArray(0x1A220,8); MakeByte(0x1A228); MakeArray(0x1A228,8); MakeByte(0x1A230); MakeArray(0x1A230,8); MakeByte(0x1A238); MakeArray(0x1A238,8); MakeByte(0x1A240); MakeArray(0x1A240,8); MakeByte(0x1A248); MakeArray(0x1A248,8); MakeByte(x=0x1A250); MakeArray(x,8); OpNumber(x,1); MakeByte(x=0x1A258); MakeArray(x,8); OpNumber(x,1); MakeByte(x=0x1A260); MakeArray(x,8); OpNumber(x,1); MakeByte(x=0x1A268); MakeArray(x,8); OpNumber(x,1); MakeByte(x=0x1A270); MakeArray(x,8); OpNumber(x,1); MakeByte(x=0x1A278); MakeArray(x,8); OpNumber(x,1); MakeByte(x=0x1A280); MakeArray(x,8); OpNumber(x,1); MakeByte(0x1A288); MakeArray(0x1A288,8); MakeByte(0x1A290); MakeArray(0x1A290,8); MakeByte(0x1A298); MakeArray(0x1A298,8); MakeByte(0x1A2A0); MakeArray(0x1A2A0,8); MakeByte(0x1A2A8); MakeArray(0x1A2A8,8); MakeByte(0x1A2B0); MakeArray(0x1A2B0,8); MakeByte(0x1A2B8); MakeArray(0x1A2B8,8); MakeByte(0x1A2C0); MakeArray(0x1A2C0,8); MakeByte(0x1A2C8); MakeArray(0x1A2C8,8); MakeByte(x=0x1A2D0); MakeArray(x,8); OpNumber(x,1); MakeByte(0x1A2D8); MakeArray(0x1A2D8,8); MakeByte(0x1A2E0); MakeArray(0x1A2E0,8); MakeByte(x=0x1A2E8); MakeArray(x,8); OpNumber(x,1); MakeByte(0x1A2F0); MakeArray(0x1A2F0,8); MakeByte(0x1A2F8); MakeArray(0x1A2F8,8); MakeByte(0x1A300); MakeArray(0x1A300,8); MakeByte(0x1A308); MakeArray(0x1A308,8); MakeByte(x=0x1A310); MakeArray(x,8); OpNumber(x,1); MakeByte(0x1A318); MakeArray(0x1A318,8); MakeByte(0x1A320); MakeArray(0x1A320,8); MakeByte(0x1A328); MakeArray(0x1A328,8); MakeByte(0x1A330); MakeArray(0x1A330,8); MakeByte(0x1A338); MakeArray(0x1A338,8); MakeByte(0x1A340); MakeArray(0x1A340,8); MakeByte(0x1A348); MakeArray(0x1A348,8); MakeByte(0x1A350); MakeArray(0x1A350,8); MakeByte(x=0x1A358); MakeArray(x,8); OpNumber(x,1); MakeByte(x=0x1A360); MakeArray(x,8); OpNumber(x,1); MakeByte(0x1A368); MakeArray(0x1A368,8); MakeByte(0x1A370); MakeArray(0x1A370,8); MakeByte(0x1A378); MakeArray(0x1A378,8); MakeByte(0x1A380); MakeArray(0x1A380,8); MakeByte(0x1A388); MakeArray(0x1A388,8); MakeByte(0x1A390); MakeArray(0x1A390,8); MakeByte(0x1A398); MakeArray(0x1A398,8); MakeByte(0x1A3A0); MakeArray(0x1A3A0,8); MakeByte(0x1A3A8); MakeArray(0x1A3A8,8); MakeByte(0x1A3B0); MakeArray(0x1A3B0,8); MakeByte(0x1A3B8); MakeArray(0x1A3B8,8); MakeByte(0x1A3C0); MakeArray(0x1A3C0,8); MakeByte(0x1A3C8); MakeArray(0x1A3C8,8); MakeByte(0x1A3D0); MakeArray(0x1A3D0,8); MakeByte(0x1A3D8); MakeArray(0x1A3D8,8); MakeByte(0x1A3E0); MakeArray(0x1A3E0,8); MakeByte(0x1A3E8); MakeArray(0x1A3E8,8); MakeByte(0x1A3F0); MakeArray(0x1A3F0,8); MakeByte(x=0x1A3F8); MakeArray(x,7); OpNumber(x,1); MakeName(0x1A3FF,"item_count"); MakeByte(x=0x1A3FF); OpNumber(x,0); MakeName(0x1A400,"item_locs"); MakeByte(0x1A400); MakeArray(0x1A400,256); MakeByte(0x1A500); MakeArray(0x1A500,256); MakeByte(0x1A600); MakeArray(0x1A600,256); MakeByte(0x1A700); MakeArray(0x1A700,256); MakeByte(0x1A800); MakeArray(0x1A800,256); MakeByte(0x1A900); MakeArray(0x1A900,256); MakeByte(0x1AA00); MakeArray(0x1AA00,256); MakeByte(0x1AB00); MakeArray(0x1AB00,256); MakeByte(x=0x1AC00); MakeArray(x,256); OpNumber(x,1); MakeByte(0x1AD00); MakeArray(0x1AD00,256); MakeByte(x=0x1AE00); MakeArray(x,256); OpNumber(x,1); MakeByte(x=0x1AF00); MakeArray(x,256); OpNumber(x,1); MakeByte(0x1B000); MakeArray(0x1B000,256); MakeByte(0x1B100); MakeArray(0x1B100,256); MakeByte(0x1B200); MakeArray(0x1B200,256); MakeByte(0x1B300); MakeArray(0x1B300,256); MakeByte(0x1B400); MakeArray(0x1B400,256); MakeByte(0x1B500); MakeArray(0x1B500,256); MakeByte(0x1B600); MakeArray(0x1B600,256); MakeByte(0x1B700); MakeArray(0x1B700,256); MakeByte(0x1B800); MakeArray(0x1B800,256); MakeByte(x=0x1B900); MakeArray(x,256); OpNumber(x,1); MakeByte(0x1BA00); MakeArray(0x1BA00,256); MakeByte(0x1BB00); MakeArray(0x1BB00,256); MakeByte(0x1BC00); MakeArray(0x1BC00,256); MakeByte(0x1BD00); MakeArray(0x1BD00,256); MakeByte(0x1BE00); MakeArray(0x1BE00,256); MakeByte(x=0x1BF00); MakeArray(x,256); OpNumber(x,1); ExtLinA(0x1C000,0,";"); ExtLinA(0x1C000,1,"; Start of rooms table"); ExtLinA(0x1C000,2,";"); MakeByte(0x1C000); MakeArray(0x1C000,256); MakeByte(0x1C100); MakeArray(0x1C100,256); MakeByte(0x1C200); MakeArray(0x1C200,256); MakeByte(x=0x1C300); MakeArray(x,256); OpNumber(x,1); MakeByte(0x1C400); MakeArray(0x1C400,256); MakeByte(x=0x1C500); MakeArray(x,256); OpNumber(x,1); MakeByte(x=0x1C600); MakeArray(x,256); OpNumber(x,1); MakeByte(0x1C700); MakeArray(0x1C700,256); MakeByte(0x1C800); MakeArray(0x1C800,256); MakeByte(0x1C900); MakeArray(0x1C900,256); MakeByte(0x1CA00); MakeArray(0x1CA00,256); MakeByte(0x1CB00); MakeArray(0x1CB00,256); MakeByte(0x1CC00); MakeArray(0x1CC00,256); MakeByte(0x1CD00); MakeArray(0x1CD00,256); MakeByte(0x1CE00); MakeArray(0x1CE00,256); MakeByte(0x1CF00); MakeArray(0x1CF00,256); MakeByte(0x1D000); MakeArray(0x1D000,256); MakeByte(0x1D100); MakeArray(0x1D100,256); MakeByte(0x1D200); MakeArray(0x1D200,256); MakeByte(x=0x1D300); MakeArray(x,256); OpNumber(x,1); MakeByte(x=0x1D400); MakeArray(x,256); OpNumber(x,1); MakeByte(0x1D500); MakeArray(0x1D500,256); MakeByte(0x1D600); MakeArray(0x1D600,256); MakeByte(0x1D700); MakeArray(0x1D700,256); MakeByte(0x1D800); MakeArray(0x1D800,256); MakeByte(0x1D900); MakeArray(0x1D900,256); MakeByte(x=0x1DA00); MakeArray(x,256); OpNumber(x,1); MakeByte(0x1DB00); MakeArray(0x1DB00,256); MakeByte(x=0x1DC00); MakeArray(x,256); OpNumber(x,0); MakeByte(0x1DD00); MakeArray(0x1DD00,256); MakeByte(0x1DE00); MakeArray(0x1DE00,256); MakeByte(0x1DF00); MakeArray(0x1DF00,256); MakeByte(x=0x1E000); MakeArray(x,256); OpNumber(x,1); MakeByte(x=0x1E100); MakeArray(x,256); OpNumber(x,0); MakeByte(x=0x1E200); MakeArray(x,256); OpNumber(x,1); MakeByte(x=0x1E300); MakeArray(x,256); OpNumber(x,1); MakeByte(0x1E400); MakeArray(0x1E400,256); MakeByte(0x1E500); MakeArray(0x1E500,256); MakeByte(x=0x1E600); MakeArray(x,256); OpNumber(x,1); MakeByte(0x1E700); MakeArray(0x1E700,256); MakeByte(0x1E800); MakeArray(0x1E800,256); MakeByte(0x1E900); MakeArray(0x1E900,256); MakeByte(0x1EA00); MakeArray(0x1EA00,256); MakeByte(0x1EB00); MakeArray(0x1EB00,256); MakeByte(0x1EC00); MakeArray(0x1EC00,256); MakeByte(x=0x1ED00); MakeArray(x,256); OpNumber(x,1); MakeByte(x=0x1EE00); MakeArray(x,256); OpNumber(x,0); ExtLinA(0x1EF00,0,";"); ExtLinA(0x1EF00,1,"; The unused room, \"[\""); ExtLinA(0x1EF00,2,";"); MakeByte(0x1EF00); MakeArray(0x1EF00,256); MakeByte(0x1F000); MakeArray(0x1F000,256); MakeByte(x=0x1F100); MakeArray(x,256); OpNumber(x,1); MakeByte(0x1F200); MakeArray(0x1F200,256); MakeByte(0x1F300); MakeArray(0x1F300,256); MakeByte(0x1F400); MakeArray(0x1F400,256); MakeByte(0x1F500); MakeArray(0x1F500,256); MakeByte(0x1F600); MakeArray(0x1F600,256); MakeByte(0x1F700); MakeArray(0x1F700,256); MakeByte(0x1F800); MakeArray(0x1F800,256); MakeByte(0x1F900); MakeArray(0x1F900,256); MakeByte(0x1FA00); MakeArray(0x1FA00,256); MakeByte(0x1FB00); MakeArray(0x1FB00,256); MakeByte(0x1FC00); MakeArray(0x1FC00,256); ExtLinA(0x1FD00,0,";"); ExtLinA(0x1FD00,1,"; End of rooms. The remainder of memory contains what appears to be "); ExtLinA(0x1FD00,2,"; Z80 code - possibly part of whatever Matthew Smith used to transfer"); ExtLinA(0x1FD00,3,"; JSW from the TRS80 to the Spectrum. I have not disassembled it."); ExtLinA(0x1FD00,4,";"); MakeByte(0x1FD00); MakeArray(0x1FD00,768); } //------------------------------------------------------------------------ // Call all byte feature functions: static Bytes(void) { Bytes_0(); } // End of file.