├── .gitignore ├── sunrise_special ├── 1 │ ├── te_zachte_psg_bij_de_nms_8250_55_80.md │ ├── het_rel_file_formaat.md │ ├── track_0_op_de_turbo-r.md │ └── set_scroll_in_basic.md ├── 2 │ ├── stereo_scc.md │ ├── pcm_routines_van_de_bios.md │ └── memman_2.42.md ├── 3 │ ├── Getdisk.md │ ├── getdisk.md │ ├── turbo_pascal_patch.md │ ├── scrollen_in_kun_basic.md │ └── tsr_development_kit.md ├── 4 │ ├── read_to_kana.md │ ├── copdisk.md │ ├── r800_drive.md │ ├── tweede_drive_aan_turbor.md │ ├── boot2com.md │ ├── hex_printen.md │ ├── MBScan.md │ ├── mbscan.md │ └── msx_audio.md ├── 5 │ ├── frequenty_analyzer.md │ ├── hd_op_write_protected.md │ ├── Uncall.md │ ├── uncall.md │ ├── fout_vertaler.md │ ├── make_and_change_directory.md │ ├── Shem.md │ ├── shem.md │ └── r800_rom_ram_lezen.md ├── 6 │ ├── files_voor_msx_view.md │ ├── scc_geluid_via_stereo_pak.md │ ├── HDSpeed.md │ ├── hdspeed.md │ ├── Modula2.md │ ├── modula2.md │ └── memman_tsr_development_kit.md └── 7 │ └── music_module_naar_256k.md └── future_disk ├── 11 └── pascal_1.md ├── 15 ├── Looplichtje.md ├── looplichtje.md └── pascal_5.md ├── 18 └── undocumented_z80_code.md ├── 19 ├── looplichtjes_2.md ├── basic_cursus_8.md ├── basic_voor_beginners.md └── moonblaster_music_cursus_2.md ├── 20 ├── data_compressie_4.md └── muizen_in_basic.md ├── 21 ├── Ledjes.md ├── ledjes.md ├── screen_12.md └── moonblaster_music_cursus_4.md ├── 24 └── v9958_in_ml.md ├── 28 ├── msx-dos2_deel_2.md ├── msx-dos2_deel_3.md └── the_pcm_sample_processor.md ├── 30 ├── paint_in_ml.md ├── advanced_basic.md └── assembly_voor_beginners.md ├── 32 ├── pascal_cursus_2_en.md └── pascal_cursus_1_en.md ├── 33 ├── advanced_basic_3.md └── assembly_cursus_2.md ├── 35 ├── Datacompressie.md ├── datacompressie.md └── copy_in_basic.md ├── 36 ├── advanced_basic_5.md ├── assembly_cursus_5.md ├── mathpack_2.md └── rom_images_laden.md ├── 37 ├── mathpack_3.md └── advanced_basic_6.md ├── 40 └── assembly_cursus_8.md └── 42 ├── Lijntjes.md └── lijntjes.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | sunrise_special/7-org 3 | 4 | -------------------------------------------------------------------------------- /sunrise_special/2/stereo_scc.md: -------------------------------------------------------------------------------- 1 | # S T E R E O S C C 2 | 3 | Het idee van het ombouwen van de SCC naar een zogenaamde 4 | stereo SCC is niet nieuw. Maar omdat ik nog nooit ergens een 5 | tekst hierover ben tegengekomen, heb ik deze tekst maar even 6 | geschreven. Voor de knutselaar is het een leuk projectje! 7 | 8 | Waarschuwing: Het uitvoeren van deze ingreep in uw SCC is op 9 | eigen risiko, gaat er iets mis dan vervalt uw garantie. 10 | Sunrise is op geen enkele manier aansprakelijk voor enige 11 | schade die uit dit project kan voortvloeien! 12 | 13 | Het ombouwen is eigenlijk gigantisch simpel, maar desondanks 14 | heb ik de volledige beschrijving maar even als DP file op 15 | deze schijf gezet. Laad deze in met Dynamic Publisher (naam 16 | van de file: STEREOSC.PCT). 17 | 18 | Veel plezier met de "stereo SCC" en tot een volgende keer! 19 | 20 | Haiko de Boer -------------------------------------------------------------------------------- /sunrise_special/6/files_voor_msx_view.md: -------------------------------------------------------------------------------- 1 | F I L E S V O O R M S X - V I E W 2 | 3 | 4 | Jan van Valburg heeft de volgende files gemaakt of er een 5 | Nederlandse handleiding bijgemaakt: 6 | 7 | VIEW-01.PMA: Een printerdriver voor de EPSON LQ-400. 8 | VIEW-02.PMA: Een programma om MIDI-files af te spelen onder 9 | MSX-View. 10 | VIEW-03.PMA: Hiermee is het mogelijk om C programma's voor 11 | onder MSX-View te schrijven. 12 | VIEW-04.PMA: Een aantal stempels voor MSX-View. 13 | VIEW-05.PMA: Een demoversie van de patch naar Engels van 14 | MGF. 15 | 16 | De volgende 2 files zijn tenslotte nog andere applicaties 17 | voor MSX-View, compleet in het Japans: 18 | 19 | BOMBS.PMA : Bombsweeper voor MSX-View. 20 | MEIDOSS.PMA: Een programma waarmee iets met samples mogelijk 21 | is. 22 | 23 | Kasper Souren 24 | -------------------------------------------------------------------------------- /future_disk/20/data_compressie_4.md: -------------------------------------------------------------------------------- 1 | --- Data Compressie 4 --- 2 | 3 | ���� 4 | ���� 5 | ���� 6 | ���� 7 | 8 | 9 | 10 | Hoi, nadat ik vorige keer in verband met Tilburg geen kans 11 | gezien had om nog een aflevering te maken zal ik dat proberen 12 | nu goed te maken. Vorige keer beloofde ik dat we de methode 13 | die ik daar beschreef in code zouden gaan omzetten. 14 | 15 | Nou, dat is gebeurd, maar omdat ik maar weinig tijd 16 | heb(NvdR: smoesjes, eikel), is enkel de listing op deze disk 17 | geplaatst, van een compleet werkende in en uitpakker onder 18 | DOS. 19 | 20 | De listing staat onder de naam "RUNLEN.GEN" op de schijf. 21 | Die is te assembleren met GEN80. In Wbass2 inladen kan ook, 22 | maar dan zul je eerst alle tab's moeten laten vervangen door 23 | spaties (inconsequentie van Wbass2). 24 | 25 | Veel plezier ermee en volgende keer volgt de uitleg bij de 26 | listing. 27 | 28 | 29 | Jan-Willem van Helden 30 | -------------------------------------------------------------------------------- /sunrise_special/4/read_to_kana.md: -------------------------------------------------------------------------------- 1 | R E A D T O K A N A 2 | 3 | 4 | Dit programma is door Erik Maas geschreven om het Kanji 5 | gedeelte van de DRAM toch nog nuttig te kunnen gebruiken (de 6 | studenten Japans onder ons kunnen dus alvast op ESC 7 | drukken). 8 | 9 | Het laadt een file die op #4000 moet komen te staan in over 10 | de DRAM page van de Kanji. Erik noemt het de KANA page, maar 11 | ja, het maakt niet veel uit hoe je het noemt, veel nut(h) 12 | heeft deze page toch niet. 13 | 14 | Het kan echter wel handig zijn om KUN-BASIC, of andere 15 | programma's die CALL's mogelijk maken, erin te zetten. 16 | Misschien kan ook WBASS2 erin worden gezet, maar dit moeten 17 | degenen die dit programma veelvuldig gebruiken zelf maar 18 | uitzoeken. 19 | 20 | Kasper Souren 21 | -------------------------------------------------------------------------------- /sunrise_special/5/frequenty_analyzer.md: -------------------------------------------------------------------------------- 1 | F R E Q U E N C Y A N A L Y Z E R 2 | 3 | 4 | Met FRQANAL.BAS is het mogelijk om op je turbo R samples te 5 | onderzoeken op frequenties. Eerst wordt een stukje 6 | gesampled, en dat wordt dan onderzocht. Vervolgens kun je 7 | met de muis kijken welke frequentie veel voorkomt. 8 | 9 | DTMF.BAS doet hetzelfde, maar kijkt alleen maar naar de 10 | druktoetsfrequenties, en geeft daarna op welke toets het 11 | geweest is. Het werkte goed met mijn telefoon, al moet je 12 | natuurlijk wel de juiste kant van de hoorn bij de microfoon 13 | houden. 14 | 15 | Zonder KUN-BASIC werkt FRQANAL.BAS niet, en DTMF.BAS slechts 16 | zeer langzaam. FRQANAL gebruikt namelijk ook een stukje 17 | machinecode. Dat is eventueel wel om te zetten, maar wie 18 | heeft nou niet de beschikking over KUN-BASIC? 19 | 20 | Kasper Souren 21 | -------------------------------------------------------------------------------- /sunrise_special/5/hd_op_write_protected.md: -------------------------------------------------------------------------------- 1 | H D O P W R I T E P R O T E C T E D 2 | 3 | 4 | Soms is het fijn om je HD op write protected te hebben 5 | staan. Bijvoorbeeld bij het proberen van een of ander 6 | luguber diskje met je harddisk aangesloten. Het op write 7 | protected zetten is op zich niet veel moeite. Alleen even 8 | FORMAT onder MSX-DOS of CALL FORMAT onder BASIC en een paar 9 | instellingen. 10 | 11 | Maar het is lastig als je dat 4 keer in moet typen (voor 12 | elke partitie ��n keer). Een batchfile lijkt de oplossing, 13 | maar dan wordt het vrij traag. Zo kwam Erik Maas al een hele 14 | tijd geleden op het idee om PROTECT.COM te maken. Een 15 | COM-file die even snel de harddisk op write protected zet. 16 | 17 | De source PROTECT.GEN staat ook op disk, zodat je het simpel 18 | kunt aanpassen voor een harddisk met een ander aantal 19 | partities. 20 | 21 | Kasper Souren 22 | -------------------------------------------------------------------------------- /sunrise_special/5/Uncall.md: -------------------------------------------------------------------------------- 1 | U N C A L L 2 | 3 | 4 | Een uitstapje naar MSX-DOS zorgt ervoor dat als je in BASIC 5 | een programma hebt geladen, dat zichzelf in page 1 6 | (#4000-#7FFF) van het RAM plaatst en gebruik maakt van een 7 | CALL commando, de computer blijft hangen bij nog eens een 8 | CALL commando. 9 | 10 | UNCALL is hier de oplossing voor. UNCALL zorgt ervoor dat de 11 | data, die ervoor zorgt, dat er door de computer naar page 1 12 | van het RAM plaatst, wordt weggehaald. Als je UNCALL.COM dus 13 | aanroept in REBOOT.BAT, gaat het dus niet meer fout. 14 | 15 | Omdat je zonder harddisk toch niet vaak naar MSX-DOS 16 | teruggaat, en je zeker geen plaats hebt voor kleine 17 | utility's die niet echt nodig zijn, heb ik dit stukje toch 18 | maar in de harddisk rubriek geplaatst. 19 | 20 | UNCALL is overigens geschreven door Roderik Muit van 21 | FCS-BBS: 01859-13957, 24 uur per dag. 22 | 23 | Kasper Souren 24 | -------------------------------------------------------------------------------- /sunrise_special/5/uncall.md: -------------------------------------------------------------------------------- 1 | U N C A L L 2 | 3 | 4 | Een uitstapje naar MSX-DOS zorgt ervoor dat als je in BASIC 5 | een programma hebt geladen, dat zichzelf in page 1 6 | (#4000-#7FFF) van het RAM plaatst en gebruik maakt van een 7 | CALL commando, de computer blijft hangen bij nog eens een 8 | CALL commando. 9 | 10 | UNCALL is hier de oplossing voor. UNCALL zorgt ervoor dat de 11 | data, die ervoor zorgt, dat er door de computer naar page 1 12 | van het RAM plaatst, wordt weggehaald. Als je UNCALL.COM dus 13 | aanroept in REBOOT.BAT, gaat het dus niet meer fout. 14 | 15 | Omdat je zonder harddisk toch niet vaak naar MSX-DOS 16 | teruggaat, en je zeker geen plaats hebt voor kleine 17 | utility's die niet echt nodig zijn, heb ik dit stukje toch 18 | maar in de harddisk rubriek geplaatst. 19 | 20 | UNCALL is overigens geschreven door Roderik Muit van 21 | FCS-BBS: 01859-13957, 24 uur per dag. 22 | 23 | Kasper Souren 24 | -------------------------------------------------------------------------------- /sunrise_special/5/fout_vertaler.md: -------------------------------------------------------------------------------- 1 | F O U T V E R T A L E R 2 | 3 | 4 | This TSR is downloaded in BBS Roefsoft, and translates all 5 | error messages of MSX-BASIC 2.1 and disk-BASIC 1.0 into 6 | Dutch. The effect of this is rather funny! 7 | 8 | 9 | F I L E N I E T G E V O N D E N 10 | 11 | This is, as was to be expected, the translation of "File not 12 | found". Actually it should be "Bestand niet gevonden". But 13 | it's comical enough without "bestand". It's also a bit weird 14 | that the TSR is called "Error Translator", and not 15 | "Fout Vertaler". 16 | 17 | I hope nobody really needs this TSR, for the one who does 18 | need it, can't play a single decent MSX-game, and can't 19 | understand any scroll-text - and he can't even read this 20 | text, and so he wouldn't even know the program would exist! 21 | 22 | Kasper Souren 23 | 24 | 25 | P.S. The file ET.TSR is the meant TSR and you can find it on 26 | this disk. 27 | -------------------------------------------------------------------------------- /sunrise_special/4/copdisk.md: -------------------------------------------------------------------------------- 1 | C O P D I S K 2 | 3 | 4 | COPDISK is een kleine harddisk utility dat is voortgekomen 5 | uit GETDISK en PUTDISK. 6 | 7 | Met COPDISK kan een 720 kB diskette worden gekopieerd door 8 | gebruik te maken van de harddisk. De diskette wordt namelijk 9 | in ��n keer ingelezen en op de harddisk opgeslagen. 10 | Vervolgens kan hij zo vaak als je maar wilt worden 11 | gekopieerd op een andere diskette. Dit programma is vooral 12 | handig voor mensen die minder dan 1 MB geheugen in hun 13 | computer hebben en dus met andere kopieerprogramma's twee of 14 | meer keer moeten wisselen. 15 | 16 | De plaats waar COPDISK de diskette tijdelijk opslaat wordt 17 | bepaald door het environment item TEMP. Dit item wordt ook 18 | door MSX-DOS 2 gebruikt voor tijdelijke bestanden. 19 | 20 | Zorg er dus voor dat met 21 | 22 | SET TEMP=drive:\path 23 | 24 | een harddiskpartitie wordt opgegeven waar minimaal 720 kB 25 | vrij is. Standaard wordt met TEMP verwezen naar A:\. 26 | 27 | Michel Shuqair 28 | -------------------------------------------------------------------------------- /sunrise_special/5/make_and_change_directory.md: -------------------------------------------------------------------------------- 1 | M A K E A N D C H A N G E D I R E C T O R Y 2 | 3 | 4 | Het programma MCD.COM is gemaakt om de volgende combinatie 5 | te vereenvoudigen: 6 | 7 | MD \UTILS\INPAK 8 | CD \UTILS\INPAK 9 | 10 | Met MCD wordt dit dan: 11 | 12 | MCD \UTILS\INPAK 13 | 14 | De subdirectory INPAK wordt gemaakt in de directory \UTILS 15 | en de huidige directory wordt ingesteld op \UTILS\INPAK. 16 | 17 | 18 | B A T C H F I L E 19 | 20 | De programmeur van MCD.COM heeft echter niet gedacht aan de 21 | mogelijkheid van een batchfile. De volgende twee regels 22 | hebben immmers hetzelfde effect als de COM-file: 23 | 24 | MD %1 25 | CD %1 26 | 27 | En als je deze 2 regels invoert in een batchfile genaamd 28 | MCD.BAT, is de werking precies hetzelfde, op ��n ding na: de 29 | mogelijkheid om de directory meteen hidden te maken. 30 | 31 | By the way, MCD.COM is gemaakt door Fokke Post en zit in de 32 | file MCD.PMA, die op deze disk staat. 33 | 34 | Kasper Souren 35 | -------------------------------------------------------------------------------- /sunrise_special/6/scc_geluid_via_stereo_pak.md: -------------------------------------------------------------------------------- 1 | S C C G E L U I D V I A S T E R E O P A K 2 | 3 | 4 | Op een vorige Special stond een tekst over de STEREO SCC, om 5 | het geluid (SCC-PSG) gescheiden weer te geven. Hiervoor 6 | moest u een kleine ingreep doen in uw SCC-cartridge. In deze 7 | tekst wordt uitgelegd hoe u het SCC- en het PSG-signaal door 8 | uw versterker kunt weergeven d.m.v. de stereo FM-PAK! 9 | 10 | Plaats in een van de cartridgesloten uw SCC-cartridge en in 11 | de andere uw stereo FM-PAK. Sluit nu de FM-PAK aan met de 2 12 | bijgeleverde kabels. Hoe dit moet staat in de handleiding 13 | vermeld. 14 | 15 | Laad nu een SCC-demo of start bijvoorbeeld Solid Snake of 16 | SD-Snatcher op. U zult merken dat het SCC geluid nu prima en 17 | helder door uw stereo-installatie wordt weergegeven. Het 18 | geluid wordt uiteraard nu ook door uw monitor afgespeeld. 19 | Bezitters van alleen een monitor (bij hen ontbreekt dus een 20 | stereo-installatie of er zit geen AUX-ingang op), hoeven 21 | uiteraard deze aansluiting niet te maken. 22 | 23 | Hopelijk kunt u op deze manier beter en mooier van uw SCC 24 | geluid genieten! Zeker als u SD-Snatcher speelt met de BASS 25 | voluit. De ontploffingen van de vijanden klinken dan pas 26 | echt "ECHT"! Succes! 27 | 28 | Haiko de Boer 29 | -------------------------------------------------------------------------------- /sunrise_special/1/te_zachte_psg_bij_de_nms_8250_55_80.md: -------------------------------------------------------------------------------- 1 | # T E Z A C H T E P S G B I J D E N M S 8 2 5 0 / 5 5 / 8 0 2 | 3 | 4 | Vaak is het zo dat de PSG wegvalt door het gebruik van een 5 | FM-PAK op de NMS 8250/55 en 80. Dit is jammer, want de 6 | PSG-drums zijn vaak onmisbaar bij FM-PAK songs! 7 | 8 | Nu kan je dit probleem heel gemakkelijk oplossen. Men heeft 9 | hier het kabeltje dat bij de PAK wordt geleverd voor nodig. 10 | (van koptelefoon naar 1 tulpstekker). Druk nu de tulpstekker 11 | in de monitor (AUDIO ingang) en de koptelefoon in de 12 | buitenste uitgang van de FM-PAK, nu wordt de PSG door de 13 | monitor gespeeld, maar de PAK muziek niet, deze zul je door 14 | een versterker moeten laten weergeven. 15 | 16 | In mijn geval was dit een PSEUDO-STEREO versterker. Om de 17 | PAK muziek door de versterker te laten klinken, heb je een 18 | stekkerkabel nodig, met tenminste 1 tulpstekker, voor in de 19 | AUDIO uitgang van de MSX. Aan de andere uiteinde zal een 20 | stekker moeten zitten die in je versterker/installatie past. 21 | Meestal is dit ook een tulpstekker (soms ook 2) 22 | 23 | Als alles goed is gegaan zal nu de PSG samen met de FM-PAK 24 | te horen zijn, welliswar gescheiden, maar toch... 25 | 26 | Voor meer details kun je het beste even de file 27 | "ZACHTPSG.PCT" inladen in Dynamic Publisher. Hierin staat 28 | alles nog eens in een handig schema uitgelegd. 29 | 30 | Mocht je ondanks nog vragen hebben, bel dan eens met BBS 31 | SUNRISE NOORD (dagelijks 22-7, tel: 05126-2123 of gewoon 32 | spraak na 18:00 uur, vragen naar Haiko...) 33 | 34 | Veel luisterplezier, 35 | 36 | Haiko de Boer 37 | -------------------------------------------------------------------------------- /sunrise_special/4/r800_drive.md: -------------------------------------------------------------------------------- 1 | R 8 0 0 D R I V E 2 | 3 | 4 | Dit programma van XelaSoft heeft ongeveer hetzelfde effect 5 | als mijn Fastdrive, die op Sunrise Magazine #6 stond. Alleen 6 | kun je met R800 drive nog bepalen bij welke drives wordt 7 | teruggeschakeld. 8 | 9 | 10 | L E D 'J E 11 | 12 | Het programma werkte eerste niet op mijn FS-A1ST, maar ik 13 | heb dat even aangepast. Ook heb ik het zo gemaakt, dat je 14 | ook kunt zien wanneer de Z80 mode wordt aangeschakeld. Dat 15 | geeft mij een veiliger gevoel (nee, het is niet 16 | vergelijkbaar met OB). 17 | 18 | 19 | T E R U G S C H A K E L E N 20 | 21 | Het terugschakelen moet gebeuren bij de gewone diskdrive �n, 22 | als je een MAK interface hebt, bij de harddisk. De MK en HSH 23 | SCSI interfaces kunnen de snelheid van de R800 wel gewoon 24 | aan. 25 | 26 | Het enige nadeel van dit programma t.o.v. mijn Fastdrive is 27 | dat het vanuit BASIC moet worden opgestart. Dat komt omdat 28 | het een stuk geheugen moet reserveren. 29 | 30 | De source staat ook op disk, dit om te laten zien hoe je 31 | TSR's onder MSX-DOS 2 kunt maken, zonder MemMan te 32 | gebruiken. 33 | 34 | Kasper Souren 35 | -------------------------------------------------------------------------------- /future_disk/19/looplichtjes_2.md: -------------------------------------------------------------------------------- 1 | LOOPLICHTJES 2 | 3 | ���� 4 | ���� 5 | ���� 6 | ���� 7 | 8 | Enige tijd geleden, FD #15 om precies te zijn, plaatste ik een 9 | artikeltje over looplichtjes met daarbij een schemaatje om 't 10 | zooitje te bouwen. Ik beloofde daarbij ook een programmaatje 11 | om de aansturing wat makkelijker te maken. Welnu, van dat 12 | programmaatje is nooit al te veel gekomen wegens tijdgebrek 13 | maar een aantal bellers meende dat 't zonder dat 14 | programmaatje niet mogelijk was om 't looplichtje aan te 15 | sturen. Dit is echter niet het geval. Op FD #15 stond namelijk 16 | een programma dat naar de naam 'LOOPLICH.BAS' luisterde. Met 17 | dit programma was 't wel degelijk mogelijk om het looplichtje 18 | aan te sturen. Dat verklaart hopelijk 't ��n en ander en het 19 | is dus ook niet zo dat ik de lezers van de FD compleet 20 | belazer. Aansturen was wel degelijk mogelijk, ook in de tijd 21 | van FD #15 al. Ik heb nu nogmaals het programma op de 22 | disk laten zetten en ik hoop dat het eventuele misverstand 23 | uit de lucht is geholpen. In het vervolg raad ik leden van 24 | de FD dan ook aan om bij problemen niet contact op te nemen 25 | met de redactie maar met mij persoonlijk aangezien ik zelf 26 | meer verstand heb van mijn eigen brouwsels dan onze 27 | -onkundige- redactie. Bij deze dan nogmaals mijn adres en 28 | telefoonnummer en miscchien dat mijn telefoonnummer 29 | ook door de redactie kan worden opgenomen bij de helplines 30 | aangezien ik nooit te beroerd ben om de mede MSXer te helpen. 31 | (NvDR: je bent te goed voor deze wereld, Keizer!) 32 | 33 | Tobias Keizer 34 | Oudestraat 21-2 35 | 8261 CC Kampen 36 | Tel: 05202-31348 37 | Fax: 05202-31348 38 | 39 | Tobias 'Light Emiting Brain' Keizer 40 | -------------------------------------------------------------------------------- /sunrise_special/4/tweede_drive_aan_turbor.md: -------------------------------------------------------------------------------- 1 | T W E E D E D R I V E A A N T U R B O R 2 | 3 | 4 | Op de turbo R (FS-A1ST en FS-A1GT) zit normaal geen 5 | drive-aansluiting. Met onderstaande gegevens is dat echter 6 | simpel zelf te maken. 7 | 8 | 9 | Printaan- 15 pens 34 pens 10 | sluiting: sub-d: shugart: 11 | 12 | +5 volt : pen 1 pen 1 voedingsplug 13 | Ground : pen 7 pen 2 voedingsplug 14 | Ready : pen 6 pen 3 pen 34 15 | Side select : pen 9 pen 4 pen 32 16 | Read data : pen 11 pen 5 pen 30 17 | Write protected: pen 12 pen 6 pen 28 18 | Track 0 : pen 13 pen 7 pen 26 19 | Write gate : pen 14 pen 8 pen 24 20 | Write data : pen 16 pen 9 pen 22 21 | Step : pen 18 pen 10 pen 20 22 | Direction : pen 19 pen 11 pen 18 23 | Motor on : pen 20 pen 12 pen 16 24 | Drive select : pen 22 pen 13 pen 10 25 | Index : pen 23 pen 14 pen 8 26 | Disk change : pen 24 pen 15 pen 2 27 | 28 | Drive instellen als DS0!! 29 | 30 | 31 | D I S C L A I M E R 32 | 33 | Stichting Sunrise is NIET aansprakelijk voor eventuele 34 | schade aan mens en/of machine door uitvoering van dit 35 | project. 36 | -------------------------------------------------------------------------------- /future_disk/18/undocumented_z80_code.md: -------------------------------------------------------------------------------- 1 | -- MCODE -- 2 | 3 | 4 | ���� 5 | ���� 6 | ���� 7 | ���� 8 | ���� 9 | 10 | Stop de persen, gooit uw PC uit het raam, speelt uw MOD's op 11 | via uw Simpl, schrijf u in voor een survival-tocht in 12 | Grozny, omhels S.B. en wordt lid van de EO. Wat is immers 13 | het geval? 14 | 15 | Sinds ik mijn tijd verdoe op de TU in Eindhoven, leer je 16 | allerlei dingen over computers en kom je andere MSX-ers 17 | tegen. Zo hoorde ik laatst van Zelly (wie dat is zoek je 18 | zelf maar uit) dat er alweer een ongedocumenteerde 19 | instructie van de Z80 bestaat: 20 | 21 | IN F,(C) 22 | 23 | Huh, was dat niet een R800-commando?? In m'n Z80? 24 | Jawel hoor, die klojo's van Zilog hebben ons al bijna 20 25 | jaar instructies verzwegen (durven ze wel stelletje boeren). 26 | Een daarvan is dus deze. Je bereikt hem door in WBASS-2 in 27 | de editor het volgende te zetten: 28 | 29 | IN (HL),(C) 30 | 31 | Als opcode houdt dit in: EDh,70h. En verdomt, zo staat ie 32 | ook gedocumenteerdt in de R800-manual. 33 | Intern doet de Z80 eigenlijk de volgende dinges: 34 | 35 | IN A,(C) 36 | OR A 37 | 38 | Zo zou deze opcode dan ook kunnen maken, ware het niet dat 39 | IN F,(C) register A ongeschonden houdt. 40 | 41 | Wat kan ik nu met deze instructie ??? 42 | 43 | Wel, je kunt er heel gemakkelijk een I/O poort mee in de 44 | gaten houden en hoeft geen OR-ren of AND-en meer te 45 | gebruiken. Kortom sommige dingen kunnen sneller! 46 | 47 | Programmeurs van Nederland, omhels deze instructie en 48 | waardeer hem alsof hij er altijd al was. Schroom je niet om 49 | 'm te gebruiken. Hij is eindelijk legaal verklaart !!! 50 | 51 | Veel plezier met deze instructie, 52 | 53 | Digital JW 54 | 55 | p.s. Er hebben mij geruchten bereikt dat de Z80 ook zou 56 | kunnen vermenigvuldigen. Laten we dat eens gauw uit- 57 | proberen... 58 | -------------------------------------------------------------------------------- /future_disk/15/Looplichtje.md: -------------------------------------------------------------------------------- 1 | Looplichtje 2 | 3 | ���� 4 | ���� 5 | ���� 6 | ���� 7 | 8 | Op deze disk zal je een schema van een looplichtje vinden. 9 | Alweer zo iets doms? Ja, alweer. Dit is weer zo'n normaal 10 | looplichtje, alleen deze versie heeft wat minder onderdelen 11 | nodig dan de al bestaande uitvoeringen. Het origineel komt van 12 | Albert Huitsing en is daarna enigszins gewijzigd door mij. 13 | Als het beestje af is moet het mogelijk zijn om via de 14 | computer de acht ledjes onafhankelijk aan en uit te zetten. 15 | Natuurlijk hoeven het geen ledjes te zijn. Door 5v relais 16 | aan te sluiten is een heleboel mogelijk. Wat dacht je van 17 | een RC Autootje aan je computer of al je lampen aan of uit 18 | via je computer?(NvdR: eeeeuuhh??!?) 19 | 20 | Wat heb je nodig? 21 | 22 | 1 IC : MB74LS164 (of een andere 74164) 23 | 8 5volts ledjes (Kleur naar keuze) 24 | 1 Experimenteer printje (ca. 5x5cm) 25 | 1 Vier aderige flatcable (ca. 15cm) 26 | 1 9-polige Sub_D connector male (Joystick connector) 27 | 1 Pakje Drum met vloei (Optioneel) 28 | een soldeerbout, tin, en stalen zenuwen bij het uittesten. 29 | 30 | Als je dat allemaal hebt gekocht kun je de file PRINT.LDR 31 | runnen om het printje te bekijken. Het afgebeelde is heir de 32 | koperzijde. De betekenis van de nummers is als volgt: 33 | 1 staat voor TRiGger(1) 34 | 2 is de GRND 35 | 3 TRG(2) 36 | 4 staat voor 5 Volt + 37 | 38 | 39 | In de file LOOPLICH.BAS staat hoe je het geheel kan besturen. 40 | Op de volgende FutureDisk zal je het programma LED_Tracker 41 | vinden waar mee je in een patern/position editor een sequence 42 | kan maken om de leds aan en uit te zetten(No, thats no 43 | nonsense!)(NvdR: believing that guy is one big mistake!). 44 | Anyway... soldeer ze! 45 | 46 | Uiteraard is de FutureDisk niet aansprakelijk voor eventuele 47 | schade aan computer/randapparatuur. (Lekker opstekertje h�?) 48 | 49 | Tobias 50 |  51 | -------------------------------------------------------------------------------- /future_disk/15/looplichtje.md: -------------------------------------------------------------------------------- 1 | Looplichtje 2 | 3 | ���� 4 | ���� 5 | ���� 6 | ���� 7 | 8 | Op deze disk zal je een schema van een looplichtje vinden. 9 | Alweer zo iets doms? Ja, alweer. Dit is weer zo'n normaal 10 | looplichtje, alleen deze versie heeft wat minder onderdelen 11 | nodig dan de al bestaande uitvoeringen. Het origineel komt van 12 | Albert Huitsing en is daarna enigszins gewijzigd door mij. 13 | Als het beestje af is moet het mogelijk zijn om via de 14 | computer de acht ledjes onafhankelijk aan en uit te zetten. 15 | Natuurlijk hoeven het geen ledjes te zijn. Door 5v relais 16 | aan te sluiten is een heleboel mogelijk. Wat dacht je van 17 | een RC Autootje aan je computer of al je lampen aan of uit 18 | via je computer?(NvdR: eeeeuuhh??!?) 19 | 20 | Wat heb je nodig? 21 | 22 | 1 IC : MB74LS164 (of een andere 74164) 23 | 8 5volts ledjes (Kleur naar keuze) 24 | 1 Experimenteer printje (ca. 5x5cm) 25 | 1 Vier aderige flatcable (ca. 15cm) 26 | 1 9-polige Sub_D connector male (Joystick connector) 27 | 1 Pakje Drum met vloei (Optioneel) 28 | een soldeerbout, tin, en stalen zenuwen bij het uittesten. 29 | 30 | Als je dat allemaal hebt gekocht kun je de file PRINT.LDR 31 | runnen om het printje te bekijken. Het afgebeelde is heir de 32 | koperzijde. De betekenis van de nummers is als volgt: 33 | 1 staat voor TRiGger(1) 34 | 2 is de GRND 35 | 3 TRG(2) 36 | 4 staat voor 5 Volt + 37 | 38 | 39 | In de file LOOPLICH.BAS staat hoe je het geheel kan besturen. 40 | Op de volgende FutureDisk zal je het programma LED_Tracker 41 | vinden waar mee je in een patern/position editor een sequence 42 | kan maken om de leds aan en uit te zetten(No, thats no 43 | nonsense!)(NvdR: believing that guy is one big mistake!). 44 | Anyway... soldeer ze! 45 | 46 | Uiteraard is de FutureDisk niet aansprakelijk voor eventuele 47 | schade aan computer/randapparatuur. (Lekker opstekertje h�?) 48 | 49 | Tobias 50 |  51 | -------------------------------------------------------------------------------- /sunrise_special/6/HDSpeed.md: -------------------------------------------------------------------------------- 1 | H D S P E E D 2 | 3 | 4 | HDSPEED heb ik gemaakt om de snelheid van een drive te 5 | meten. Bij DOSSCAN, die gebruikt werd door Gouda, moet je 6 | zelf de tijd bijhouden, en da's dus ietwat onnauwkeurig. Bij 7 | mijn programma wordt de tijd gewoon uit de clockchip 8 | gehaald. 9 | 10 | HDSPEED.COM werkt gewoon zoals je verwacht, alleen kun je de 11 | drive niet opgeven. Er wordt gewoon telkens de default drive 12 | genomen. 13 | 14 | 15 | E N K E L E R E S U L T A T E N 16 | 17 | De volgende resultaten zijn op een turbo R met LUNA (zie de 18 | tekst op deze Special) gemeten: 19 | 20 | MK interface: 46 kB/s 21 | Gewone drive: 17 kB/s 22 | RAMdisk : 500 kB/s 23 | 24 | Deze zonder LUNA: 25 | 26 | MK interface: 35 kB/s 27 | Gewone drive: 12 kB/s 28 | RAMdisk : 150 kB/s 29 | 30 | Het verschil dat LUNA maakt komt gewoon doordat hij de R800 31 | aanschakelt bij disk-access. Als de cache gebruikt wordt 32 | komt het bij alle drives (behalve de RAMdisk) uit op zo'n 33 | 200 kB/s. 34 | 35 | 36 | V O L G E N D E V E R S I E S 37 | 38 | Ik wil nog een aantal dingen uitbreiden. Maar het 39 | belangrijkste ervan is het gebruiken van de testmode van de 40 | clock-chip. Dan kan het meten van de tijd supernauwkeurig 41 | gebeuren. Zie voor details het artikel over de clock-chip op 42 | deze Special. 43 | 44 | Kasper Souren 45 | 46 | 47 | NB: DOSSCAN.PMA heb ik ook maar erbij gezet. Maar deze geeft 48 | de transfer rate niet altijd. Ik weet niet waar dat aan 49 | ligt. 50 | -------------------------------------------------------------------------------- /sunrise_special/6/hdspeed.md: -------------------------------------------------------------------------------- 1 | H D S P E E D 2 | 3 | 4 | HDSPEED heb ik gemaakt om de snelheid van een drive te 5 | meten. Bij DOSSCAN, die gebruikt werd door Gouda, moet je 6 | zelf de tijd bijhouden, en da's dus ietwat onnauwkeurig. Bij 7 | mijn programma wordt de tijd gewoon uit de clockchip 8 | gehaald. 9 | 10 | HDSPEED.COM werkt gewoon zoals je verwacht, alleen kun je de 11 | drive niet opgeven. Er wordt gewoon telkens de default drive 12 | genomen. 13 | 14 | 15 | E N K E L E R E S U L T A T E N 16 | 17 | De volgende resultaten zijn op een turbo R met LUNA (zie de 18 | tekst op deze Special) gemeten: 19 | 20 | MK interface: 46 kB/s 21 | Gewone drive: 17 kB/s 22 | RAMdisk : 500 kB/s 23 | 24 | Deze zonder LUNA: 25 | 26 | MK interface: 35 kB/s 27 | Gewone drive: 12 kB/s 28 | RAMdisk : 150 kB/s 29 | 30 | Het verschil dat LUNA maakt komt gewoon doordat hij de R800 31 | aanschakelt bij disk-access. Als de cache gebruikt wordt 32 | komt het bij alle drives (behalve de RAMdisk) uit op zo'n 33 | 200 kB/s. 34 | 35 | 36 | V O L G E N D E V E R S I E S 37 | 38 | Ik wil nog een aantal dingen uitbreiden. Maar het 39 | belangrijkste ervan is het gebruiken van de testmode van de 40 | clock-chip. Dan kan het meten van de tijd supernauwkeurig 41 | gebeuren. Zie voor details het artikel over de clock-chip op 42 | deze Special. 43 | 44 | Kasper Souren 45 | 46 | 47 | NB: DOSSCAN.PMA heb ik ook maar erbij gezet. Maar deze geeft 48 | de transfer rate niet altijd. Ik weet niet waar dat aan 49 | ligt. 50 | -------------------------------------------------------------------------------- /sunrise_special/1/het_rel_file_formaat.md: -------------------------------------------------------------------------------- 1 | # H E T . R E L F I L E F O R M A A T 2 | 3 | Een GEN80 REL bevat informatie gecodeerd in een bit-stream 4 | dat als volgt ingedeeld is. 5 | 6 | Als de eerste bit een 0 is dan zullen de volgende 8 bits in 7 | het adres van de location counter geladen worden. 8 | 9 | Als de eerste bit een 1 is dan volgen er 2 bits met de 10 | volgende betekenis. 11 | 12 | 00 Het is een special link item die onder beschreven 13 | wordt. 14 | 01 Program relative item, de volgende 16 bits zullen in 15 | het adres van de location counter geladen worden 16 | nadat ze zijn opgetelt bij het basis adres van het 17 | programma/code segment. 18 | 10 Data relative item, de volgende 16 bits zullen in 19 | het adres van de loaction counter geladen worden 20 | nadat ze zijn opgeteld bij het basis adres van het 21 | data segment. 22 | 23 | Een special link item bestaat uit het volgende: 24 | 25 | 1 Een 4 bits lange control field, onder beschreven. 26 | 2 Een adres field dat een 2 bits adress type field is, 27 | gevolgd door een 16 bits adres. Het adres type field 28 | bestaat uit het volgende. 29 | 30 | 00 Het adres is absoluut. 31 | 01 Het adres is relatief aan het programma. 32 | 10 Het adres is relatief aam het data segment. 33 | 34 | 3 Een optioneel naam veld dat bestaat uit een 3 bits 35 | lengte teller gevolgd door de naam van de label in 8 36 | bits ASCII. 37 | 38 | 39 | ## H E T C O N T R O L F I E L D 40 | 41 | De volgende link items worden gevolgd door een naam veld: 42 | 43 | 0000 Deze label is PUBLIC verklaard in deze module. 44 | 0010 De naam van dit programma. 45 | 46 | De volgend link item worden gevolgd door een adres field. 47 | 48 | 0111 Geeft de waarde in het adres field aan de label in 49 | het naam veld. 50 | 51 | De volgende link items worden alleen gevolgd door een adres 52 | field: 53 | 54 | 1010 Define data size. Het adres veld bevat het totaal 55 | aantal byte in het data segment van deze module 56 | 1011 Set location counter, veranderd het adres van de 57 | location counter 58 | 1110 End of module. Geeft het einde van deze module aan 59 | De volgende heeft geen velden 60 | 1111 End of file. Geeft het einde van de file aan 61 | -------------------------------------------------------------------------------- /future_disk/40/assembly_cursus_8.md: -------------------------------------------------------------------------------- 1 | # ASSEMBLY (8) 2 | 3 | De vorige keer hebben jullie deze rubriek moeten missen 4 | vanwege inspiratiegebrek, maar voor deze keer heb ik toch 5 | iets weten te verzinnen, namelijk het gebruiken van extra 6 | opties bij een DOS-programma (dus bv PRINT FD.TXT, waarbij 7 | PRINT.COM een programma is om een tekst naar de printer te 8 | sturen en FD.TXT de af te drukken tekst is). 9 | 10 | Het kunnen gebruiken van die extra optie is heel simpel. Op 11 | adres #80 staat het aantal tekens dat na het commando werd 12 | ingevoerd en op adres #81 en verder staat de ingevoerde 13 | tekst. Het aantal tekens is overigens exclusief de byte #0d 14 | (Carriage Return). Hier volgt een (heel simpel) voorbeeld- 15 | programmaatje: 16 | ``` 17 | org #0100 18 | 19 | bdos: equ 5 20 | strout: equ 9 21 | 22 | ld a,(#0080) ; aantal tekens 23 | or a 24 | jr z,notext ; 0 tekens = geen tekst 25 | 26 | ld e,a ; aantal bytes 27 | ld d,0 28 | ld hl,#0081 29 | add hl,de ; pointer naar einde tekst+1 30 | ld a,"$" 31 | ld (hl),a ; vervang #0d door "$" 32 | 33 | ld de,#0081 34 | ld c,strout 35 | call bdos ; print string 36 | ret 37 | 38 | ;geen tekst ingevoerd 39 | notext: ld de,text 40 | ld c,strout 41 | call bdos ; print tekstje 42 | ret 43 | 44 | text: defb "No text entered$" 45 | ``` 46 | Dit programmaatje staat ook op disk, zowel de source als de 47 | geassembleerde file, welke ASSEMB8.GEN en ASSEMB8.COM heten. 48 | 49 | 50 | ## CACHE-ROUTINES 51 | 52 | Ongeveer een jaar geleden heb ik voor de FD eens een cache- 53 | routine geschreven. Deze is echter nooit gebruikt, voor- 54 | namelijk omdat de MoonSound-replayer erg veel ruimte 55 | gebruikt. De volgende keer zal ik deze cache-routine's 56 | bespreken, want daar heb ik nu vanwege de toch wel krappe 57 | deadline echt geen tijd voor. Voor de liefhebbers staat de 58 | source wel op disk (CACHE.GEN). Oh ja, deze cache-routine 59 | cached alleen sectoren, geen files. Misschien maak ik voor 60 | de volgende keer ook nog een cache-routine voor files, maar 61 | dat zien jullie dan wel. 62 | 63 | Arjan 64 | -------------------------------------------------------------------------------- /sunrise_special/4/boot2com.md: -------------------------------------------------------------------------------- 1 | B O O T 2 C O M 2 | 3 | 4 | Dit programma heb ik geschreven om spellen die w�l een 5 | bootsector gebruiken om te laden, maar niet op sectorniveau 6 | staan (daar is GETDISK al voor) toch op harddisk te kunnen 7 | plaatsen. 8 | 9 | 10 | W E R K I N G 11 | 12 | De syntax is: BOOT2COM 13 | 14 | Dit laadt de bootsector van (":" mag worden 15 | weggelaten) in , waarbij .COM de standaard 16 | extensie is. heb ik erbij gezet zodat het 17 | mogelijk is om alle start-files in ��n directory te zetten 18 | die in PATH zit. 19 | 20 | Bijv. BOOT2COM D: A:\BATCH\SSRV2.COM C:\GAMES\SSRV2 21 | 22 | Als je dit programma hebt gerund, krijg je een file en moet 23 | je de files van de diskette (bij mij D:) in de directory 24 | zetten die je hebt opgegeven bij BOOT2COM (hier dus 25 | C:\GAMES\SSRV2). 26 | 27 | Bij het voorbeeld dus: 28 | 29 | MD C:\GAMES\SSRV2 30 | COPY D:\*.* C:\GAMES\SSRV2 31 | 32 | En hierna kun je, mits je A:\BATCH in je PATH hebt zitten, 33 | door SSRV2 in te typen het spel opstarten. 34 | 35 | 36 | T E S T V E R S I E 37 | 38 | Het is een testversie dus verwacht niet dat alle fouten bij 39 | het aanmaken van een file worden opgevangen. 40 | 41 | 42 | W E R K E N D E S P E L L E N 43 | 44 | Spellen die ermee werken hebben een boot-sector, maar 45 | bestaan toch compleet uit files. In de boot-sector wordt dan 46 | een file geladen. Tot nu toe werkt alleen Starship 47 | Rendez-Vous disk B. Als je nog een spel hebt gevonden dat 48 | ermee werkt, laat het dan s.v.p. weten via Sunrise BBS Nuth 49 | of de postbus. 50 | 51 | Kasper Souren 52 | -------------------------------------------------------------------------------- /future_disk/30/paint_in_ml.md: -------------------------------------------------------------------------------- 1 |  Hoe kunnen we verven in ML???? Awel, na het lezen van deze tekst wordt het ons allemaal duidelijk... 2 | 3 | 4 | PAINT IN ML 5 | 6 | 7 | 8 | Het is lastig om zelf een routine te maken die een vlak kan 9 | inkleuren. Zo'n routine hoeft helemaal niet gemaakt te 10 | worden, want in de SUB-ROM zit al zo'n routine. Deze is 11 | echter niet zonder meer te gebruiken, want de routine is 12 | voor de BASIC-interpreter. 13 | 14 | Om de routine te gebruiken, moet je een stukje BASIC 15 | aanmaken in ML. In dit geval is dit niet lastig, tenminste, 16 | als je de codes weet. 17 | 18 | 19 | WAT IS ER NODIG 20 | 21 | De routine die voor het painten gebruikt wordt, heeft alleen 22 | maar een klein stukje BASIC nodig, namelijk datgene dat 23 | achter het commando PAINT komt. 24 | 25 | Dit stukje ziet er zo uit: 26 | 27 | db 40,28,0,0,44,28,0,0,41,44,28,0,0,44,28,0,0,0 28 | 29 | De 40 geeft een haakje openen aan, 28 geeft aan dat de 30 | volgende 2 bytes een integer vormen, 44 betekent komma, 41 31 | is haakje sluiten, de laatste nul betekent dat de regel is 32 | afgelopen en daarmee zijn alle codes uitgelegd. De bytes 33 | betekenen dus: 34 | 35 | (integer,integer),integer,integer einde regel 36 | 37 | Bij het commando PAINT zien we dus dat het betekent: 38 | 39 | (x,y),vulkleur,randkleur einde regel 40 | 41 | Het enige wat je nu moet doen is de nullen vullen met een 42 | waarde en routine #0069 in het SUBROM aanroepen. De volgende 43 | listing doet dat. 44 | 45 | 46 | DE SOURCE 47 | 48 | ; Kleur een vlak in (alleen scherm 5,6,7 en 8) 49 | ; Werkt misschien ook op scherm 10, 11 en 12 50 | ; In: DE = X-coordinaat 51 | ; HL = Y-coordinaat 52 | ; B = vulkleur 53 | ; C = randkleur 54 | ; Verandert: AF, BC, DE en HL 55 | 56 | paint: ld (dat1+2),de 57 | ld (dat1+6),hl 58 | ld a,b 59 | ld (dat1+11),a 60 | ld a,c 61 | ld (dat1+15),a 62 | ld hl,dat1 63 | ld ix,#0069 64 | call #015f 65 | ret 66 | 67 | dat1: db 40,28,50,0,44,28,50,0,41,44,28,15,0,44,28,15,0,0 68 | ; PAINT ( X , Y ) , VK , RK 69 | 70 | 71 | Zoals je ziet is het erg eenvoudig. Voor de luitjes die te 72 | lui zijn om deze source even over te tikken, staat de source 73 | (als het goed is)(NvdR: en alles is goed!!!) ook op de disk 74 | onder de naam PAINT.ASM. 75 | 76 | 77 | Arjan Bakker 78 |  79 | -------------------------------------------------------------------------------- /future_disk/21/Ledjes.md: -------------------------------------------------------------------------------- 1 | Keizer maakt nooit wat af. Dat is een statement. Keizer probeert dit statement in deze tekst eens en voor altijd tot het verleden te verdoemen 2 | 3 | 4 | UNFINISHED BUSINESS... 5 | 6 | ���� 7 | ���� 8 | ���� 9 | ���� 10 | 11 | 12 | De vorige keer had ik al wat zitten zemelen over de ledjes in 13 | de Turbo-R. Nu was ik echter druk bezig met een poker-spel dat 14 | ik op 't laatste moment toch niet af kreeg zodat ik het pro- 15 | grammaatje dat erbij hoorde op 't laatste moment toch niet af 16 | kreeg. Nu dus maar even in een text-file hoe je alle leds moet 17 | aansturen. Om maar gelijk met het slechte nieuws te beginnen, 18 | twee leds vallen sowieso al af. De power led en de Renshaturbo 19 | led. Deze zijn beide hardware-matig en dus niet aan te sturen. 20 | De FDD led valt eigenlijk ook al af. Hij is wel aan te sturen 21 | maar met mijn gebrekkige kennis van het programmeer vak dus 22 | not sorry 'bout that. Misschien dat Smael dit weet maar 23 | ik dus niet... Blijven er vier leds over: 24 | CAPS, KANA, PAUSE en R800 25 | 26 | 27 | CAPS: 28 | 29 | DEFUSR=&H0132:A=USR(x) ' X=0, UIT. X<>0, AAN. 30 | 31 | 32 | KANA: (ALLEEN IN MC) 33 | 34 | LD IX,$0135 35 | CALL $015F 36 | RET 37 | 38 | 39 | PAUSE: 40 | 41 | OUT (&HA7),&B0000001 42 | 43 | 44 | R800: 45 | 46 | OUT (&HA7),&B1000000 47 | 48 | 49 | Natuurlijk kan je MC data even in WB-ASS2, juist ja.. die 50 | assembler die elk zichzelf-respecterend-mens heeft, DISen om 51 | de opcodes even weg te poken en te USRen. Dat lousy excuse 52 | for een intro demo dat deze keer op de FD staat(NvdR: 53 | herstel; de volgende keer op de FD staat) gebruikt de 54 | Turbo-R leds al zodat dat het enorme gemis van de vorige keer 55 | weer een beetje gecompenseerd wordt. Well, I'm getting a bit 56 | vague here coz it's late so I'll take a little coffee break 57 | now and type some more later. C YA!!! 58 | 59 | Tobias 'No remark this time' Keizer... 60 | 61 | Whoops, voor ik 't vergeet... Dat R800 gemier van de vorige 62 | keer was ook niet goed... Het stukje MC + Basic dat ik de 63 | eerste keer geef was zoals 't hoorde. Niks geen subrom of zo. 64 | Ik was gewoon even verward omdat die rountine dus geen A=USR 65 | (130) slikt als je die USR op &H0180 hebt gezet. Waarom ie dat 66 | niet wil weet ik niet, maar met dat kleine stukje MC werkt het 67 | allemaal wel... 68 | 69 | Succes, Keizer... 70 | -------------------------------------------------------------------------------- /future_disk/21/ledjes.md: -------------------------------------------------------------------------------- 1 | Keizer maakt nooit wat af. Dat is een statement. Keizer probeert dit statement in deze tekst eens en voor altijd tot het verleden te verdoemen 2 | 3 | 4 | UNFINISHED BUSINESS... 5 | 6 | ���� 7 | ���� 8 | ���� 9 | ���� 10 | 11 | 12 | De vorige keer had ik al wat zitten zemelen over de ledjes in 13 | de Turbo-R. Nu was ik echter druk bezig met een poker-spel dat 14 | ik op 't laatste moment toch niet af kreeg zodat ik het pro- 15 | grammaatje dat erbij hoorde op 't laatste moment toch niet af 16 | kreeg. Nu dus maar even in een text-file hoe je alle leds moet 17 | aansturen. Om maar gelijk met het slechte nieuws te beginnen, 18 | twee leds vallen sowieso al af. De power led en de Renshaturbo 19 | led. Deze zijn beide hardware-matig en dus niet aan te sturen. 20 | De FDD led valt eigenlijk ook al af. Hij is wel aan te sturen 21 | maar met mijn gebrekkige kennis van het programmeer vak dus 22 | not sorry 'bout that. Misschien dat Smael dit weet maar 23 | ik dus niet... Blijven er vier leds over: 24 | CAPS, KANA, PAUSE en R800 25 | 26 | 27 | CAPS: 28 | 29 | DEFUSR=&H0132:A=USR(x) ' X=0, UIT. X<>0, AAN. 30 | 31 | 32 | KANA: (ALLEEN IN MC) 33 | 34 | LD IX,$0135 35 | CALL $015F 36 | RET 37 | 38 | 39 | PAUSE: 40 | 41 | OUT (&HA7),&B0000001 42 | 43 | 44 | R800: 45 | 46 | OUT (&HA7),&B1000000 47 | 48 | 49 | Natuurlijk kan je MC data even in WB-ASS2, juist ja.. die 50 | assembler die elk zichzelf-respecterend-mens heeft, DISen om 51 | de opcodes even weg te poken en te USRen. Dat lousy excuse 52 | for een intro demo dat deze keer op de FD staat(NvdR: 53 | herstel; de volgende keer op de FD staat) gebruikt de 54 | Turbo-R leds al zodat dat het enorme gemis van de vorige keer 55 | weer een beetje gecompenseerd wordt. Well, I'm getting a bit 56 | vague here coz it's late so I'll take a little coffee break 57 | now and type some more later. C YA!!! 58 | 59 | Tobias 'No remark this time' Keizer... 60 | 61 | Whoops, voor ik 't vergeet... Dat R800 gemier van de vorige 62 | keer was ook niet goed... Het stukje MC + Basic dat ik de 63 | eerste keer geef was zoals 't hoorde. Niks geen subrom of zo. 64 | Ik was gewoon even verward omdat die rountine dus geen A=USR 65 | (130) slikt als je die USR op &H0180 hebt gezet. Waarom ie dat 66 | niet wil weet ik niet, maar met dat kleine stukje MC werkt het 67 | allemaal wel... 68 | 69 | Succes, Keizer... 70 | -------------------------------------------------------------------------------- /future_disk/24/v9958_in_ml.md: -------------------------------------------------------------------------------- 1 |  Ons liever Tobias heeft zich flink uitgesloofd, dus alweer een tekst van deze plezante zeer aardige en lieve jongen uit Nijverdal, bellen meiden, hij is nog vrij! 2 | 3 | V9958 in ML 4 | 5 | ���� 6 | ���� 7 | ���� 8 | ���� 9 | 10 | 11 | Ook dit heeft geloof ik al een keer eerder op de FD gestaan, 12 | maar omdat ik weer over SCREEN 12 in basic begon toch nog een 13 | keer de ML versie van SCREEN 12. 14 | 15 | Als eerste is het natuurlijk handig om te weten of de V9958 16 | wel aanwezig is. Ik persoonlijk kijk hier eigenlijk niet 17 | eens naar. Als je zo dom bent om een 2+ programma op een 18 | MSX 2 te runnen moet je natuurlijk niet vreemd opkijken als 19 | het dan niet werkt. Maar soms kan het voorkomen dat je echt 20 | ��n aparte routine voor de MSX2 en de MSX2+ hebt en dan is 21 | het natuurlijk wel handig om te weten of de V9958 wel 22 | aanwezig is. Dus eerst even een klein stukje assembly: 23 | 24 | CHKVDP: DI 25 | LD A,$01 26 | OUT ($99),A 27 | LD A,$8F 28 | OUT ($99),A 29 | PUSH AF 30 | POP AF 31 | IN A,($99) 32 | LD D,A 33 | XOR A 34 | OUT ($99),A 35 | LD A,$8F 36 | OUT ($99),A 37 | EI 38 | JP_RTN: LD A,D 39 | AND $3E 40 | JP NZ,V_9938 41 | JP V_9958 42 | 43 | Vervolgens is het misschien wel handig om SCREEN 12 aan te 44 | zetten. Als je graag wilt mag je van mij SCREEN11 ook wel 45 | aanzetten hoor! Okay, here we go: 46 | 47 | SCRN11: LD A,$08 48 | CALL $5F 49 | DI 50 | LD A,$18 51 | OUT ($99),A 52 | LD A,$99 53 | OUT ($99),A 54 | EI 55 | 56 | SCRN12: LD A,$08 57 | CALL $5F 58 | DI 59 | LD A,$08 60 | OUT ($99),A 61 | LD A,$99 62 | OUT ($99),A 63 | EI 64 | 65 | En dit zou toch echt moeten werken want mijn SCREEN12.BIN op 66 | deze FD gebruikt dit stukje code ook. 67 | 68 | Dit is overigens ook handig voor het BASIC volk dat de MSX2+ 69 | commando's i.v.m. compatibiliteit met de MSX2's met een 70 | V9958 in stand wil houden. Gewoon intypen in WB, assembleren 71 | en de .BIN file BLOADen aan het begin van je programmaatje. 72 | 73 | Hey guys, guess what?! It's 02.19 and I'm tired. Sleep well 74 | and see you in the morning. I'm gonna have sweet dreams 75 | about Amalia now.... 76 | 77 | Dikke zoen, 78 | 79 | Keizer... 80 | -------------------------------------------------------------------------------- /sunrise_special/5/Shem.md: -------------------------------------------------------------------------------- 1 | S H E M 2 | 3 | 4 | SHEM is een Japans monitorprogramma. Het is een vrij 5 | uitgebreid programma, en het is de moeite waard het eens te 6 | bekijken. Met [TAB] kun krijg je een overzicht van de te 7 | gebruiken commando's. Ik zal in het kort even een paar 8 | dingen uitleggen. 9 | 10 | 11 | D I S A S S E M B L E R 12 | 13 | De pijl die onderaan staat betekent dat die commando's 14 | alleen te gebruiken zijn in de disassembler. Met CTRL-A kun 15 | je bijv. assembleren. 16 | 17 | De R800-instructies MULUB en MULUW worden trouwens goed op 18 | het scherm gezet. 19 | 20 | 21 | S O M - M O D E 22 | 23 | CTRL-C verandert de "som-mode". Aan de rechterkant van het 24 | scherm is hiervoor plaats gereserveerd. Je kunt switchen 25 | tussen de volgende modes: MSX, STD8, STD16 en SUM16. Het nut 26 | hiervan is me niet compleet duidelijk, maar in ieder geval 27 | worden de waarden die op de regel ernaast staan allemaal bij 28 | elkaar opgeteld. 29 | 30 | 31 | P A G E 0 V E R A N D E R E N 32 | 33 | Als je de slot- of mapper-stand page 0 verandert, blijft het 34 | programma hangen. Dit is dus niet aan te raden. 35 | 36 | Met CTRL-W is de mode van de graphic window in te stellen. 37 | Dit is een zeer leuke optie, omdat je zo een beter overzicht 38 | hebt. En misschien is het zijn graphics ook nog een beetje 39 | zichtbaar. 40 | 41 | Met [INS] of [CTRL][DOWN] kun je snel omlaag scrollen, en 42 | met [DEL] of [CTRL][UP] snel omhoog. 43 | 44 | 45 | M O N I T O R O F D E B U G G E R ? 46 | 47 | Als je SHEM vergelijkt met MSX-Debug van MSX-Club Enschede, 48 | komt SHEM er wel matig vanaf, als je hem tenminste als 49 | debugger gebruikt. Als je SHEM echter als volwaardige 50 | monitor beschouwt, met als extra een disassembler, is het 51 | toch wel een zeer goed programma! 52 | 53 | Kasper Souren 54 | -------------------------------------------------------------------------------- /sunrise_special/5/shem.md: -------------------------------------------------------------------------------- 1 | S H E M 2 | 3 | 4 | SHEM is een Japans monitorprogramma. Het is een vrij 5 | uitgebreid programma, en het is de moeite waard het eens te 6 | bekijken. Met [TAB] kun krijg je een overzicht van de te 7 | gebruiken commando's. Ik zal in het kort even een paar 8 | dingen uitleggen. 9 | 10 | 11 | D I S A S S E M B L E R 12 | 13 | De pijl die onderaan staat betekent dat die commando's 14 | alleen te gebruiken zijn in de disassembler. Met CTRL-A kun 15 | je bijv. assembleren. 16 | 17 | De R800-instructies MULUB en MULUW worden trouwens goed op 18 | het scherm gezet. 19 | 20 | 21 | S O M - M O D E 22 | 23 | CTRL-C verandert de "som-mode". Aan de rechterkant van het 24 | scherm is hiervoor plaats gereserveerd. Je kunt switchen 25 | tussen de volgende modes: MSX, STD8, STD16 en SUM16. Het nut 26 | hiervan is me niet compleet duidelijk, maar in ieder geval 27 | worden de waarden die op de regel ernaast staan allemaal bij 28 | elkaar opgeteld. 29 | 30 | 31 | P A G E 0 V E R A N D E R E N 32 | 33 | Als je de slot- of mapper-stand page 0 verandert, blijft het 34 | programma hangen. Dit is dus niet aan te raden. 35 | 36 | Met CTRL-W is de mode van de graphic window in te stellen. 37 | Dit is een zeer leuke optie, omdat je zo een beter overzicht 38 | hebt. En misschien is het zijn graphics ook nog een beetje 39 | zichtbaar. 40 | 41 | Met [INS] of [CTRL][DOWN] kun je snel omlaag scrollen, en 42 | met [DEL] of [CTRL][UP] snel omhoog. 43 | 44 | 45 | M O N I T O R O F D E B U G G E R ? 46 | 47 | Als je SHEM vergelijkt met MSX-Debug van MSX-Club Enschede, 48 | komt SHEM er wel matig vanaf, als je hem tenminste als 49 | debugger gebruikt. Als je SHEM echter als volwaardige 50 | monitor beschouwt, met als extra een disassembler, is het 51 | toch wel een zeer goed programma! 52 | 53 | Kasper Souren 54 | -------------------------------------------------------------------------------- /future_disk/15/pascal_5.md: -------------------------------------------------------------------------------- 1 |  2 | PASCAL 5 3 | ======== 4 | 5 | ���� Alweer deel 5 van deze cursus! Wat gaat de tijd toch 6 | ���� snel. Deze keer een kleine cursus, omdat het over 7 | ���� een gemakkelijk onderwerp handeld. Deze cursus 8 | ���� behandeld namelijk het maken van eigen types. 9 | 10 | Bij het declareren van een variabele konden we tot nog toe 11 | alleen maar kiezen uit de standaard type's (integer, real, 12 | boolean, etc.). In PASCAL is het echter ook mogelijk om je 13 | eigen type's te maken en wel als volgt: 14 | 15 | TYPE 16 | OpsomType = {Item1,Item2,Item3}; 17 | SubrangeType = 1..10; 18 | ArrayType = ARRAY[1..10] OF AnderType; 19 | 20 | Je kunt dus een opsommingstype maken bijvoorbeeld: 21 | 22 | DagenVanDeWeek = {Maandag,Dindag,Woensdag,Donderdag,Vrijdag, 23 | Zaterdag,Zondag} 24 | 25 | Of een subrangetype (van elk ander type). Bijvoorbeeld: 26 | 27 | DagenVanDeMaand = 1..31 (* integers dus *) 28 | 29 | Of een ARRAY type. Bijvoorbeeld: 30 | 31 | WekenVanEenJaar = ARRAY[1..52] OF DagenVanDeWeek 32 | 33 | Vervolgens kun je de types gebruiken, maar let wel goed op met 34 | toekenningen e.d. Neem bijvoorbeeld het volgende: 35 | 36 | VAR 37 | Dag : DagenVanDeWeek; 38 | 39 | Dan mag 40 | 41 | Dag:=Maandag; 42 | 43 | Maar niet 44 | 45 | Write("Geef dag : "); 46 | Readln(Dag); 47 | 48 | De type's verschillen immers. Bij Readln lees je een integer, 49 | real of string, maar niet een DagenVanDeWeek. 50 | 51 | Wat ook niet kan is 52 | 53 | Dag:=Maandag; 54 | Writeln("Het is vandaag ",Dag); 55 | 56 | En wel om dezelde reden als bij Readln. Wat wel kan is 57 | 58 | Dag:=Maandag; 59 | CASE Dag OF 60 | Maandag : Write("Maandag"); 61 | Dinsdag : write("Dinsdag"); 62 | . 63 | . 64 | . 65 | 66 | Experimenteer maar eens een beetje met het cre�ren van eigen 67 | type's en je zult zien dat dit heel handig kan zijn. 68 | 69 | Een functie die een beetje met deze type declaratie te maken 70 | heeft is de IN functie. Deze werkt als volgt: 71 | 72 | IF Dag IN {Maandag,Dinsdag,Woensdag,Donderdag,Vrijdag} THEN 73 | writeln("Dit is een werkdag"); 74 | 75 | Je kunt dus met IN kijken of de waarde van een variabele in 76 | een gegeven verzameling zit. Die verzameling moet je wel eerst 77 | opsommen, maar dat is een kleine prijs om te betalen tegenover 78 | (in dit geval) 5 IF statements. 79 | 80 | Zo, dit was kort maar krachtig(NvdR: geloof je dat nou 81 | zelf?). 82 | 83 | Jeroen "Ik beloof beterschap" Smael 84 | 85 | C YA @!! 86 | -------------------------------------------------------------------------------- /future_disk/21/screen_12.md: -------------------------------------------------------------------------------- 1 |  Dhr. Keizer verheldert onze visie over screen 12 2 | 3 | WHAT THE XXXX IS SCREEN12? 4 | 5 | ���� 6 | ���� 7 | ���� 8 | ���� 9 | 10 | 11 | Ik was een tijdje geleden bezig met de 2+ VDP. Omdat lang niet 12 | alle omgebouwde 2-plussen ook 2 plusROMs hebben, mag dit dus 13 | allemaal niet via de BIOS. De VDP direct aansturen dus. 14 | Nu had ik eigenlijk geen flauw idee hoe dit allemaal moest 15 | omdat ik geen data heb over de V9958. Dus, de telefoon maar 16 | even gepakt, want dan ben je daar immer zo achter..... Niet 17 | dus!!! Het aansturen van de V9958 schijnt echt een probleem 18 | te zijn want zelfs de grote computer wizzzzkidzzz van MSX-end 19 | Nederland konden me nog niet eens vertellen hoe ik screen 12 20 | aan moest zetten. Logisch was geweest om 12 in A (LD A,12) 21 | en dan een call naar CHGMOD... NO ABSOLUTELY NOT! Waarom 22 | weet ik niet maar dat was geloof ik een idee want er gebeurt 23 | gewoon niets, maar wat dan wel?(NvdR: mijnheer Keizer, U 24 | bent niet helemaal duidelijk meer) 25 | Als eerst moet je blijkbaar screen 8 aanzetten, om daarna 26 | "08" te zetten in register 25. Dus: 27 | 28 | SCRN12: LD A,08 29 | CALL CHGMOD 30 | DI 31 | LD A,08 32 | OUT ($99),A 33 | LD A,128+15 34 | OUT ($99),A 35 | EI 36 | JP ?????? 37 | 38 | Dit kleine stukje source is genoeg om screen 12 aan te zetten 39 | zonder dat er speciale 2+ BIOS routines worden gebruikt... 40 | Om te kijken of er wel een V9958 aanwezig is, is het volgende 41 | stukje source nodig: 42 | 43 | V9958?: DI 44 | LD A,$01 45 | OUT ($99),A 46 | LD A,$8F 47 | OUT ($99),A 48 | PUSH AF 49 | POP AF 50 | IN A,($99) 51 | LD D,A 52 | XOR A 53 | OUT ($99),A 54 | LD A,$8F 55 | OUT ($99),A 56 | EI 57 | VDP-JP: LD A,D 58 | AND $3E 59 | JP NZ,V9938R 60 | JP V9958R 61 | 62 | Dit stukje source kijkt dus ook echt alleen of er een V9958 is 63 | zonder naar ROMS te kijken, iets dat veel programma's nog eens 64 | willen doen. Een normale MSX2 met daarin dus een V9958 wordt 65 | dus tot 2+ gebombardeerd door deze routine. Dat was 't wel, 66 | verder moet je screen 12 als screen 8 behandelen en om overig- 67 | ens screen 11 te krijgen moet je de "08" die je naar register 68 | 25 out vervangen door "24", decimaal dus... 69 | 70 | Van wie ik deze wijsheid heb?? Lijkt me vrij duidelijk... 71 | Van de MSX programmeur in Nederland, Alex Wulms. 72 | 73 | Well, good luck... I guess?!?! 74 | 75 | Tobias "Thank you Alex" Keizer 76 | -------------------------------------------------------------------------------- /sunrise_special/5/r800_rom_ram_lezen.md: -------------------------------------------------------------------------------- 1 | R 8 0 0 R O M / R A M L E Z E N 2 | 3 | 4 | Met het volgende BASIC-programmaatje heb ik even het 5 | snelheids-verschil tussen ROM- en RAM-gebruik van de R800 6 | gemeten. (Staat op disk onder de naam TESTER.BAS.) 7 | 8 | 100 TIME=0 9 | 110 _TURBO ON 10 | 120 FOR I=0 TO 16384 11 | 130 IF I/100=I\100 THEN LOCATE 0,0: PRINT I/100 12 | 140 NEXT I 13 | 150 PRINT TIME 14 | 15 | Regel 130 kan natuurlijk veel beter. I/100=I\100 kan 16 | namelijk worden vervangen door I MOD 100=0. Het "\" teken 17 | staat voor integerdeling. Met MOD is de rest te bepalen van 18 | een integerdeling. Maar doordat ik "/" gebruik duurt het wat 19 | langer, en zijn de resultaten nauwkeuriger. 20 | 21 | 22 | T A B E L L E T J E 23 | 24 | | RAM | ROM 25 | ------------+------+------- 26 | Z80 | 2074 | 2075 27 | ------------+------+------- 28 | R800-ROM | 255 | 1000 29 | ------------+------+------- 30 | R800-DRAM | 246 | 981 31 | 32 | 33 | De getallen zijn de resultaten bij mijn turbo R op 60 Hz. 34 | Bij RAM heb ik KUN-BASIC in RAM (de diskversie dus) gebruikt 35 | en bij ROM KUN-BASIC in een ROMmetje. 36 | 37 | Het valt direct op dat er een groot verschil is tussen RAM 38 | en ROM bij de R800-modes. In de R800-modes is hij gemiddeld 39 | 3.95 keer langzamer, terwijl het in de Z80-mode geen ene 40 | moer uitmaakt. 41 | 42 | De conclusie uit deze cijfertjes is niet moeilijk te 43 | trekken: bij het lezen van ROM schakelt de engine terug naar 44 | de Z80-mode! 45 | 46 | Als je dus toevallig KUN op EPROM hebt, kun je toch nog 47 | beter KUN in het geheugen inladen, omdat dat het zaakje 4 48 | keer versnelt in de R800-mode. Het maakt overigens niks uit 49 | of dat geheugen het DRAM geheugen is (met READKANA 50 | erinladen) of de gewone memory mapper. Wel vrees ik dat ook 51 | een externe langzamer wordt aangestuurd. 52 | 53 | Kasper Souren 54 | -------------------------------------------------------------------------------- /future_disk/35/Datacompressie.md: -------------------------------------------------------------------------------- 1 | Hmmm....nu wordt het moeilijk...ik zeg niks... 2 | DATACOMPRESSIE 3 | 4 | ���� 5 | ���� 6 | ���� 7 | ���� 8 | 9 | 10 | Lang, heel lang geleden stonden er wat teksten over 11 | datacompressie op de FD (ik meen zo rond FD 20). Aangezien 12 | er veel manieren zijn om data te crunchen, is hier weer een 13 | tekstje over een manier om data te crunchen die in bepaalde 14 | gevallen best wel handig kan zijn. 15 | 16 | De compressiemethode die ik nu ga bespreken, heeft voor 17 | zover ik weet geen naam, maar dat maakt op zich niet uit. De 18 | methode is snel te implementeren en het (de)crunchen gaat 19 | aardig snel. 20 | 21 | De compressiemethode gaat ervan uit dat een byte in zekere 22 | mate herhaald wordt. Per byte wordt onderzocht of de byte 23 | hetzelfde is. Als dat zo is, wordt er een 0 weggeschreven 24 | naar een bitstream. Als het niet gelijk was, wordt er een 1 25 | weggeschreven en de byte zelf. Bij teksten bijvoorbeeld komt 26 | de spatie heel vaak voor. Hier wordt dus de spatie met 1 bit 27 | opgeslagen en de overige bytes met 9 bits. Om alles 28 | duidelijk te maken, komt hier een voorbeeld: 29 | 30 | Stel, we hebben de volgende reeks bytes: 31 | 32 | 0 10 25 10 4 6 12 10 50 10 10 33 | 34 | De 10 komt het meeste voor in deze reeks. Telkens als er 10 35 | staat in de reeks, dan schrijven we een 0 weg en anders 36 | schrijven we een 1 weg gevolgd door de byte zelf. Hier komt 37 | eventjes de gecrunchde data (links in bytes, rechts in 38 | bits): 39 | 40 | 0 = 1 00000000 41 | 10 = 0 42 | 25 = 1 00011001 43 | 10 = 0 44 | 4 = 1 00000100 45 | 6 = 1 00000110 46 | 12 = 1 00001100 47 | 10 = 0 48 | 50 = 1 00110010 49 | 10 = 0 50 | 10 = 0 51 | 52 | De lengte van de ungecrunchde data was 11 bytes, dus 88 53 | bits. De gecrunchde data is echter maar 59 bits groot. 54 | Natuurlijk moet je ook weten welke byte er met een 0 bedoeld 55 | wordt, dus dat kost weer 8 bits extra, maar de data wordt 56 | nog altijd kleiner. 57 | 58 | 59 | VARIATIES 60 | 61 | Er zijn nog veel variaties op deze methode te verzinnen. Bij 62 | tekeningen bijvoorbeeld kun je voor ��n hele tekening een 63 | vaste byte nemen, maar je kunt het ook per lijn doen en dat 64 | is waarschijnlijk wel efficienter. Deze compressie-methode 65 | is alleen handig bij tekstdata en tekeningen, want daarin 66 | zitten veel dezelfde bytes. In programma's zijn er ook wel 67 | bytes die vaak voorkomen, maar die komen dan niet vaak 68 | genoeg voor om deze goed op deze manier te kunnen inpakken. 69 | (Nvdr: euhmmm...Arjan...zou je dit voor de volgende keer 70 | eens wat meer kunnen uitdiepen?) 71 | 72 | Vincent 73 | -------------------------------------------------------------------------------- /future_disk/35/datacompressie.md: -------------------------------------------------------------------------------- 1 | Hmmm....nu wordt het moeilijk...ik zeg niks... 2 | DATACOMPRESSIE 3 | 4 | ���� 5 | ���� 6 | ���� 7 | ���� 8 | 9 | 10 | Lang, heel lang geleden stonden er wat teksten over 11 | datacompressie op de FD (ik meen zo rond FD 20). Aangezien 12 | er veel manieren zijn om data te crunchen, is hier weer een 13 | tekstje over een manier om data te crunchen die in bepaalde 14 | gevallen best wel handig kan zijn. 15 | 16 | De compressiemethode die ik nu ga bespreken, heeft voor 17 | zover ik weet geen naam, maar dat maakt op zich niet uit. De 18 | methode is snel te implementeren en het (de)crunchen gaat 19 | aardig snel. 20 | 21 | De compressiemethode gaat ervan uit dat een byte in zekere 22 | mate herhaald wordt. Per byte wordt onderzocht of de byte 23 | hetzelfde is. Als dat zo is, wordt er een 0 weggeschreven 24 | naar een bitstream. Als het niet gelijk was, wordt er een 1 25 | weggeschreven en de byte zelf. Bij teksten bijvoorbeeld komt 26 | de spatie heel vaak voor. Hier wordt dus de spatie met 1 bit 27 | opgeslagen en de overige bytes met 9 bits. Om alles 28 | duidelijk te maken, komt hier een voorbeeld: 29 | 30 | Stel, we hebben de volgende reeks bytes: 31 | 32 | 0 10 25 10 4 6 12 10 50 10 10 33 | 34 | De 10 komt het meeste voor in deze reeks. Telkens als er 10 35 | staat in de reeks, dan schrijven we een 0 weg en anders 36 | schrijven we een 1 weg gevolgd door de byte zelf. Hier komt 37 | eventjes de gecrunchde data (links in bytes, rechts in 38 | bits): 39 | 40 | 0 = 1 00000000 41 | 10 = 0 42 | 25 = 1 00011001 43 | 10 = 0 44 | 4 = 1 00000100 45 | 6 = 1 00000110 46 | 12 = 1 00001100 47 | 10 = 0 48 | 50 = 1 00110010 49 | 10 = 0 50 | 10 = 0 51 | 52 | De lengte van de ungecrunchde data was 11 bytes, dus 88 53 | bits. De gecrunchde data is echter maar 59 bits groot. 54 | Natuurlijk moet je ook weten welke byte er met een 0 bedoeld 55 | wordt, dus dat kost weer 8 bits extra, maar de data wordt 56 | nog altijd kleiner. 57 | 58 | 59 | VARIATIES 60 | 61 | Er zijn nog veel variaties op deze methode te verzinnen. Bij 62 | tekeningen bijvoorbeeld kun je voor ��n hele tekening een 63 | vaste byte nemen, maar je kunt het ook per lijn doen en dat 64 | is waarschijnlijk wel efficienter. Deze compressie-methode 65 | is alleen handig bij tekstdata en tekeningen, want daarin 66 | zitten veel dezelfde bytes. In programma's zijn er ook wel 67 | bytes die vaak voorkomen, maar die komen dan niet vaak 68 | genoeg voor om deze goed op deze manier te kunnen inpakken. 69 | (Nvdr: euhmmm...Arjan...zou je dit voor de volgende keer 70 | eens wat meer kunnen uitdiepen?) 71 | 72 | Vincent 73 | -------------------------------------------------------------------------------- /sunrise_special/7/music_module_naar_256k.md: -------------------------------------------------------------------------------- 1 | M U S I C M O D U L E N A A R 2 5 6 K 2 | 3 | 4 | Voor de mensen met twee rechterhanden wordt hieronder 5 | beschreven hoe je je Music Module kunt uitbreiden naar 256 6 | kB samplegeheugen. Het zal nog veel even duren voordat de 7 | nieuwe versie van MoonBlaster die dit ondersteunt er zal 8 | zijn maar er is in ieder geval al de schitterende demo 9 | Unknown Reality van NOP met schitterende lange samples. 10 | 11 | Uiteraard is Stichting Sunrise niet aansprakelijk voor 12 | eventuele fouten die ontstaan naar aanleiding van het 13 | uitvoeren van deze uitbreiding. 14 | 15 | Nodig: 16 | 17 | - Philips Music Module 18 | - 2 geheugen-IC's type 44C256 19 | - Soldeerbout van ongeveer 30 Watt 20 | - Soldeertin 21 | - 20 cm dun draad 22 | 23 | Voor het gemak noemen we de 2 geheugen-IC's IC-A en IC-B. 24 | 25 | 1) Maak bij IC-A de volgende doorverbindingen: 26 | 27 | pen 1 aan pen 11 pen 2 aan pen 12 28 | pen 13 aan pen 18 pen 14 aan pen 19 29 | 30 | 2) Maak bij IC-B de volgende doorverbindingen: 31 | 32 | pen 2 aan pen 7 pen 8 aan pen 18 33 | pen 9 aan pen 19 34 | 35 | 3) Verbind nu de volgende pinnen van IC-A en IC-B: pen 3, 4, 36 | 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20. 37 | 38 | 4) Zoek naar IC-8 in de Module en verbind de volgende 39 | pennen van IC-B aan IC-8: 40 | 41 | IC-B IC-8 42 | pen 12 aan pen 10 43 | pen 3 aan pen 3 44 | pen 4 aan pen 4 45 | pen 6 aan pen 5 46 | pen 7 aan pen 7 47 | pen 8 aan pen 6 48 | pen 9 aan pen 12 49 | pen 10 aan pen 8 50 | pen 11 aan pen 11 51 | pen 13 aan pen 13 52 | pen 14 aan pen 9 53 | pen 15 aan pen 1 54 | pen 17 aan pen 15 55 | pen 20 aan pen 16 56 | 57 | 5) Maak als laatste de volgende doorverbindingen op de Music 58 | Module zelf: pen 16 van IC-A naar pen 8 van IC-2 en pen 9 59 | van IC-2 naar pen 36 van IC-10. 60 | 61 | 6) Maak de Module dicht en test deze bijvoorbeeld met 62 | Unknown Reality van NOP. 63 | 64 | Bron: MAD Nieuwsbrief 6/94 65 | Met dank aan MSX Avengers Doetinchem 66 | -------------------------------------------------------------------------------- /future_disk/33/advanced_basic_3.md: -------------------------------------------------------------------------------- 1 | Arjan vervolgt zijn cursus Advanced Basic... 2 | Cursus Advanced BASIC (3) 3 | 4 | 5 | Advanced BASIC heeft een aantal extra diskcommando's die het 6 | leven heel wat makkelijker maken voor de BASIC-programmeur. 7 | 8 | Een van die commando's is _DISKRD(drive,start,aantal,adres). 9 | Dit commando laadt een aantal sectoren achterelkaar. De 10 | variabele drive staat hier voor de drivenummer (0 = A, 1 = B 11 | enz.), start is de eerste sector, aantal is het aantal 12 | sectoren en adres is het adres waar de inhoud van de gelezen 13 | sectoren terecht moet komen. 14 | 15 | Als er een _DISKRD is, is er natuurlijk ook een _DISKWRT, 16 | die een aantal sectoren achter elkaar schrijft. De syntax is 17 | hetzelfde als bij _DISKRD. 18 | 19 | Een voorbeeldje: 20 | 21 | 10 _DISKRD(0,0,16,&H9000) 22 | 20 _DISKWRT(1,0,16,&H9000) 23 | RUN 24 | 25 | Dit programma laadt de eerste 16 sectoren van drive A en 26 | slaat ze op op drive B. 27 | 28 | 29 | BESTANDEN 30 | 31 | Bepalen welke bestanden er op een diskette staan is altijd 32 | lastig geweest onder BASIC. Advanced BASIC heeft daar 3 33 | commando's voor. Ten eerste is er _FILENAME(VAR$), welke 34 | bepaald naar welke bestanden er moet worden gezocht. VAR$ 35 | MOET overigens minstens 11 letters lang zijn en het *-teken 36 | mag niet gebruikt worden. 37 | 38 | Om nu het eerste bestand dat op de diskette staat te 39 | achterhalen, is er _SFFILE(VAR$) (VAR$ is weer minstens 11 40 | tekens lang). De eerste filenaam die voldoet aan de met 41 | _FILENAME(VAR$) opgegeven filenaam, komt nu in VAR$ terecht. 42 | Alle volgende filenamen kunnen met _SNFILE(VAR$) geladen 43 | worden. Als er 2 keer achter elkaar dezelfde filenaam 44 | gelezen is, heb je alle filenamen gehad. 45 | 46 | Een voorbeeld: 47 | 48 | 10 _FILENAME("????????BAS") 49 | 20 F$=SPACE$(11):G$=F$ 50 | 30 _SFFILE(F$):IF G$=F$ THEN END 51 | 40 PRINT F$:G$=F$ 52 | 50 _SNFILE(F$):IF G$=F$ THEN END 53 | 60 GOTO 40 54 | RUN 55 | 56 | Dit programma laat alle bestanden met de extensie .BAS zien. 57 | 58 | 59 | DRIVES 60 | 61 | Het aantal aangesloten drives is te bepalen met het commando 62 | _NDRIVES(adres). Het aantal drives komt dan op het opgegeven 63 | adres terecht. 64 | 65 | De huidige drive is op te vragen met _GETDRIVE(adres). Als 66 | je de huidige drive wilt veranderen, kun je _SETDRIVE(drive) 67 | gebruiken. 68 | 69 | Een voorbeeld: 70 | 71 | 10 _GETDRIVE(&H9000) 72 | 20 PRINT "De huidige drive is ";CHR$(PEEK(&H9000+65)) 73 | 30 _NDRIVES(&H9000) 74 | 40 PRINT "Er zijn";PEEK(&H9000);" drives aangesloten" 75 | 50 PRINT "Welke drive moet de default-drive worden?"; 76 | 60 INPUT "In letters graag";D$ 77 | 70 D=ASC(D$) OR 32:D=D XOR 32:D=D-65 78 | 80 _SETDRIVE(D) 79 | RUN 80 | 81 | Dit programma geeft de defaultdrive en het aantal drives 82 | weer en daarna mag je de nieuwe defaultdrive zelf bepalen. 83 | 84 | 85 | TOETJE 86 | 87 | Als toetje zijn er nog de commando's _VERIFYON en _VERIFYOFF 88 | welke de controle op schrijffouten respectievelijke aan- en 89 | uitzetten. 90 | 91 | 92 | Arjan Bakker 93 | -------------------------------------------------------------------------------- /sunrise_special/2/pcm_routines_van_de_bios.md: -------------------------------------------------------------------------------- 1 | # P C M - R O U T I N E S V A N D E B I O S 2 | 3 | 4 | Vertaling van een gedeelte van het artikel over de turbo R 5 | uit het Japanse MSX-Magazine: 6 | 7 | 8 | ## P C M P L Y 9 | ``` 10 | Funktie : PCM-weergave 11 | Adres : Main ROM #0186 12 | In : A 13 | Bit 7 6 5 4 3 2 1 0 14 | | | | | | `-`---> frequentie 15 | | `-------------> 0 16 | `---------------> VRAM/MRAM 17 | EHL (adres van de data) 18 | DBC (lengte van de data) 19 | Terug : carry flag 20 | 0 normale beeindiging 21 | 1 abnormale beeindiging 22 | | 23 | `--> A (reden van de abnormale beeindiging) 24 | 1 fout bij het instellen van de frequentie 25 | 2 onderbreking veroorzaakt door de STOP 26 | toets 27 | EHL (adres waar de onderbreking plaatsvond) 28 | Verandert : alle registers 29 | ``` 30 | 31 | De PCM-geluidsdata worden als bit 7 van register A ��n is 32 | uit het video-RAM gehaald en als het nul is uit het main RAM 33 | gehaald. Bovendien hebben de waarden van het D- en 34 | E-register slechts een betekenis in het geval dat de data 35 | zich in het video-RAM bevindt. 36 | D.m.v. bit 1 en bit 0 van de accumulator stelt men de 37 | sample-frequentie in. Maar, pas op: 15.75 kilohertz is 38 | alleen mogelijk wanneer de turbo R in de R800-DRAM-mode 39 | staat: 40 | 41 | ``` 42 | 00 W> 15.75 kilohertz 43 | 01 W> 7.875 kilohertz 44 | 10 W> 5.25 kilohertz 45 | 11 W> 3.9375 kilohertz 46 | ``` 47 | 48 | ## P C M R E C 49 | ``` 50 | Functie : PCM-opname 51 | Adres : Main ROM #0189 52 | In : A 53 | Bit 7 6 5 4 3 2 1 0 54 | | | | | | | `-`-> frequentie 55 | | | | | | `-----> compressie 56 | | `-`-`-`-------> trigger 57 | `---------------> VRAM/MRAM 58 | 59 | EHL (adres van de data) 60 | DBC (lengte van de data) 61 | Terug : carry flag 62 | 0 normale be�indiging 63 | 1 abnormale be�indiging 64 | | 65 | `--> A (reden van de abnormale be�indiging) 66 | 1 fout bij het instellen van de frequentie 67 | 2 onderbreking veroorzaakt door de STOP 68 | toets 69 | EHL (adres waar de onderbreking plaatsvond) 70 | Verandert : alle registers 71 | ``` 72 | De codering van ingave bij bit 7, 1 en 0 van het A register 73 | is hetzelfde als bij PCMPLY. Bit 6 t/m bit 3 van het A 74 | register heten 'trigger' en duiden de sterkte van het geluid 75 | aan, waarbij het zover komt dat de opname begint. Als deze 76 | waarde nul is, wordt de opname onmiddellijk gestart. 77 | 78 | Verder worden, als bit 2 van register A ��n is, de 79 | opname-data gecomprimeerd. Als het nul is, worden ze niet 80 | gecomprimeerd. 81 | Het comprimeren houdt in dat, als de input 0 is, het wordt 82 | vervangen door een code. Dit kan heel veel bytes schelen. 83 | 84 | Bernard Lamers -------------------------------------------------------------------------------- /sunrise_special/2/memman_2.42.md: -------------------------------------------------------------------------------- 1 | # M E M M A N 2 . 4 2 2 | 3 | 4 | In de speciale MemMan rubriek op de Special mag de nieuwste 5 | versie van MemMan natuurlijk niet ontbreken. Eerst maar even 6 | wat er allemaal nieuw is in deze nieuwe versie... 7 | 8 | 9 | ## W A T I S N I E U W ? 10 | 11 | 1 - Voor mensen die de 32 kB RAM willen kunnen aansturen die 12 | in BASIC achter de ROM's zitten, is er de functie GetTPA 13 | toegevoegd. 14 | 2 - Voor HD-gebruikers wordt er een mogelijkheid geboden om 15 | de TSR's makkelijker in te laden: in het environment 16 | item TL dient de drive en de subdirectory te worden 17 | opgegeven. Daarna kijkt TL niet alleen in de huidige 18 | directory, maar ook de met TL aangegeven directory. 19 | 3 - Met TV.COM kun je nu ook zien in welk segment de diverse 20 | TSR's zich bevinden. Zo kun je precies zoveel TSR's 21 | wissen dat ��n segment vrijkomt. 22 | 4 - De stack van MemMan is nu in te stellen en/of uit te 23 | lezen met de functies GetMMSP en SetMMSP. Tot nog toe 24 | gebruikt alleen Tracer, die er al op voorbereid was, 25 | deze mogelijkheid. 26 | 5 - In BASIC kun je nu een overzicht krijgen van de extra 27 | commando's die de TSR's je verschaffen door CMD HELP in 28 | te tikken. Tracer was (ook) hier op voorbereid. Maar ook 29 | het ingebouwde MSX TsrUtils is er mee uitgerust. 30 | Helaas moet de TSR dat wel zelf opvangen, het zou mooier 31 | geweest zijn wanneer je, als programmeur, de gewenste 32 | tekst in de TSR op een bepaalde plaats zet, zodat MemMan 33 | CMD HELP afwerkt. 34 | 6 - TSR's kunnen MemMan nu aanroepen door naar #4002 te 35 | springen; daar zit een MemMan entry. Hierdoor worden ze 36 | sneller en kleiner. 37 | 7 - IniChk laat de functieafhandelingsroutine van MemMan nu 38 | in HL achter. Daarna is een JP (HL) voldoende om naar 39 | MemMan te springen. Maar TSR's hebben het, zoals in punt 40 | 6 besproken, makkelijker. 41 | 42 | 43 | ## H O E K O M J E E R A A N ? 44 | 45 | Heel simpel te beantwoorden: Op deze disk staat MEMM242.PMA. 46 | Deze library bevat alle 13 bestanden die bij MemMan 2.42 47 | behoren. O.a. een nieuwe versie van BK, de oude kon niet met 48 | meer dan 4 MB overweg. 49 | 50 | Als je geen MSX-DOS 2 hebt, kopieer MEMM242.PMA en PMEXT.COM 51 | dan naar een lege diskette (of een diskette met nog 52 | voldoende ruimte) en typ het volgende in: 53 | 54 | PMEXT MEMM242 A: 55 | 56 | Als je MSX-DOS 2 hebt kan het veel sneller door de RAMdisk 57 | te gebruiken. Maak een RAMdisk aan en doe vervolgens de 58 | Special diskette in de drive. Typ nu het volgende in: 59 | 60 | PMEXT MEMM242 H: 61 | 62 | Na afloop natuurlijk wel nog even de files naar een diskette 63 | kopi�ren. 64 | 65 | 66 | ## D A T U M E N T I J D 67 | 68 | Leuk aan MemMan is dat ze de datum en tijd van de files 69 | aanpassen. Bij de meeste files is de tijd op 2:42 gezet, en 70 | de datum op 19/09/92, de releasedatum van deze MemMan. 71 | 72 | Voor uitleg en technische specificaties bij MemMan verwijs 73 | ik u naar de tekstfiles in MEMM242.PMA. 74 | 75 | Stefan Boer 76 | Kasper Souren 77 | -------------------------------------------------------------------------------- /sunrise_special/3/Getdisk.md: -------------------------------------------------------------------------------- 1 | 2 | G E T D I S K 3 | 4 | 5 | Getdisk is een utility voor harddiskgebruikers om spellen en 6 | programma's die een hele diskette beslaan (waar dus geen 7 | losse files op staan) toch op de harddisk te installeren. 8 | 9 | Getdisk leest namelijk de hele 720 kB diskette in en slaat 10 | hem op als ÇÇn grote file. Met het bijbehorende programma 11 | START.COM kan deze file nu opgestart worden alsof het gewoon 12 | een diskette. Syntax: 13 | 14 | START d:filename.ext 15 | 16 | Dit werkt altijd goed als het betreffende programma normaal 17 | van disk onder MSX-DOS 2 zonder problemen opgestart kan 18 | worden. 19 | 20 | Bij programma's die normaal onder DOS2 vastliepen kan het 21 | soms ook werken, omdat er wat hooks en BIOS routines door 22 | START.COM worden omgebogen om zoveel mogelijk DOS1 23 | compatible te blijven. 24 | 25 | 26 | M E E R D E R E D I S K S 27 | 28 | Getdisk kan ook spellen van meerdere diskettes aan (maximaal 29 | 10). Deze worden dan samen als ÇÇn grote file opgeslagen. Zo 30 | kost SD Snatcher bijvoorbeeld ongeveer 2 MB aan diskruimte 31 | (3 diskjes). 32 | 33 | Als er tijdens het spelen van het spel van disk gewisseld 34 | moet worden kan dit door een cijfertoets ingedrukt te houden 35 | van 1 tot 9 of 0 (0 = diskje 10) TEGELIJKERTIJD met de actie 36 | die uitgevoerd moet worden om het spel te hervatten. 37 | 38 | Hier bedoel ik mee dat als er op het scherm staat: 39 | 40 | Insert disk 2 and press space. 41 | 42 | Dat dan cijfertoets "2" ingehouden moet worden terwijl je op 43 | de spatiebalk drukt. 44 | 45 | 46 | U S E R D I S K 47 | 48 | Houd er rekening mee dat sommige spellen een userdisk nodig 49 | hebben om data op te saven. Bij deze spellen moet er dus een 50 | extra disk ingevoerd worden bij het uitvoeren van Getdisk, 51 | want de gewone diskdrive is uit het spel nu niet meer te 52 | bereiken! 53 | 54 | 55 | De hele Getdisk-utility bestaat uit de volgende files: 56 | 57 | GETDISK.BAS: de loader van GETDISK.BIN 58 | GETDISK.BIN: de disk naar harddisk omzetter 59 | START.COM : het opstartprogramma voor omgezette files 60 | 61 | Ik hoop dat ik met deze utility enkele harddiskgebruikers 62 | (met een grote harddisk, want het vreet wel ruimte die 63 | diskjes) een plezier doe en mensen zonder harddisk aanmoedig 64 | om een harddisk te kopen, want het is zo heerlijk snel 65 | (zeker op een turbo R). 66 | 67 | Michel Shuqair 68 | -------------------------------------------------------------------------------- /sunrise_special/3/getdisk.md: -------------------------------------------------------------------------------- 1 | 2 | G E T D I S K 3 | 4 | 5 | Getdisk is een utility voor harddiskgebruikers om spellen en 6 | programma's die een hele diskette beslaan (waar dus geen 7 | losse files op staan) toch op de harddisk te installeren. 8 | 9 | Getdisk leest namelijk de hele 720 kB diskette in en slaat 10 | hem op als ÇÇn grote file. Met het bijbehorende programma 11 | START.COM kan deze file nu opgestart worden alsof het gewoon 12 | een diskette. Syntax: 13 | 14 | START d:filename.ext 15 | 16 | Dit werkt altijd goed als het betreffende programma normaal 17 | van disk onder MSX-DOS 2 zonder problemen opgestart kan 18 | worden. 19 | 20 | Bij programma's die normaal onder DOS2 vastliepen kan het 21 | soms ook werken, omdat er wat hooks en BIOS routines door 22 | START.COM worden omgebogen om zoveel mogelijk DOS1 23 | compatible te blijven. 24 | 25 | 26 | M E E R D E R E D I S K S 27 | 28 | Getdisk kan ook spellen van meerdere diskettes aan (maximaal 29 | 10). Deze worden dan samen als ÇÇn grote file opgeslagen. Zo 30 | kost SD Snatcher bijvoorbeeld ongeveer 2 MB aan diskruimte 31 | (3 diskjes). 32 | 33 | Als er tijdens het spelen van het spel van disk gewisseld 34 | moet worden kan dit door een cijfertoets ingedrukt te houden 35 | van 1 tot 9 of 0 (0 = diskje 10) TEGELIJKERTIJD met de actie 36 | die uitgevoerd moet worden om het spel te hervatten. 37 | 38 | Hier bedoel ik mee dat als er op het scherm staat: 39 | 40 | Insert disk 2 and press space. 41 | 42 | Dat dan cijfertoets "2" ingehouden moet worden terwijl je op 43 | de spatiebalk drukt. 44 | 45 | 46 | U S E R D I S K 47 | 48 | Houd er rekening mee dat sommige spellen een userdisk nodig 49 | hebben om data op te saven. Bij deze spellen moet er dus een 50 | extra disk ingevoerd worden bij het uitvoeren van Getdisk, 51 | want de gewone diskdrive is uit het spel nu niet meer te 52 | bereiken! 53 | 54 | 55 | De hele Getdisk-utility bestaat uit de volgende files: 56 | 57 | GETDISK.BAS: de loader van GETDISK.BIN 58 | GETDISK.BIN: de disk naar harddisk omzetter 59 | START.COM : het opstartprogramma voor omgezette files 60 | 61 | Ik hoop dat ik met deze utility enkele harddiskgebruikers 62 | (met een grote harddisk, want het vreet wel ruimte die 63 | diskjes) een plezier doe en mensen zonder harddisk aanmoedig 64 | om een harddisk te kopen, want het is zo heerlijk snel 65 | (zeker op een turbo R). 66 | 67 | Michel Shuqair 68 | -------------------------------------------------------------------------------- /future_disk/28/msx-dos2_deel_2.md: -------------------------------------------------------------------------------- 1 |  De DOS2 cursus gaat weer verder... 2 | 3 | ASCII'S WAY TO TORMENT MANKIND 4 | 5 | ���� 6 | ���� 7 | ���� 8 | ���� 9 | 10 | 11 | 12 | Oftewel, het is weer tijd voor DOS2. Niet zoveel deze keer, 13 | want echt veel tijd heb ik niet. Voor deze keer maar een paar 14 | functies specifiek onder de loep, we komen vanzelf een keer 15 | aan bij $70. Overigens ga ik inderdaad niet de DOS1 calls 16 | behandelen. Deze info heeft wel vaker ergens anders gestaan. 17 | Mocht er nu echt iemand zijn die daar toch intresse in heeft, 18 | dan is een belletje naar de redactie genoeg om dat probleem 19 | op te lossen. 20 | 21 | 22 | GET DISK PARAMETERS [_DPARM] 23 | 24 | IN: C = $31 25 | DE = Pointer to 32byte buffer 26 | L = Drive number 27 | RES: A = Error code 28 | DE = Preserved 29 | 30 | Created block: +$00 Physical drive number 31 | +$01 Sector size ($01FF) 32 | +$03 Sector per cluster 33 | +$04 Number of reserved sectors 34 | +$06 Number of FATs 35 | +$07 Entries in root directory 36 | +$09 Number of logical sectors 37 | +$0B Media descriptor byte 38 | +$0C Sectors per FAT 39 | +$0D First root directory sector 40 | +$0F First data sector 41 | +$11 Maximum cluster number 42 | +$13 Dirty disk flag 43 | +$14 Volume ID 44 | +$18 1F Unused 45 | 46 | 47 | 48 | FIND FIRST ENTRY [_FFIRST] 49 | 50 | IN: C = $40 51 | DE = File info block / ASCIIZ string pointer 52 | HL = ASCIIZ filename pointer (If DE = FIB) 53 | B = Attributes 54 | IX = New file info block 55 | RES: A = Error code 56 | IX = Matching entry 57 | 58 | 59 | 60 | FIND NEXT ENTRY [_FNEXT] 61 | 62 | IN: C = $41 63 | IX = Pointer to file info block from _FFIRST 64 | RES: A = Error code 65 | IX = Matching next entry 66 | 67 | 68 | FIND NEW ENTRY [_FNEW] 69 | 70 | IN: C = $42 71 | DE = File info block / ASCIIZ string pointer 72 | HL = ASCIIZ filename pointer (If DE = FIB) 73 | B = Attributes 74 | IX = New file info block 75 | RES: A = Error code 76 | IX = New entry 77 | 78 | 79 | 80 | OPEN FILE HANDLE [_OPEN] 81 | 82 | IN: C = $43 83 | DE = Drive/path/file ASCIIZ of FIB 84 | A = Mode: b0, no write b1, no read b2 inheritable 85 | RES: A = Error code 86 | B = New file handle 87 | 88 | 89 | En dat was 't alweer. Sorry, ik weet 't, het is niet veel, 90 | maar om eerlijk te zijn heb ik ook wel wat beters te doen. 91 | Zoals slapen, want het is al weer gruwelijk laat... Tot FD 29 92 | maar weer, met hopelijk iets meer dan deze aflevering... 93 | 94 | Tobias Keizer 95 | -------------------------------------------------------------------------------- /future_disk/30/advanced_basic.md: -------------------------------------------------------------------------------- 1 |  Daar gaan we dan weer: alweer zo'n programmeer-tekst...ditmaal Advanced Basic... 2 | 3 | 4 | CURSUS ADVANCED BASIC 5 | 6 | 7 | 8 | Voor diegenen die niet genoeg hebben aan een handleiding en 9 | wat meer voorbeelden willen, is hier een kleine cursus, die 10 | ongeveer 3 a 4 delen zal beslaan. 11 | 12 | 13 | I WANT TO USE WINDOWS 14 | 15 | Het belangrijkste gedeelte zijn natuurlijk de windows. In 16 | Advanced BASIC zijn windows ALLEEN te gebruiken is scherm 0, 17 | de schermbreedte moet minstens 41 zijn. Er kunnen maximaal 18 | 16 windows tegelijk gebruikt worden, maar afhankelijk van de 19 | grootte kunnen dat er minder worden. De maximale grootte van 20 | een window is 80 bij 24, in dat geval worden de functietoet- 21 | sen ook overschreven. De inhoud van zo'n window is 78 bij 22 22 | tekens. De minimale grootte van een window is 3 bij 3, de 23 | inhoud is dan 1 bij 1. Als een window te groot is voor het 24 | scherm, dan wordt dat (natuurlijk) gemeld. 25 | 26 | Een window is te maken met _WINDOW(X,Y,BREEDTE,HOOGTE). X en 27 | Y geven de positie van de linkerbovenhoek aan en BREEDTE en 28 | HOOGTE geven aan wat de naam al zegt. Een voorbeeld: 29 | 30 | 10 REM Mijn eerste window 31 | 20 KEY OFF:_WINDOW(0,0,80,24) 32 | 30 A$=INPUT$(1) 33 | RUN 34 | 35 | Er verschijnt een window op locatie 0,0 die 80 bij 24 groot 36 | is. 37 | 38 | WE WANT TEXT 39 | 40 | Met _PRINT(STR$) is het mogelijk om een string in de laatst 41 | gemaakte window te printen. Als het einde van het window 42 | bereikt is, scrollt de inhoud omhoog, tenzij een _SCROLLOFF 43 | geven is. _SCROLLON doet het omgekeerde van _SCROLLOFF en 44 | zorgt dus dat de inhoud wel kan scrollen. 45 | 46 | Maar goed, ik dwaal af. Eh, _PRINT dus. Het is niet mogelijk 47 | om een getal op het scherm te zetten. Nou ja, niet direct. 48 | Het is natuurlijk wel mogelijk om een getal om te zetten 49 | naar een string. Een voorbeeld: 50 | 51 | 10 REM Mijn tweede window 52 | 20 CLS:_WINDOW(0,0,80,3) 53 | 30 _PRINT("Dit is mijn tweede window! Joepie!") 54 | 40 LOCATE 0,3 55 | 50 A$=INPUT$(1) 56 | RUN 57 | 58 | Er verschijnt een leuk windowtje met daarin de tekst zoals 59 | aangegeven in regel 30. 60 | 61 | THATS NOT ALL 62 | 63 | De plek waar de tekst geprint moet worden in een window, kan 64 | bepaald worden met _LOCATE(X,Y) en werkt hetzelfde als 65 | LOCATE in gewoon BASIC. Als de plek buiten het scherm is, 66 | komt er een foutmelding. Een klein voorbeeldje: _LOCATE(0,0) 67 | zet de cursor in de linkerbovenhoek (hetgeen ook kan met 68 | _HOME). 69 | 70 | Met _WCLS wordt de inhoud van de laatst gemaakte window 71 | gewist. _RWIN haalt een window weg en herstelt datgene dat 72 | achter het window zat. Het is ook mogelijk om alle windows 73 | te wissen, dat kan met _RALLWIN. Ook hier wordt de 74 | achtergrond weer hersteld. 75 | 76 | I LIKE SCROLLIN' AND MOVIN' 77 | 78 | Omdat mensen houden van scrollende dingen, zit er in 79 | Advanced BASIC ook een optie daarvoor, nee, eigenlijk wel 80 | vier, namelijk: _UP, _DOWN, _LEFT en _RIGHT. 81 | 82 | Deze commando's scrollen de inhoud van de laatst gemaakte 83 | window in de aangegeven richting. 84 | 85 | WE WANT MORE 86 | 87 | Helaas, helaas, volgende keer meer! 88 | 89 | 90 | Arjan Bakker 91 | -------------------------------------------------------------------------------- /sunrise_special/1/track_0_op_de_turbo-r.md: -------------------------------------------------------------------------------- 1 | # T R A C K 0 O P D E T U R B O R 2 | 3 | 4 | Het zal veel MSX turbo R bezitters al zijn opgevallen dat de 5 | diskdrive veel meer geluid produceert bij het lezen of 6 | schrijven van track 0 dan bij het lezen of schrijven van 7 | andere tracks. Waarom is dat zo? 8 | 9 | 10 | ## B E L A N G R I J K E I N F O R M A T I E 11 | 12 | Track #0 bevat de logische sectoren #0 tot en met #17. 13 | Sector #0 tot en met #8 op kant #0 en sector #9 tot en met 14 | #17 op kant #1. Zoals u weet (of anders in de diskcursus op 15 | deze Special kunt lezen) staat in deze sectoren zeer 16 | belangrijke informatie, namelijk de bootsector, de FAT en de 17 | directory. 18 | 19 | Deze informatie is zeer belangrijk voor het functioneren van 20 | de diskette. Raakt deze informatie beschadigt, dan is de 21 | informatie op de rest van de diskette slechts met grote 22 | moeite bereikbaar. Vandaar dat het een absolute ramp is als 23 | een van de sectoren #0 t/m #13 beschadigd raakt. 24 | 25 | ## B U I T E N S T E T R A C K 26 | 27 | Een oplossing die bij alle computers gebruikt wordt, is het 28 | feit dat track 0 de buitenste track is. Van binnen naar 29 | buiten toe worden de tracks steeds groter, terwijl er toch 30 | steeds dezelfde informatie op staat. U begrijpt dat er 31 | minder storingen optreden indien de informatie verder uit 32 | elkaar staat. Daarom is het beter om voor de zo belangrijke 33 | track 0 de buitenste track te gebruiken. 34 | 35 | 36 | ## E X T R A V E I L I G 37 | 38 | Bij het ontwikkelen van de turbo R vond men dit blijkbaar 39 | nog niet genoeg, want op de turbo R krijgt track 0 een 40 | speciale behandeling, die nog veiliger is. 41 | 42 | Ik weet niet precies wat deze speciale behandeling doet, 43 | maar vast staat dat het herrie maakt! Veel extra tijd kost 44 | het echter niet, het verschil in snelheid tussen het inlezen 45 | van track 0 en een willekeurige andere track is nihil. 46 | 47 | 48 | ## E I G E N L I J K S T I L 49 | 50 | De diskdrive van de turbo R is eigenlijk erg stil. Zelfs 51 | diskettes die op mijn vorige computer (een Sony HB-F700P 52 | MSX2) "aanliepen" werken nu geruisloos. Behalve bij track 0 53 | dan natuurlijk. 54 | 55 | Je kan het goed merken als je een diskette met een sector- 56 | kopieerprogramma kopieert. Aan het begin wordt track 0 57 | gelezen, dat maakt herrie, en daarna hoor je bijna niets 58 | meer. Alleen het "overstappen" van de kop van de diskdrive 59 | naar een andere track is te horen door een klein tikje. 60 | Verder is de diskdrive zeer stil! 61 | 62 | Maar bij het inlezen/wegschrijven van files produceert de 63 | turbo R wel redelijk wat geluid. Dit komt omdat de meeste 64 | files niet al te lang zijn, en dus de voornaamste tijd in 65 | beslag wordt genomen door het lezen van de directory en de 66 | FAT. En dat maakt nou precies die herrie... 67 | 68 | 69 | ## B E T R O U W B A A R 70 | 71 | Ik neem het geluid voor lief, want de diskdrive van de turbo 72 | R is wel zeer betrouwbaar. Ik heb mijn turbo R al bijna een 73 | jaar, maar heb nog nooit last gehad van kapotte sectoren in 74 | de FAT of directory. Bij mijn vorige computer kwam dat wel 75 | zo af en toe voor. Blijkbaar helpt die speciale behandeling 76 | uitstekend! 77 | 78 | Stefan Boer 79 | -------------------------------------------------------------------------------- /future_disk/28/msx-dos2_deel_3.md: -------------------------------------------------------------------------------- 1 |  THE DOS2 COURSE GOES ON AND ON AND... 2 | ASCII'S WAY TO TORMENT MANKIND 3 | 4 | ���� 5 | ���� 6 | ���� 7 | ���� 8 | 9 | 10 | 11 | In other words, it time for DOS2 again. Not too much this time 12 | as time is indeed something I do not have... Just a few func- 13 | tions a little more specified, we'll reach $70 eventually, 14 | some day... Right?!? Ah well, we'll see... By the way, I'm 15 | not going to go into all that DOS1 BDOS crap, just the speci- 16 | fic DOS2 calls... DOS1 info can be found practically every- 17 | where, but if someone really wants that info, a call -as in 18 | phonecall, letter - will suffice to solve that problem. 19 | 20 | 21 | 22 | GET DISK PARAMETERS [_DPARM] 23 | 24 | IN: C = $31 25 | DE = Pointer to 32byte buffer 26 | L = Drive number 27 | RES: A = Error code 28 | DE = Preserved 29 | 30 | Created block: +$00 Physical drive number 31 | +$01 Sector size ($01FF) 32 | +$03 Sector per cluster 33 | +$04 Number of reserved sectors 34 | +$06 Number of FATs 35 | +$07 Entries in root directory 36 | +$09 Number of logical sectors 37 | +$0B Media descriptor byte 38 | +$0C Sectors per FAT 39 | +$0D First root directory sector 40 | +$0F First data sector 41 | +$11 Maximum cluster number 42 | +$13 Dirty disk flag 43 | +$14 Volume ID 44 | +$18 1F Unused 45 | 46 | 47 | 48 | FIND FIRST ENTRY [_FFIRST] 49 | 50 | IN: C = $40 51 | DE = File info block / ASCIIZ string pointer 52 | HL = ASCIIZ filename pointer (If DE = FIB) 53 | B = Attributes 54 | IX = New file info block 55 | RES: A = Error code 56 | IX = Matching entry 57 | 58 | 59 | 60 | FIND NEXT ENTRY [_FNEXT] 61 | 62 | IN: C = $41 63 | IX = Pointer to file info block from _FFIRST 64 | RES: A = Error code 65 | IX = Matching next entry 66 | 67 | 68 | 69 | FIND NEW ENTRY [_FNEW] 70 | 71 | IN: C = $42 72 | DE = File info block / ASCIIZ string pointer 73 | HL = ASCIIZ filename pointer (If DE = FIB) 74 | B = Attributes 75 | IX = New file info block 76 | RES: A = Error code 77 | IX = New entry 78 | 79 | 80 | 81 | OPEN FILE HANDLE [_OPEN] 82 | 83 | IN: C = $43 84 | DE = Drive/path/file ASCIIZ of FIB 85 | A = Mode: b0, no write b1, no read b2 inheritable 86 | RES: A = Error code 87 | B = New file handle 88 | 89 | 90 | 91 | And that's all folks. Sorry, I know, it aint much, but to be 92 | hounest even I have got better things to like. Like sleeping, 93 | for instance, because it's really terribly late... Till FD#29 94 | I guess, with -hopefully- a little more than this time... 95 | 96 | Tobias Keizer 97 | -------------------------------------------------------------------------------- /future_disk/11/pascal_1.md: -------------------------------------------------------------------------------- 1 | Pascal (1) 2 | ========== 3 | 4 | Men heeft mij gevraagd om een cursus PASCAL te schrijven. En 5 | omdat ik PASCAL een goede, gestructureerde en leuke taal vind, 6 | heb ik ja gezegt. 7 | 8 | Voordat ik ga beginnen met het echte werk, geef ik eerst een 9 | korte inleiding over wat PASCAL precies inhoud. PASCAL is 10 | vernoemd naar de wiskundige Blaise Pascal die van 1623 tot 1662 11 | leefde. Blaise Pascal was een van de grootste wiskundige die de 12 | wereld gekent heeft. Hij heeft onder andere de fundamenten 13 | gelegd van het kansrekenen. Maar het bekenste wat Blaise Pascal 14 | heeft gedaan (buiten zijn bekende driehoek) is het constru�ren 15 | van een rekenmachine. Deze machine kon veel rekenkundige 16 | berekeningen uitvoeren, en dat terwijl het geheel alleen maar 17 | uit tandwielen en dergelijke bestond (probeer je dat eens voor 18 | te stellen). 19 | 20 | Rond 1970 dook de naam PASCAL (geheel in hoofdletters) weer op. 21 | Dit omdat ene Professor Niklaus Wirth het leuk vond om zijn 22 | zojuist ontwikkelde programeertaal te vernoemen naar Blaise 23 | Pascal. En deze taal is nu h��l bekend. De meeste mensen hebben 24 | er ervaring mee, of hebben er wel van gehoord. Het voordeel van 25 | PASCAL boven BASIC is de gestructureerdheid. Is het verplicht 26 | bij BASIC om commentaar te plaatsen (zeker als iemand anders er 27 | iets van moet begrijpen) bij PASCAL word de helft van de 28 | 'documentatie' door de gestructureerdheid van de taal zelf 29 | verzorgd. Hiermee bedoel ik dat je er bij BASIC een spagetie van 30 | kunt maken (met behulp van GOTO-instructies) die niet te lezen 31 | is. Terwijl je bij PASCAL het programma veel sneller doorziet 32 | door het inspringen (word later duidelijk), de grotere 33 | verscheidenheid aan herhalingslussen (WHILE, REPEAT en FOR) en 34 | het (bijna) niet voorkomen van GOTO-instructies. 35 | 36 | Tot zover de inleiding. Nu gaan we dus echt beginnen. Dat echt 37 | beginnen houdt in dat ik de globale structuur van een 38 | PASCAL-programma ga uitleggen. 39 | 40 | De globale structuur van een PASCAL-programma is als volgt : 41 | 42 | PROGRAM programma_naam (INPUT,OUTPUT); 43 | 44 | CONST 45 | {Constante definitie} 46 | 47 | TYPE 48 | {Type definitie} 49 | 50 | VAR 51 | {Variabelen declaratie} 52 | -------------------------------------------------------------------------------- /future_disk/35/copy_in_basic.md: -------------------------------------------------------------------------------- 1 | Het copy commando in Basic..hmm interessant...hmm ja, daar heb ik nu altijd al eens wat over willen weten...aja, ja ja, ahum, mmmm, ja ja ja interessant...aha hmm ye ye yep ja ja 2 | COPY IN BASIC 3 | 4 | ���� 5 | ���� 6 | ���� 7 | ���� 8 | 9 | 10 | Het COPY-commando heeft meerdere betekenissen. Je kunt er 11 | bestanden mee copi�ren en stukjes van een beeld mee copi�ren. 12 | Dat laatste kan op twee manieren, namelijk van VRAM naar 13 | VRAM en van VRAM naar een array of andersom. De eerste 14 | functie kent iedereen natuurlijk wel, maar de tweede is toch 15 | wel onbekend. Zoals gezegd kun je dus ook een array 16 | gebruiken om naar te copi�ren of weer in het VRAM te zetten. 17 | 18 | Voordat je een stuk scherm naar een array copi�ert, moet je 19 | die eerst berekenen en defini�ren. De grootte van een array 20 | kan met het volgende programmaatje berekend worden: 21 | 22 | 10 PRINT "Bereken grootte voor array-dimensie voor 23 | copy-commando" 24 | 20 PRINT:INPUT "Linker X-coordinaat";X1 25 | 30 INPUT "Boven y-coordinaat";Y1 26 | 40 INPUT "Rechter X-coordinaat";X2 27 | 50 INPUT "Onder y-coordinaat";Y2 28 | 60 PRINT:INPUT "Schermnummer";S 29 | 70 PRINT:INPUT "Variabele type (% = Integer, ! = Single 30 | precision en # = Double precision";A$ 31 | 80 D=4:IF S=6 THEN D=2 32 | 90 D=INT((D*(ABS(X2-X1)+1)*(ABS(Y2-Y1)+1)+7)\8)+4 33 | 100 T=2:IF A$="!" THEN T=4 ELSE IF A$="#" THEN T=8 34 | 110 D=INT(D/T) 35 | 120 PRINT:PRINT "DIM M(";MID$(STR$(D),2);")" 36 | 37 | Zo, nu komt de COPY-commando zelf aan bod. Eerst de 38 | COPY-commando om een deel van het beeld in het geheugen te 39 | zetten. 40 | 41 | COPY (X1,Y1)-(X2,Y2)[,P] TO V 42 | 43 | X1 is de linker-coordinaat van het te copi�ren gedeelte. Y1 44 | is de boven-coordinaat van het te copi�ren gedeelte. X2 is 45 | de rechter-coordinaat van het te copi�ren gedeelte. Y2 is de 46 | onder-coordinaat van het te copi�ren gedeelte. P is de 47 | pagina-nummer. V is de naam van de variable waar de tekening 48 | in gezet moet worden. Alleen P hoeft niet ingevuld worden, 49 | zoals te zien is aan de vierkante haken. 50 | 51 | Okee, de tekening moet natuurlijk ook weer op het beeld 52 | kunnen komen. Dit doen we met: 53 | 54 | COPY V[,S] TO (X,Y)[,P[,O]] 55 | 56 | V is weer de naam van de variable waar de tekening in zit. S 57 | is de soort bewerking wat er met de tekening moet gebeuren. 58 | Hierbij is 0 normaal, 1 = horizontaal spiegelen, 2 = 59 | verticaal spiegelen, 3 = 1 + 2. X en Y zijn de coordinaten 60 | waar de tekening heen moet. P is weer de paginanummer en O 61 | is de logische operatie. Aangezien deze tekst niet over 62 | logische operaties gaat, ga ik daar dus ook niet verder op 63 | in. S, P en O mogen weggelaten worden. Hier komt een 64 | voorbeeldprogrammaatje. Start het op en je ziet het effect. 65 | 66 | 10 SCREEN5:DIM M(66):LINE (0,0)-(0,15),15 67 | 20 LINE (0,7)-(15,7),15 68 | 30 COPY (0,0)-(15,15) TO M 69 | 40 COPY M,0 TO (100,50) 70 | 50 COPY M,1 TO (100+15,80) 71 | 60 COPY M,2 TO (100,110+15) 72 | 70 COPY M,3 TO (100+15,150) 73 | 80 A$=INPUT$(1) 74 | 75 | Zoals je ziet kun je dus makkelijk effecten gebruiken in 76 | BASIC, maar je moet natuurlijk wel zorgen dat het wel in het 77 | geheugen past, want naar een array copi�ren kost al snel 78 | veel geheugen. Tot de volgende keer... 79 | 80 | 81 | Vincent 82 |  83 | -------------------------------------------------------------------------------- /future_disk/32/pascal_cursus_2_en.md: -------------------------------------------------------------------------------- 1 | # Pascal Course (2) 2 | 3 | Let's start programming. This course will handle 4 | variables. One of the main differences between BASIC 5 | and PASCAL is that in PASCAL you need to declare every 6 | variable you use before using it. This is to tell the 7 | compiler that you are going to use this variable AND to 8 | tell the compiler how you are going to use it. That's right, 9 | you need not only tell the compiler that you are going to use 10 | a variable but also what kind of variable it is (integer, 11 | real, etc). An example (the variable declaration is started 12 | using the reserved word VAR): 13 | 14 | VAR 15 | counter : integer; 16 | value : real; 17 | status : boolean; 18 | 19 | First use the reserved word VAR. Then on the next lines state 20 | the name of the variable followed by a colon and it's type, 21 | follow by a semi colon. The only restriction for variable 22 | names is that they may not be a reserved word (like BEGIN, 23 | END, VAR, etc). 24 | 25 | These are the standard types: 26 | 27 | - boolean (can be TRUE or FALSE) 28 | - byte (no need to explain) 29 | - integer (16 bit value, also called word) 30 | - longint (32 bit value, also called longword) 31 | - real (a not integer value) 32 | - char (an ascii character) 33 | - string (multiple characters) 34 | - text (a file containing characters) 35 | 36 | These are all the standard types included in the modern 37 | PASCAL versions. The last two (string and text) where not 38 | included in the early versions of PASCAL, so check the 39 | documentation of your compiler before using them. You can 40 | also make your own variable types, but I will come to that in 41 | a later course. 42 | 43 | How to use the variables? Here are some examples: 44 | 45 | value:=2; 46 | character:='A'; 47 | counter:=counter+1; 48 | 49 | Assigning a value to a variable is very simple. First name 50 | the variable you want to assign the value to, then place the 51 | 'equals' sign (:=) and then name the value to assign. The 52 | last works just as in basic, the only restriction is that the 53 | type may not change, e.g. don't assign a real to an integer. 54 | 55 | Besides the normal operators (+, -, *, (), AND, OR, XOR, 56 | NOT), there are also 'functions' like CHR, ORD, ROUND, TRUNC, 57 | ABS, ARCTAN, COS, EXP, FRAC, INT, LN, SIN, SQR, SQRT, etc. 58 | Most of them you already know if you program in BASIC. If you 59 | don't know them, then read a book about PASCAL. All of these 60 | functions can be used, but again, DON'T CHANGE THE TYPE. 61 | 62 | Good to remember is that, when using integers, there are two 63 | special functions you can use when dividing. Use DIV to 64 | divide, and use MOD to get what's left after the division. 65 | 66 | That's it for this course. I will leave you with an 67 | assignment. I will always try to leave you with an 68 | assignment, because the only way of learning a computer 69 | language, is by programming in the language. 70 | 71 | Assignment: 72 | Write a program that asks for three prices of products. The 73 | program must then calculate the total price with tax, the 74 | total price without tax, the tax of each product and the 75 | total tax. 76 | 77 | Use Readln(variable) to read a variable from the keyboard, 78 | and use Writeln(variable) to write a variable to screen. 79 | 80 | Have fun and if you send your solution to me, I will ensure 81 | that your solution is published next time. 82 | 83 | Jeroen 'Just program it' Smael -------------------------------------------------------------------------------- /future_disk/33/assembly_cursus_2.md: -------------------------------------------------------------------------------- 1 |  De assembly cursus gaat eindelijk verder... 2 | ASSEMBLY CURSUS (2) 3 | 4 | 5 | Hier is dan eindelijk het tweede deel van de assembly 6 | cursus. Dit maal bespreek ik een string-search routine. De 7 | routine is zo simpel mogelijk gehouden door wildcards etc. 8 | gewoon niet toe te staan. Het moet echter simpel zijn om de 9 | wildcard '?' te implementeren. 10 | 11 | 12 | DE INVOER 13 | 14 | De routine heeft 3 variabelen nodig, namelijk het adres waar 15 | met zoeken moet worden begonnen (HL), het aantal te 16 | onderzoeken bytes (BC) en het beginadres van de te zoeken 17 | string (DE). De te zoeken string moet afgesloten worden met 18 | #FF, evenals de strings in het geheugen. 19 | 20 | 21 | DE ROUTINE 22 | 23 | Hier komt dan de routine, met tussendoor wat uitleg. 24 | 25 | SEARCH: PUSH DE 26 | INC HL 27 | 28 | SEARCH initialiseert de zoek-routine. DE moet bewaard 29 | worden, omdat deze wordt gebruikt om bij te houden op welke 30 | plek in de string we zitten. CPI verhoogt HL altijd, maar 31 | als de bytes niet hetzelfde zijn, moet dat juist niet. 32 | Daarom wordt HL alvast verhoogd, omdat HL in STRSRC verlaagt 33 | MOET worden. 34 | 35 | STRSRC: POP DE 36 | PUSH DE 37 | DEC HL 38 | LD A,(DE) 39 | 40 | SRCHF: CPIR 41 | JP Z,FOUNDF 42 | 43 | STOP: LD A,255 44 | POP DE 45 | RET 46 | 47 | Eerst wordt de pointer weer opgehaald en bewaard. HL wordt 48 | verlaagd omdat CPI HL altijd verhoogt, terwijl dat juist 49 | niet altijd nodig is. Dan wordt het eerste teken van de 50 | string geladen en CPIR zoekt dan net zolang totdat het teken 51 | gevonden is. Als het teken gevonden is, wordt er gesprongen 52 | naar de routine die de volgende bytes onderzoekt en anders 53 | stopt het programma met 255 in de accu om aan te geven dat 54 | de string niet gevonden is. 55 | 56 | FOUNDF: LD (STRADR),HL 57 | 58 | Adres van string wordt bewaard, omdat de string niet gelijk 59 | hoeft te zijn als de zoekstring. 60 | 61 | INC DE 62 | LD A,(DE) 63 | SRCHN: CPI 64 | JP NZ,STRSRC 65 | 66 | Volgende teken wordt geladen en vergeleken. Als ze niet 67 | gelijk zijn, wordt er teruggegaan naar de routine die het 68 | eerste teken zoekt. 69 | 70 | LD A,B 71 | OR C 72 | JP Z,STOP 73 | 74 | Als alle bytes geweest zijn, stopt het programma. 75 | 76 | INC DE 77 | 78 | Volgende teken. 79 | 80 | LD A,(DE) 81 | CP #FF 82 | JP NZ,SRCHN 83 | LD A,(HL) 84 | CP #FF 85 | JR NZ,STRSRC 86 | 87 | Er wordt gekeken of de zoekstring aan het einde is. Als dat 88 | niet zo is, wordt er verder gegaan met vergelijken. Als dat 89 | wel zo is, wordt er gekeken of de string in het geheugen ook 90 | aan het einde is. Als dat niet zo is, wordt er overnieuw 91 | begonnen met zoeken. 92 | 93 | XOR A 94 | LD HL,(STRADR) 95 | DEC HL 96 | POP DE 97 | RET 98 | 99 | STRADR: DEFW 0 100 | 101 | Accu wordt 0 om aan te geven dat het zoeken gelukt is. Het 102 | adres van de string wordt geladen en DE wordt teruggehaald 103 | ivm met RET. 104 | 105 | Zo, dit was de routine. Voor de mensen die het willen 106 | gebruiken, staat de routine ook op disk onder de naam 107 | STRSRCH.ASM. Tot de volgende keer! 108 | 109 | Arjan Bakker 110 | -------------------------------------------------------------------------------- /future_disk/30/assembly_voor_beginners.md: -------------------------------------------------------------------------------- 1 |  De beginnertjes hebben het goed dit keer!!! Een gehele assymbly cursus voor jullie... 2 | 3 | 4 | ASSEMBLY VOOR BEGINNERS 5 | 6 | 7 | In deze rubriek komen routine's aan bod die nuttig zijn en 8 | vaak gebruikt worden. Degenen die geen assembly kunnen, 9 | hebben niets aan deze cursus. In dit eerste deel komt de 10 | vermenigvuldigings-routine aan bod. 11 | 12 | 13 | HOE DOEN WE DIT DAN? 14 | 15 | Okay, eerst eventjes laten zien hoe het dus niet moet, zoals 16 | beginners het vaak doen (schaam je niet, ik deed het eerst 17 | ook zo). Vermenigvuldigen gebeurt meestal botweg als 18 | herhaald optellen van een getal. Bijvoorbeeld, 15 * 25 is 19 | het resultaat van 25 + 25 + ... + 25 + 25 (in totaal 15 keer 20 | het getal 25 en 14 keer het plusteken). Als source ziet dit 21 | er zo uit: 22 | 23 | LD BC,15 24 | LD DE,25 25 | LD HL,0 26 | 27 | MULUW: ADD HL,DE 28 | DEC BC 29 | LD A,B 30 | OR C 31 | JP NZ,MULUW 32 | RET 33 | 34 | Natuurlijk, bij kleine getallen werkt dit wel snel, maar als 35 | je grote getallen gebruikt, is een andere methode veel 36 | sneller. 37 | 38 | 39 | TERUG NAAR DE BASISSCHOOL 40 | 41 | Hoe pakken we het dan wel aan? Nou, ik zal even een voor- 42 | beeldje geven hoe ik het geleerd heb op de basisschool. 43 | 44 | 15 45 | 25 46 | --- x 47 | 5 * 15 = 75 48 | 2 * 150 = 300 49 | --- + 50 | 375 51 | 52 | Telkens als we een getal naar links gaan, dan vermenigvul- 53 | digen we het eerste getal met 10. Op de MSX gaat het net zo, 54 | maar nu moeten we even binair denken, dus vermenigvuldigen 55 | we met 2, in plaats van 10. Hetzelfde voorbeeldje nog eens, 56 | maar nu in het binaire talstelsel. 57 | 58 | 1111 = 15 59 | 11001 = 25 60 | -------- x --- x 61 | 1 * 1111 = 1111 = 15 62 | 0 * 11110 = 0 63 | 0 * 111100 = 0 64 | 1 * 1111000 = 1111000 = 120 65 | 1 * 11110000 = 11110000 = 240 66 | -------- + ----- + 67 | 101110111 = 375 68 | 69 | Zoals je ziet, klopt dit als een bus. 70 | 71 | 72 | NU OP DE MSX 73 | 74 | We gaan er even van uit dat de te vermenigvuldigen getallen 75 | in BC en DE staan en dat het resultaat in HL komt. De source 76 | ziet er dan als volgt uit: 77 | 78 | LD DE,25 ;De te vermenigvuldigen getallen. 79 | LD BC,15 80 | 81 | MULUW: LD HL,0 ;HL moet 0 zijn bij het begin 82 | 83 | MULUW1: SRL D ;Deel DE door 2. Als DE oneven was, 84 | RR E ;wordt, de carry-flag gezet. 85 | 86 | JR NC,MULUW2 ;Carry-flag niet gezet? Niet optellen. 87 | ADD HL,BC ;BC optellen bij resultaat. 88 | 89 | MULUW2: LD A,D ;Als DE 0 is, zijn we klaar. 90 | OR E 91 | RET Z 92 | 93 | SLA C ;Vermenigvuldig BC met 2. 94 | RL B 95 | JP MULUW1 ;Terug naar MULUW1 96 | 97 | Met een CALL naar MULUW kun je de getallen in DE en BC snel 98 | met elkaar vermenigvuldigen, het resultaat komt in HL. 99 | 100 | Als het goed is, is het nu duidelijk hoe het werkt. Zo niet, 101 | lees de tekst dan nog maar eens over. 102 | 103 | Oja mensen, er staan .ASM files op deze FD. Dus dan kun je 104 | het allemaal nog eens rustig bekijken (ASSEMBL1.ASM). 105 | 106 | Arjan Bakker 107 | -------------------------------------------------------------------------------- /future_disk/36/advanced_basic_5.md: -------------------------------------------------------------------------------- 1 | Arjan bazelt wat over Advanced Basic... 2 | 3 | ADVANCED BASIC (5) 4 | 5 | 6 | Welkom bij alweer het vijfde deel van deze cursus. Deze keer 7 | ga ik het hebben over data-verplaatsingen, zoals ik de 8 | vorige keer beloofd had. 9 | 10 | Het komt nogal eens voor dat je gegevens van ram naar vram 11 | of andersom wilt verplaatsen. In BASIC gaat dit normaal 12 | gesproken nogal traag en daarom heeft ADVANCED BASIC wat 13 | extra commando's daarvoor, namelijk: 14 | 15 | _RAMRAM(startadres,aantal,bestemming) 16 | Verplaatst aantal bytes vanaf startadres naar 17 | bestemming. Een nuttig voorbeeld weet ik niet zo snel te 18 | verzinnen. 19 | 20 | _RAMVRAM(startadres,aantal,bestemming,pagina) 21 | Verplaatst aantal bytes van ram naar vram. Pagina is om 22 | aan te geven of de 1e 64 kB of de 2e 64 kB vram als 23 | bestemming gebruikt moet worden. Een voorbeeld: 24 | 10 SCREEN 0 25 | 20 A$="Dit is een tekst ":HL=&HA000 26 | 30 FOR A=1 TO LEN(A$) 27 | 40 POKE HL,ASC(MID$(A$,A,1)):HL=HL+1 28 | 50 NEXT A 29 | 60 _RAMVRAM(&HA000,LEN(A$),240,0) 30 | RUN 31 | 32 | Dit programmaatje zet een string in het geheugen en 33 | verplaatst het naar adres 240 van het VRAM, wat in SCREEN 0 34 | de vierde regel is. 35 | 36 | _VRAMRAM(startadres,pagina,aantal,bestemming) 37 | Verplaatst aantal bytes van vram naar ram. Een voorbeeld 38 | lijkt me overbodig. 39 | 40 | _VRAMVRAM(startadres,pagina,aantal,bestemming,pagina) 41 | Verplaatst aantal bytes van vram naar vram. Een leuk 42 | voorbeeldje: 43 | 10 SCREEN 0 44 | 20 PRINT "Deze tekst scrolled naar links" 45 | 30 _VRAMVRAM(1,0,79,0) 46 | 40 FOR A=1 TO 100:NEXT A 47 | 50 IF STRIG(0)=0 THEN GOTO 30 48 | RUN 49 | 50 | Dit programmaatje print een tekstje en laat het naar links 51 | scrollen en stopt pas als er op spatie gedrukt word. 52 | 53 | _OUTM(startadres,aantal,poort) 54 | Stuurt aantal bytes vanaf startadres naar een I/O-poort. 55 | Vooral handig bij de nieuwe MSX-uitbreidingen als OPL4 en 56 | GFX9000. 57 | 58 | _INM(poort,aantal,bestemming) 59 | Haalt aantal bytes uit I/O-poort en zet het in ram. Zie ook 60 | _OUTM. 61 | 62 | 63 | WHAT'S NEXT 64 | 65 | Verder heeft Advanced BASIC nog wat commando's om het (v)ram 66 | met een waarde te vullen, namelijk: 67 | 68 | _FILLRAM(startadres,aantal,waarde) 69 | Vult ram met een bepaalde waarde. Een voorbeeld: 70 | 10 _FILLRAM(&H8000,128,0) 71 | 20 PRINT "Deze tekst zie je niet meer...." 72 | RUN 73 | 74 | Het programma wordt helemaal overschreven met nullen. De 75 | tekst in regel 20 zul je dus niet meer te zien krijgen en 76 | het programma stopt gewoon. 77 | 78 | _FILLVRAM(startadres,pagina,aantal,waarde) 79 | Vult vram met een bepaalde waarde. Een voorbeeld: 80 | 10 SCREEN 0 81 | 20 _FILLVRAM(0,0,24*80,65) 82 | 30 IF STRIG(0)=0 THEN GOTO 30 83 | 40 CLS 84 | RUN 85 | 86 | Dit programmaatje vult het hele scherm met de letter A. Na 87 | een druk op de spatie kom je weer in BASIC. 88 | 89 | 90 | WAT RESTJES 91 | 92 | Als laatst geef ik nog 2 commando's die niet zoveel met 93 | data-verplaatsingen hebben te maken, namelijk: 94 | 95 | _GETPAL(kleur,rood,groen,blauw) 96 | Leest de RGB-waardes van een kleur en zet die op de adressen 97 | rood, groen en blauw. 98 | 99 | _HOME 100 | Verplaatst de cursor van een window naar positie (0,0). 101 | 102 | De volgende en laatste keer komt hybride-programmeren onder 103 | Advanced BASIC aan bod, waarmee je leuke dingen kunt doen 104 | (onder andere Advanced BASIC combineren met KUN-BASIC!). Tot 105 | dan! 106 | 107 | 108 | Arjan Bakker 109 | -------------------------------------------------------------------------------- /sunrise_special/4/hex_printen.md: -------------------------------------------------------------------------------- 1 | N O G M A A L S H E X P R I N T E N 2 | 3 | 4 | Op Sunrise Special #3 stond een tekst van mij over het 5 | printen van een binair, hexadecimaal of decimaal getal in 6 | ML. De decimale routine was goed en de binaire zeer mooi, 7 | maar de hexadecimale was nogal eh... vreemd geprogrammeerd. 8 | Dat komt ervan als je na 2:00 's nachts nog teksten voor de 9 | Special gaat schrijven! 10 | 11 | Om het goed te maken hierbij een fatsoenlijke routine om een 12 | getal hexadecimaal af te drukken. Onderstaande source stuurt 13 | de waarde in A hexadecimaal naar het scherm. 14 | 15 | PRTHEX: LD C,A ; bewaar A voor andere helft 16 | AND &HF0 ; bovenste nibble 17 | RRCA 18 | RRCA 19 | RRCA 20 | RRCA ; verschuif naar onderste 21 | CALL UITHEX ; printen 22 | LD A,C ; oude waarde weer terug 23 | AND &H0F ; onderste nibble 24 | CALL UITHEX ; printen 25 | RET 26 | UITHEX: ADD A,"0" 27 | CP "9"+1 ; is het een cijfer? 28 | JP C,CIJFER ; ja, dan printen 29 | ADD A,"A"-"9"-1 ; nee, dan letter van maken 30 | CIJFER: CALL &HA2 ; BIOS routine CHPUT 31 | RET 32 | 33 | 34 | S P A G H E T T I 35 | 36 | Dit is een nette routine. Er zullen echter programmeurs zijn 37 | die zeggen dat het sneller kan. Dat kan ook wel, en het 38 | werkt ook wel, maar het is dan niet zo netjes meer. Je 39 | krijgt dan het volgende: 40 | 41 | PRTHEX: LD C,A 42 | AND &HF0 43 | RRCA 44 | RRCA 45 | RRCA 46 | RRCA 47 | CALL UITHEX 48 | LD A,C 49 | AND &H0F 50 | UITHEX: ADD A,"0" 51 | CP "9"+1 52 | JP C,&HA2 53 | ADD A,"A"-"9"-1 54 | JP &HA2 55 | 56 | Het is korter en sneller, en toch zou ik het nooit zo 57 | programmeren. In zo'n kleine routine kun je niet zo gauw van 58 | spaghettistijl spreken, maar dit begint er aardig op te 59 | lijken. De routine roept namelijk halverwege zijn staart al 60 | een keer aan, en dat soort dingen vallen nu eenmaal onder de 61 | noemer "spaghetti". Ook het vervangen van CALL &HA2 en RET 62 | door een JP en is niet echt netjes, en het weglaten van de 63 | tweede CALL UITHEX al helemaal niet. 64 | 65 | Maar goed, welke routine u ook kiest, het is in ieder geval 66 | beter dan die maffe routine van de vorige keer (al was dat 67 | geen spaghetti!). 68 | 69 | Stefan Boer 70 | 71 | 72 | Nvdr. Hier verschillen Stefan en ik duidelijk van mening. 73 | Vandaar dat ik deze tekst toch laat staan. In het stukje 74 | over een goede random routine gebruik ik nl. de routine die 75 | volgens Stefan "fout" is. 76 | -------------------------------------------------------------------------------- /sunrise_special/4/MBScan.md: -------------------------------------------------------------------------------- 1 | M B S C A N V O O R D O S 2 2 | 3 | 4 | Op de vorige Sunrise Magazine stond MBSCAN.BIN, een zeer 5 | handig programmaatje om de gegevens van alle MoonBlaster 6 | files op een enkel- of dubbelzijdige disk onder DOS1 te 7 | bekijken. 8 | 9 | Alle met MoonBlaster gemaakte muziekdisks kunnen daarmee 10 | worden bekeken. MB werkt immers alleen met enkel- of 11 | dubbelzijdige diskettes onder DOS1. 12 | 13 | 14 | H D 15 | 16 | Nu zijn er echter van die irritante HD gebruikers die overal 17 | een HD versie van willen hebben, en dus ook van MBSCAN 18 | (Nvdr. Hmmfff...). Waar ze dat voor willen gebruiken is mij 19 | een raadsel, want een offici�le HD versie van MoonBlaster 20 | bestaat niet en voor mensen die MoonBlaster niet hebben en 21 | de muziekjes alleen maar afspelen heeft het weinig nut, want 22 | wie verspreid er nou EDIT versies van muziekjes? 23 | 24 | Enfin, voor de HD gebruikers die een directory met MB 25 | muziekjes hebben en deze toch met MBSCAN willen bekijken, 26 | heb ik samen met Kasper (juist ja, ook zo'n HD freak) MBSCAN 27 | omgebouwd tot een DOS2 versie. 28 | 29 | 30 | W E R K I N G 31 | 32 | De werking is vrij simpel: 33 | 34 | MBSCAN [drive:][directory] 35 | 36 | Wordt er niets ingevuld, dan wordt de huidige directory 37 | genomen. Van elke .MBM file wordt de naam gegeven, EDIT of 38 | USER, de titel en de drumkit. De uitvoer kan worden 39 | gepauzeerd met de spatiebalk en met ^C kan het programma 40 | voortijdig worden be�indigd. 41 | 42 | 43 | R E D I R E C T I O N I N G 44 | 45 | De schermuitvoer werkt via de BDOS, wat als voordeel heeft 46 | dat de redirectioning kan worden gebruikt. Dat is erg handig 47 | en meteen ook de enige zinnige functie van MBSCAN.COM die ik 48 | kan bedenken voor mensen die geen HD hebben, je kunt zo heel 49 | eenvoudig een overzicht van alle muziekjes naar een file of 50 | naar de printer sturen. Bijvoorbeeld: 51 | 52 | MBSCAN A:\MB>H:MUSIC.TXT 53 | 54 | Zet de info van alle muziekjes in de directory \MB op drive 55 | A: in de file MUSIC.TXT op drive H:. Het is in verband met 56 | de snelheid zeer raadzaam om de tekstfile op H: te laten 57 | komen. Nog een voorbeeld: 58 | 59 | MBSCAN>PRN 60 | 61 | Print de info van de muziekjes in de huidige directory uit. 62 | 63 | 64 | T E N S L O T T E 65 | 66 | Heb je geen HD maar wel DOS2, blijf dan gewoon MBSCAN.BIN 67 | gebruiken. Ik neem niet aan dat je de muziekjes in 68 | directory's hebt gezet, en MBSCAN.BIN is nu eenmaal sneller 69 | dan MBSCAN.COM, omdat er rechtstreeks sectoren worden 70 | gelezen. 71 | 72 | Voor de HD gebruikers is er nu dus MBSCAN.COM, zet voor een 73 | optimale snelheid op de turbo R de BUFFERS op maximaal. Veel 74 | plezier! 75 | 76 | Stefan Boer 77 | -------------------------------------------------------------------------------- /sunrise_special/4/mbscan.md: -------------------------------------------------------------------------------- 1 | M B S C A N V O O R D O S 2 2 | 3 | 4 | Op de vorige Sunrise Magazine stond MBSCAN.BIN, een zeer 5 | handig programmaatje om de gegevens van alle MoonBlaster 6 | files op een enkel- of dubbelzijdige disk onder DOS1 te 7 | bekijken. 8 | 9 | Alle met MoonBlaster gemaakte muziekdisks kunnen daarmee 10 | worden bekeken. MB werkt immers alleen met enkel- of 11 | dubbelzijdige diskettes onder DOS1. 12 | 13 | 14 | H D 15 | 16 | Nu zijn er echter van die irritante HD gebruikers die overal 17 | een HD versie van willen hebben, en dus ook van MBSCAN 18 | (Nvdr. Hmmfff...). Waar ze dat voor willen gebruiken is mij 19 | een raadsel, want een offici�le HD versie van MoonBlaster 20 | bestaat niet en voor mensen die MoonBlaster niet hebben en 21 | de muziekjes alleen maar afspelen heeft het weinig nut, want 22 | wie verspreid er nou EDIT versies van muziekjes? 23 | 24 | Enfin, voor de HD gebruikers die een directory met MB 25 | muziekjes hebben en deze toch met MBSCAN willen bekijken, 26 | heb ik samen met Kasper (juist ja, ook zo'n HD freak) MBSCAN 27 | omgebouwd tot een DOS2 versie. 28 | 29 | 30 | W E R K I N G 31 | 32 | De werking is vrij simpel: 33 | 34 | MBSCAN [drive:][directory] 35 | 36 | Wordt er niets ingevuld, dan wordt de huidige directory 37 | genomen. Van elke .MBM file wordt de naam gegeven, EDIT of 38 | USER, de titel en de drumkit. De uitvoer kan worden 39 | gepauzeerd met de spatiebalk en met ^C kan het programma 40 | voortijdig worden be�indigd. 41 | 42 | 43 | R E D I R E C T I O N I N G 44 | 45 | De schermuitvoer werkt via de BDOS, wat als voordeel heeft 46 | dat de redirectioning kan worden gebruikt. Dat is erg handig 47 | en meteen ook de enige zinnige functie van MBSCAN.COM die ik 48 | kan bedenken voor mensen die geen HD hebben, je kunt zo heel 49 | eenvoudig een overzicht van alle muziekjes naar een file of 50 | naar de printer sturen. Bijvoorbeeld: 51 | 52 | MBSCAN A:\MB>H:MUSIC.TXT 53 | 54 | Zet de info van alle muziekjes in de directory \MB op drive 55 | A: in de file MUSIC.TXT op drive H:. Het is in verband met 56 | de snelheid zeer raadzaam om de tekstfile op H: te laten 57 | komen. Nog een voorbeeld: 58 | 59 | MBSCAN>PRN 60 | 61 | Print de info van de muziekjes in de huidige directory uit. 62 | 63 | 64 | T E N S L O T T E 65 | 66 | Heb je geen HD maar wel DOS2, blijf dan gewoon MBSCAN.BIN 67 | gebruiken. Ik neem niet aan dat je de muziekjes in 68 | directory's hebt gezet, en MBSCAN.BIN is nu eenmaal sneller 69 | dan MBSCAN.COM, omdat er rechtstreeks sectoren worden 70 | gelezen. 71 | 72 | Voor de HD gebruikers is er nu dus MBSCAN.COM, zet voor een 73 | optimale snelheid op de turbo R de BUFFERS op maximaal. Veel 74 | plezier! 75 | 76 | Stefan Boer 77 | -------------------------------------------------------------------------------- /sunrise_special/6/Modula2.md: -------------------------------------------------------------------------------- 1 | M O D U L A - 2 2 | 3 | 4 | G E R E S E R V E E R D E W O O R D E N 5 | 6 | Modula-2 heeft 40 gereserveerde woorden. Al deze woorden 7 | zijn in hoofdletters. 8 | 9 | AND ELSIF LOOP REPEAT 10 | ARRAY END MOD RETURN 11 | BEGIN EXIT MODULE SET 12 | BY EXPORT NOT THEN 13 | CASE FOR OF TO 14 | CONST FROM OR TYPE 15 | DEFINITION IF POINTER UNTIL 16 | DIV IMPLEMENTATION PROCEDURE VAR 17 | DO IMPORT QUALIFIED WHILE 18 | ELSE IN RECORD WITH 19 | 20 | 21 | S P E C I A L E S Y M B O L E N 22 | 23 | Modula-2 kent de volgende speciale symbolen: 24 | 25 | + optellen 26 | - aftrekken 27 | * vermenigvuldigen 28 | / delen 29 | := assignment (toekenning) 30 | & hetzelfde als AND 31 | = gelijkheid 32 | # ongelijkheid 33 | <> ongelijkheid 34 | < kleiner dan 35 | > groter dan 36 | <= kleiner of gelijk aan 37 | >= groter of gelijk aan 38 | () haakjes 39 | [] array-haken 40 | {} set-haken 41 | (* *) commentaar 42 | ^ pointer 43 | .. tot en met 44 | ,.;:~| leestekens 45 | 46 | 47 | S T A N D A A R D I D E N T I F I E R S 48 | 49 | Modula-2 kent de volgende standaard identifiers, ook deze 50 | worden allemaal in hoofdletters geschreven. 51 | 52 | ABS functie absolute waarde 53 | BITSET settype (set = verzameling) 54 | BOOLEAN waar/niet waar type 55 | CAP functie maak hoofdletter van kleine letter 56 | CARDINAL 0, 1, 2, 3, 4, ... type 57 | CHAR character type 58 | CHR functie geeft CHAR met bepaalde ASCII 59 | DEC verlaag 60 | DISPOSE dealloceer geheugen 61 | EXCL verwijder element uit set 62 | FALSE niet waar 63 | FLOAT omzetten CARDINAL naar REAL 64 | HALT be�indig executie van programma 65 | HIGH hoogste indexwaarde van open-array parameter 66 | INC verhoog 67 | INCL voeg element aan set toe 68 | INTEGER ..., -3, -2, -1, 0, 1, 2, ... type 69 | MAX maximum waarde van een opsomtype 70 | MIN minimum waarde van een opsomtype 71 | NEW alloceer geheugen 72 | NIL nulpointer 73 | ODD BOOLEAN functie oneven 74 | ORD rangnummer van een waarde van een opsomtype 75 | REAL floating point type 76 | TRUE waar 77 | TRUNC omzetten REAL naar CARDINAL 78 | VAL geef zoveelste waarde van een opsomtype 79 | 80 | 81 | Alle hier genoemde woorden, symbolen en identifiers zullen 82 | uiteraard nog in de cursus Modula-2 aan bod komen. Dit is 83 | slechts een overzicht met korte beschrijvingen. 84 | 85 | Stefan Boer 86 | -------------------------------------------------------------------------------- /sunrise_special/6/modula2.md: -------------------------------------------------------------------------------- 1 | M O D U L A - 2 2 | 3 | 4 | G E R E S E R V E E R D E W O O R D E N 5 | 6 | Modula-2 heeft 40 gereserveerde woorden. Al deze woorden 7 | zijn in hoofdletters. 8 | 9 | AND ELSIF LOOP REPEAT 10 | ARRAY END MOD RETURN 11 | BEGIN EXIT MODULE SET 12 | BY EXPORT NOT THEN 13 | CASE FOR OF TO 14 | CONST FROM OR TYPE 15 | DEFINITION IF POINTER UNTIL 16 | DIV IMPLEMENTATION PROCEDURE VAR 17 | DO IMPORT QUALIFIED WHILE 18 | ELSE IN RECORD WITH 19 | 20 | 21 | S P E C I A L E S Y M B O L E N 22 | 23 | Modula-2 kent de volgende speciale symbolen: 24 | 25 | + optellen 26 | - aftrekken 27 | * vermenigvuldigen 28 | / delen 29 | := assignment (toekenning) 30 | & hetzelfde als AND 31 | = gelijkheid 32 | # ongelijkheid 33 | <> ongelijkheid 34 | < kleiner dan 35 | > groter dan 36 | <= kleiner of gelijk aan 37 | >= groter of gelijk aan 38 | () haakjes 39 | [] array-haken 40 | {} set-haken 41 | (* *) commentaar 42 | ^ pointer 43 | .. tot en met 44 | ,.;:~| leestekens 45 | 46 | 47 | S T A N D A A R D I D E N T I F I E R S 48 | 49 | Modula-2 kent de volgende standaard identifiers, ook deze 50 | worden allemaal in hoofdletters geschreven. 51 | 52 | ABS functie absolute waarde 53 | BITSET settype (set = verzameling) 54 | BOOLEAN waar/niet waar type 55 | CAP functie maak hoofdletter van kleine letter 56 | CARDINAL 0, 1, 2, 3, 4, ... type 57 | CHAR character type 58 | CHR functie geeft CHAR met bepaalde ASCII 59 | DEC verlaag 60 | DISPOSE dealloceer geheugen 61 | EXCL verwijder element uit set 62 | FALSE niet waar 63 | FLOAT omzetten CARDINAL naar REAL 64 | HALT be�indig executie van programma 65 | HIGH hoogste indexwaarde van open-array parameter 66 | INC verhoog 67 | INCL voeg element aan set toe 68 | INTEGER ..., -3, -2, -1, 0, 1, 2, ... type 69 | MAX maximum waarde van een opsomtype 70 | MIN minimum waarde van een opsomtype 71 | NEW alloceer geheugen 72 | NIL nulpointer 73 | ODD BOOLEAN functie oneven 74 | ORD rangnummer van een waarde van een opsomtype 75 | REAL floating point type 76 | TRUE waar 77 | TRUNC omzetten REAL naar CARDINAL 78 | VAL geef zoveelste waarde van een opsomtype 79 | 80 | 81 | Alle hier genoemde woorden, symbolen en identifiers zullen 82 | uiteraard nog in de cursus Modula-2 aan bod komen. Dit is 83 | slechts een overzicht met korte beschrijvingen. 84 | 85 | Stefan Boer 86 | -------------------------------------------------------------------------------- /future_disk/32/pascal_cursus_1_en.md: -------------------------------------------------------------------------------- 1 | # Pascal (1) 2 | 3 | Koen asked me to write a course on PASCAL. And because I 4 | think PASCAL is a well structured and nice language I 5 | agreed. 6 | 7 | Before I begin the real work (the course), I will do a short 8 | introduction. PASCAL (the language) is given the name of 9 | Blaise Pascal the mathematician who lived from 1623 till 10 | 1662. He was one of the great mathematicians that lived. He 11 | laid down the basics for calculating changes. One of his 12 | 'hobbies' was trying to create machines that did mathematics. 13 | He created a machine that could do various calculations (not 14 | only adding and subtracting) that was entirely mechanical 15 | (try to imagine this). 16 | 17 | In about 1970 The name PASCAL (in capitals) was 18 | 'reintroduced'. Professor Niklaus Wirth though it nice to 19 | name his new programming language to the great mathematician. 20 | I think most people have heard or read about PASCAL. PASCAL 21 | has a lot of advantages compared to BASIC. PASCAL is almost 22 | self documenting because of its structure. 23 | 24 | And now for the real thing. Lets begin with the structure of 25 | a PASCAL program: 26 | 27 | PROGRAM program_name (INPUT,OUTPUT); 28 | 29 | CONST 30 | {Constant definition} 31 | 32 | TYPE 33 | {Type definition} 34 | 35 | VAR 36 | {Variable declaration} 37 | 38 | {Procedure and function definition} 39 | 40 | BEGIN 41 | {Main program} 42 | END. 43 | 44 | All words in capitals are reserved words. This means that 45 | this name cannot be used for something else (a variable for 46 | instance), they have a special function in a program. PROGRAM 47 | indicates that where about to make a PASCAL program. It is 48 | followed by the name of the program and the words INPUT and 49 | OUTPUT between brackets. The words INPUT and OUTPUT tell the 50 | compiler that the program uses standard in- and output 51 | (keyboard, screen). When working with files we will include 52 | more between the brackets. 53 | 54 | After the program heading a block with constant, type and 55 | variable declaration follows. PASCAL forces you to declare 56 | all variables that you use in the program in advance. This 57 | not as in BASIC where you can declare a variable when you 58 | need it. 59 | 60 | After this the procedure and function declarations follow. 61 | These declarations are equal to the 'program' declaration. 62 | In a later course we will handle this. 63 | 64 | The last thing is a PASCAL program is the main program. The 65 | main program is enclosed by BEGIN and END. 66 | 67 | That's it for the first course. I will leave you with a small 68 | and simple PASCAL program. Try to compile and run it and see 69 | if you can understand it. 70 | 71 | ``` 72 | PROGRAM simple (INPUT,OUTPUT); 73 | 74 | VAR 75 | Value_1 : integer; 76 | Value_2 : integer; 77 | Result : integer; 78 | 79 | PROCEDURE input_value(VAR value:integer); 80 | 81 | BEGIN (* input_value *) 82 | Write('Input a value : '); 83 | Readln(value); 84 | Writeln; 85 | END; (* input_value *) 86 | 87 | BEGIN (* mainprogram *) 88 | Writeln('Example program for PASCAL-course (1)'); 89 | Writeln('FutureDisk'); 90 | Writeln; 91 | Writeln('Made by :'); 92 | Writeln('Jeroen Smael'); 93 | Writeln; 94 | Writeln; 95 | input_value(Value_1); 96 | input_value(Value_2); 97 | Result:=Value_1+Value_2; 98 | Writeln(Value_1:1,' + ',Value_2:1,' = ',Result:1); 99 | Writeln; 100 | END. (* mainprogram *) 101 | ``` 102 | 103 | Jeroen 'PASCAL is fun' Smael -------------------------------------------------------------------------------- /future_disk/37/mathpack_3.md: -------------------------------------------------------------------------------- 1 | Het laatste deel over de MATH PACK... 2 | 3 | DE MATH-PACK (3) 4 | 5 | 6 | In dit laatste deel over de math-pack komen de wat comple- 7 | xere routine's aan bod, en dan voornamelijk de string- 8 | routine's. 9 | 10 | De routine FIN (&H3299) zet een string om naar een decimaal 11 | getal in DAC. Hiervoor heeft deze routine register HL nodig 12 | om het startadres van de string aan te geven en register A om 13 | het eerste teken te weten. Als resultaat staat op DAC dus het 14 | getal. Register C bevat de waarde 255 als de string geen punt 15 | bevatte en de waarde 0 als er wel een punt in stond en regis- 16 | ter B bevat het aantal cijfers achter de punt. 17 | 18 | De routine's FOUT (&H3425) en PUFOUT (&H3426) zetten het 19 | getal in DAC om naar een string. Het verschil tussen beide 20 | routine's is dat FOUT de string niet formatteerd en PUFOUT 21 | wel en dat PUFOUT de DAC positief maakt. 22 | 23 | De invoer en uitvoer is bij beide routine's hetzelfde. 24 | Register A geeft het formaat van de string aan, waarbij de 25 | afzonderlijke bits de volgende betekenis hebben: 26 | 27 | bit 7: 0 = ongeformatteerd, 1 = geformatteerd 28 | bit 6: 0 = zonder komma's , 1 = met komma's om de drie 29 | cijfers 30 | bit 5: 0 = niets , 1 = voorafgaande spaties worden 31 | opgevuld met punten 32 | bit 4: 0 = niets , 1 = "$" wordt voor de waarde 33 | gezet 34 | bit 3: 0 = niets , 1 = "+" wordt voor de waarde 35 | gezet (indien de waarde positief was) 36 | bit 2: 0 = niets , 1 = +/- wordt achter de waarde 37 | gezet 38 | bit 1: niet gebruikt 39 | bit 0: 0 = fixed point , 1 = floating point 40 | 41 | Register B geeft het aantal cijfers voor de punt aan en 42 | register C geeft het aantal cijfer na de punt aan (inclusief 43 | de punt). Als er dus 3 tekens na de punt komen, moet je de 44 | waarde 4 in register B zetten. 45 | 46 | Na het uitvoeren van ��n van deze routine's komt in register 47 | HL het adres van de string. 48 | 49 | De routine's FOUTB (&H371A), FOUTO (&H371E) en FOUTH 50 | (&H3722) zetten een integer getal in DAC+2/3 om naar 51 | respectievelijk een binaire, octale en hexadecimale string. 52 | Let er trouwens op dat VALTYP op 2 staat. Deze 3 routine's 53 | hebben dus als resultaat een string waarvan het beginadres 54 | in register HL komt te staan. 55 | 56 | 57 | TYPE CONVERSIE 58 | 59 | De routine's FRCINT (&H2F8A), FRCSNG (&H2FB2) en FRCDBL 60 | (&H303A) zetten het getal DAC om naar respectievelijk een 61 | 2-byte integer (DAC+2/3), een enkele precisie waarde en een 62 | dubbele precisie waarde. Na aanroep bevat VALTYP het type 63 | van DAC (dus 2, 4 of 8) en zijn alle registers veranderd. 64 | 65 | De routine FIXER op adres &H30BE maakt van het getal DAC een 66 | gehele waarde. Ook hier worden alle registers veranderd. 67 | 68 | 69 | MACHTSVERHEFFEN 70 | 71 | Er zijn nog 3 extra routine's voor het machtsverheffen. 72 | SGNEXP (&H37C8) is voor getallen van enkele precisie, DBLEXP 73 | (&H37D7) is voor getallen van dubbele precisie en INTEXP 74 | (&H383F) is voor 2-byte integers. De eerste 2 routine's 75 | gebruiken DAC als basis en ARG als macht en de laatste 76 | gebruikt DE als basus en HL als macht. Bij alle drie de 77 | routine's wordt het resultaat in DAC gezet en worden alle 78 | registers verandert. 79 | 80 | TOT SLOT 81 | 82 | Er is ook nog een routine om register HL decimaal op het 83 | scherm te zetten, namelijk PRTHL (&H3412). Deze routine is 84 | echter niet offici�el, maar werkt volgens mij wel altijd. 85 | 86 | Ik geloof dat ik nu wel alles over de math-pack heb 87 | behandeld. Mocht ik echter nog wat onbehandelde dingetjes 88 | tegenkomen, dan zal ik daar later op terugkomen maar wat mij 89 | betreft is dit de laatste tekst over dit onderwerp. 90 | 91 | Arjan Bakker 92 | -------------------------------------------------------------------------------- /sunrise_special/6/memman_tsr_development_kit.md: -------------------------------------------------------------------------------- 1 | T S R D E V E L O P M E N T K I T 2 | 3 | 4 | Producent : MSX Software Team 5 | Computer : 6 | M S X 2 (80 kB RAM) 7 | Medium : 1 dubbelzijdige diskette 8 | Leverancier: MCCM's lezersservice 9 | 10 | 11 | H E T P A K K E T 12 | 13 | ...bestaat uit een handleiding en een disk. Veel tekst uit 14 | de handleiding zullen de meeste kopers van het pakket al 15 | hebben: documentatie van MemMan calls en het artikel over 16 | interrupts dat al in MCM heeft gestaan. Nieuw zijn echter de 17 | beschrijving van het maken van TSR's volgens de MemMan 18 | standaard - toevallig het belangrijkste - en de sources van 19 | de PB.TSR en PRINT.COM. 20 | 21 | 22 | D I S K 23 | 24 | Op de diskette staat eveneens een groot aantal files die al 25 | in het bezit zijn van potenti�le kopers. Alleen LT.COM, de 26 | linker, en daardoor het belangrijkste stukje bitvolgorde op 27 | deze disk, en de raamwerken voor TSR-listings voor M80 en 28 | GEN80. Ook zijn er nog 2 batchfiles, maar dat mag niet 29 | bijster interessant worden genoemd. 30 | 31 | Wat je op deze disk mist zijn de 2 sources die wel in de 32 | handleiding staan geprint. Misschien is dit gedaan ter 33 | voorkoming van het vrijkomen van versies met hele kleine 34 | aanpassingen. 35 | 36 | 37 | R E L - B E S T A N D E N 38 | 39 | De linker werkt alleen met relocatable files. Files die op 40 | een door de gebruiker of een ander programma dan de 41 | assembler op de juiste plaats te zetten zijn. Beschrijving 42 | van deze REL-files is te vinden op Sunrise Special #1. 43 | 44 | Voor zover ik weet is het alleen met GEN80 en M80 mogelijk 45 | om REL-files aan te maken. Bij M80 is het trouwens alleen 46 | maar mogelijk om REL-files te produceren. WB-ASS2 gebruikers 47 | worden hierdoor uitgesloten, maar dit is niet zo erg: GEN80 48 | is toch veel beter! 49 | 50 | De linker maakt van die REL-files TSR-files. Deze files zijn 51 | mijns inziens gewoon veredelde REL-files. In zoverre 52 | veredeld dat TsrLoad ze makkelijk in een MemMan segment kan 53 | plaatsen. 54 | 55 | 56 | Z E L F M A K E N 57 | 58 | Zelf een TSR maken is een koud kunstje met dit LinkTsr. In 59 | je source geef je de hook(s) aan die wilt afbuigen en zet je 60 | de code die aan die hook(s) komt te hangen. Je hoeft je 61 | verder dus niet te bekommeren over het vrijmaken van ruimte 62 | in de top van het geheugen en het correct afbuigen van de 63 | hooks. 64 | 65 | Als voorbeeld staan CHGCPU2.TSR en VOLINMET.TSR met source 66 | en uitleg op deze Special. 67 | 68 | 69 | C O N C L U S I E 70 | 71 | Als je dit koopt moet je niet denken dat je iets nieuws in 72 | handen krijgt. Het grote voordeel is dat je nu alles bij 73 | elkaar hebt, in ��n handleiding. Als je makkelijk TSR's wilt 74 | maken, is het zeker aan te raden! Maar ook als je al je 75 | eigen systeem hebt om TSR's te maken is het een aanrader: 76 | het is wel zo leuk voor de gebruikers om een eigen versie �n 77 | een MemMan versie te verspreiden. 78 | 79 | Waarschuwing: alleen voor GEN80- en M80-gebruikers. 80 | 81 | Kasper Souren 82 | -------------------------------------------------------------------------------- /sunrise_special/3/turbo_pascal_patch.md: -------------------------------------------------------------------------------- 1 | T P A T C H 1 . 1 2 | 3 | 4 | Nieuw in deze versie: aanpassing heap adres 5 | 6 | TPATCH patcht Turbo Pascal 3.0A MSX programma's automatisch 7 | voor het gebruik met de MST Memory Manager. MemMan TSR's 8 | functioneren alleen correct als de stackpointer in RAM 9 | pagina 3 staat. Turbo Pascal zet echter zelf een lokale 10 | stack op, waarbij de stackpointer in pagina 1 of 0 terecht 11 | kan komen. Dat kan tot een crash leiden. 12 | 13 | Het is weliswaar mogelijk met een debugger het 14 | stackpointer-adres in TP-programma's aan te passen, maar dat 15 | neemt veel tijd in beslag. Daarom is TPATCH geschreven. 16 | TPATCH zet de stackpointer van het TP-programma automatisch 17 | op het default adres (0C500H in de distributie-versie) of op 18 | een adres dat als parameter in de commandline opgegeven is. 19 | Versie 1.1 van TPATCH past bovendien de heap-pointer aan. 20 | 21 | 22 | Turbo Pascal deelt programma's als volgt in: 23 | 24 | 00100H Start runtime 25 | 020EAH Start programma 26 | 0xxxxH Ruimte voor stack & heap 27 | 0yyyyH Start data 28 | 0zzzzH Eindadres programma 29 | 30 | Na het gebruik van TPATCH ziet de indeling er als volgt uit: 31 | 32 | 00100H Start runtime 33 | 020EAH Start programma 34 | 0xxxxH Loze ruimte (zo klein mogelijk houden) 35 | 0yyyyH Start data 36 | 0zzzzH Eindadres programma 37 | 0zzzzH+1 Ruimte voor stack & heap 38 | 0ssssH Opgegeven top van de stack 39 | 40 | 41 | Doordat het heap-adres in de vorige versie niet werd 42 | veranderd, gaf de MAXAVAIL functie verkeerde resultaten. Die 43 | functie geeft namelijk het verschil weer tussen de adressen 44 | waar stackpointer en heappointer zich bevinden. Wordt de 45 | stackpointer BOVEN het programmagedeelte geplaatst, dan ziet 46 | MAXAVAIL veel meer ruimte dan er is, en kan programmacode 47 | overschreven worden. 48 | 49 | De ruimte die voorheen voor heap en stack gereserveerd werd, 50 | dient nu zo klein mogelijk gemaakt te worden, door in het 51 | compiler-Options menu van Turbo Pascal het eindadres zo laag 52 | mogelijk te zetten (zodat nog nät geen memory overflow 53 | ontstaat). Een bijkomend voordeel is dat de uiteindelijke 54 | COM-file die Turbo Pascal aanmaakt kleiner wordt. 55 | 56 | Houd er bij het programmeren verder rekening mee, dat de 57 | heap en stack voldoende ruimte moeten hebben. Maak 58 | programma's niet te groot. Overlays gebruiken extra 59 | heapruimte. 60 | 61 | 62 | Het gebruik van TPATCH: 63 | 64 | TPATCH FILENAAM[.COM] [hhhh] 65 | 66 | Vul voor de hhhh het (hexadecimale) adres in waar de 67 | stackpointer op moet komen te staan. Wordt alleen de 68 | filenaam opgegeven, dan zet TPATCH de stackpointer op $C500. 69 | Die zgn. 'default' waarde is aan te passen door met een 70 | debugger of disk-editor (eenmalig) het programma TPATCH.COM 71 | aan te passen. Op de adressen $102 en $103 (START+2 en 72 | START+3) staat nu: 00 C5, zijnde $C500 in hexadecimale 73 | notatie (LSB,MSB). Dat kan naar believen veranderd worden. 74 | 75 | Pierre Gielen 76 | -------------------------------------------------------------------------------- /future_disk/19/basic_cursus_8.md: -------------------------------------------------------------------------------- 1 | Basic Cursus (7) 2 | 3 | 4 | ���� 5 | ���� 6 | ���� 7 | ���� 8 | 9 | OUT&HFE en ander ge-emmer 10 | 11 | In Basic heeft de gebruiker eigenlijk maar weinig geheugen 12 | tot zijn beschikking. &H0000-&H7FFF is immers Rom, 13 | op &H8000-&HBFFF staat je basic programma, en alles boven 14 | &HE000 is eigenlijk ook al linke soep... Blijft dus over 15 | &HC000-&HE000, en das nie bar veel! In die 8Kb kun je 16 | natuurlijk wel een zooitje strings en variabelen kwijt maar 17 | als je ook maar iets bv op sector in wil laden of een 18 | aantal sampletjes wil afspelen dan zit je al in de knoop. 19 | Een redelijk onbekende -onbeminde- methode is om basic 20 | gewoon op C000 te flikkeren en daardoor komen alle banks 21 | van 8000-BFFF weer vrij. For the ignorant, a little scheme: 22 | 23 | I Geheugen I Vrije Banks I 24 | -------------------------- 25 | I 64Kb I 1-3 I 26 | I 128Kb I 1-7 I 27 | I 256Kb I 1-15 I 28 | I 512Kb I 1-31 I and so on..... 29 | -------------------------- 30 | 31 | Als je dit geintje dus uitvoert heb je in ��n keer een hele 32 | zwik geheugen tot je beschikking, wat overigens heerlijk is. 33 | Dit truukje werkt echter alleen met de interne of op de op 34 | dat moment ingeschakelde mapper. Twee mappers in basic 35 | gebruiken kan wel maar dat ga ik niet helemaal uitleggen. 36 | Eerst zul je dus Basic op $C000 moeten zetten, daarna moet 37 | je natuurlijk nog weten hoe je welke mapper bank in moet 38 | schakelen. Mapper bank0 is niet beschikbaar, dit is normaal 39 | gesproken &HC000-&HFFFF waar Basic z'n administratie neerzet 40 | en de gebruiker nog even rond kan poken/peeken. Mapper bank 41 | 1 wordt door Basic gebruikt om de programma-data in op te 42 | slaan, hier staat dus normaal je programmaatje in. Nu gaan 43 | we dat programmaatje naar &HC000 verplaatsen. Theoretish 44 | mag dat niet omdat je dan in de knoop kan komen met je 45 | systeem variabelen die Basic in die bank opslaat. In de 46 | praktijk valt dit over het algemeen wel mee. 't Is mij 47 | in iedergeval nog nooit gelukt. Dit betekent namelijk een 48 | listing die Tokenized al meer dan 8Kb zou zijn. Grote jongen 49 | die dat bij elkaar typt! Nu is bank1 dus ook vrijgekomen 50 | aangezien je programmaatje daar nu niet meer staat. Je kunt 51 | dus -behalve bank0- alle banks gebruiken (Zie schema). Dan 52 | nu 't eigenlijke programmaatje wat je dan krijgt: 53 | 54 | 10 ' MEMTEST.BAS 55 | 20 IFPEEK(&HF677)<>&HC0THENPOKE&HF677,&HC0:POKE&HC000,0: 56 | RUN"MEMTEST.BAS" 57 | 30 FORP=1TO255:OUT&HFE,P:POKE&H8000,55:NEXTP 58 | 40 FORP=1TO255:OUT&HFE,P:IFPEEK(&H8000)=55THENPG=PG+1:NEXTP 59 | 50 PG=PG+1:PRINT PG*16;"KB GEHEUGEN" 60 | 61 | Nu is dit maar een stom programmatje maar wat je nu feitelijk 62 | met die pages doet boeit eigenlijk niet. Pleur d'r maar eens 63 | graphics of muziek neer. Samples wil trouwens ook prima. Als 64 | je 't echt netjes wil doen pleur je alles wel weer keurig 65 | terug als je klaar bent. Dus krijg je: 66 | 67 | 60 POKE &HF677,&H80:POKE&H8000,0 68 | 69 | Als je daarna namelijk andere programma's gaat laden die er 70 | niet op rekenen dat basic op $C000 staat wil dat nog wel 71 | eens de soep in lopen. Het is overigens ook wijsheid om 72 | met CTRL op te starten aangezien basic dan wat minder 73 | geheugen nodig heeft voor z'n drive administratie. 74 | 75 | Well that's all, bye.... 76 | 77 | Tobias 'I love my 512Kb mapper' Keizer 78 | -------------------------------------------------------------------------------- /future_disk/19/basic_voor_beginners.md: -------------------------------------------------------------------------------- 1 | BASIC CURSUS 2 | 3 | algemene hints voor beginners 4 | 5 | 6 | ���� 7 | ���� 8 | ���� 9 | ���� 10 | 11 | 12 | Ja, even voor de al iets verder gevorderden onder u. Deze keer 13 | staat er eigenlijk niets in voor jullie dus, err, why don't 14 | you go tie your dick in a knot?!(NvdR: ik zal je maar niet 15 | de 993 redenen noemen) 16 | 17 | Even een aaqntal tips voor de beginnertjes. Gezien 't feit dat 18 | de basic interpreter uit ons lieve MSX-je nog langzamer is dan 19 | mijn oma van 94 moet je erg opletten met wat je doet in je 20 | programmaatje. Let hierbij vooral op loops omdat deze vaker 21 | worden uitgevoerd. Eerst dus even een paar DO's en DONT's. 22 | 23 | Vermijd REM of ' in een loop omdat deze vreemd genoeg tijd in 24 | nemen. Je zou haast verwachten dat basic gewoon door gaat na 25 | het tegenkomen van een REM of ' maar hij loopt vreemd genoeg 26 | eerst de hele regel door. Nadat je dus je REM's keurig voor of 27 | na de loop heb gezet ga ik je opeens vertellen dat je het ' 28 | tekentje eigenlijk maar niet moet gebruiken omdat deze vreemd 29 | genoeg 3 bytes inneemt terwijl het drie letters tellende woord 30 | REM maar 1 byte inneemt. Nu gebruik ik zelf gewoon altijd ' 31 | maar mocht je dus ooit in geheugen probleemples komen kun je 32 | altijd nog je '-tjes vervangen door REM's. Maar het best vind 33 | ik nog altijd helemaal geen REM's of '-tjes. 34 | 35 | Spaties zijn ook een probleem, deze kosten namelijk tijd. 36 | Ik persoonlijk typ gewoon geen spaties in m'n basic werk maar 37 | wat ook prima werkt is eerst typen en later als alles af 38 | is(�n werkt) de spaties er uit halen. Pas wel op: soms zijn 39 | spaties verplicht om alles nog goed te laten werken. 40 | 41 | Wisselen tussen twee waarden. 42 | Ook dit kost nog wel eens tijd. Vaak krijg je allerlei IF THEN 43 | constucties in je programmaatje die niet al te snel zijn. 44 | Kijk altijd eerst of 't een en ander niet met een XOR te 45 | verhelpen is. XOR's zijn namelijk heel snel. Als je dus bv 46 | wisselen moet tussen 2 en 0 wat bv bij het veranderen van 47 | de frequentie nog wel eens 't geval is, krijg je meestal 48 | iets als: 49 | 50 | 10 ' 0 = 60Hz 2 = 50Hz 51 | 20 IF HZ = 0 THEN VDP(10)=2 : HZ=2 : GOTO 40 52 | 30 IF HZ = 2 THEN VDP(10)=0 : HZ=0 : GOTO 40 53 | 40 BLA BLA BLA.... 54 | 55 | Veel sneller is 56 | 57 | 10 ' 0 = 60Hz 2 = 50Hz 58 | 20 HZ=HZ XOR 2 : VDP(10)=HZ 59 | 60 | Of nog sneller (en technisch gezien de enige goede manier) 61 | 62 | 10 VDP(10)=VDP(10)XOR2 63 | 64 | Even voor die mensen die niet weten wat een XOR doet: 65 | een XOR doet niets anders dan het (de) aan gegeven bit(s) van 66 | een byte omgooien. Als (zoals bij 't voorbeeld) de byte dus 67 | &B00000010 is en de XOR &B00000010 is wordt bit twee dus ook 68 | steeds omgegooid. Mensen die niet weten hoe 't binaire stelsel 69 | in elkaar steekt raad ik aan eens hun BASIC manual door te 70 | lezen waar dit soort dingen vaak wel instaan. Hierbij raad ik 71 | aan het gedeelte over het octale stelsel over te slaan aan- 72 | gezien dit eigenlijk nooit wordt gebruikt in BASIC(NvdR: in 73 | andere talen ook vrijwel niet heb ik me laten vertellen door 74 | Jan-Willem!). 75 | 76 | Voor jullie beginners raad ik dus aan eens goed met die XOR's 77 | en andere operaties in BASIC te gaan spelen want het scheelt 78 | echt wel als je die goed onder de knie heb. 79 | Lieden die echter denken dat het nodig is om uit het hoofd de 80 | getallen van 0 tot 255 van DEC naar HEX en van HEX naar BIN 81 | te kunnen omrekenen hebben wel een erg hoog doel en kunnen 82 | maar beter door gaan met de MC cursus elders op dit mag. 83 | Toegegeven, 't is wel handig om sommmige waarden in HEX, 84 | DEC en BIN uit 't hoofd te kennen. 85 | 86 | Well boys, that's about it for now. 87 | Read the rest of my shit in the next txt-file. 88 | 89 | Tobias 'kill that space' Keizer 90 | -------------------------------------------------------------------------------- /future_disk/19/moonblaster_music_cursus_2.md: -------------------------------------------------------------------------------- 1 | MOONBLASTER CURSUS (2) 2 | 3 | 4 | 5 | Zoals iedereen (is d'r wel een hond die dit leest?)(NvdR: ja, 6 | ikke!) de vorige keer al heeft kunnen lezen, zou ik deze keer 7 | de drums bespreken. Dus niet; wegens tijdsgebrek ben ik er 8 | niet aan toe gekomen, zelfs de muziek van deze FD is niet 9 | meer dan minimaal.... Zo zie je maar weer, het leven van een 10 | FD-redactielid gaat niet over rozen. Om de musiccorner toch 11 | te kunnen vullen (en omdat ik toch nog een opmerking kreeg 12 | dat ik de accoorden niet op de beste manier had uitgelegd, 13 | maar daarover straks meer) ga ik het alweer hebben over de 14 | accoorden. Degene die nu met de slimme (?) opmerking komt in 15 | de geest van "Hee, dit lijkt de muziekcursus op de GPD wel" 16 | (dat was waarschijnlijk 1 persoon (ene S.B. uit W., een 17 | nogal beruchte MSXer die iets met Econometrie ofzo aan het 18 | doen is)) moet het dan maar overnemen (dan heb ik tenminste 19 | de tijd om de muziek eindelijk eens goed te maken...). 20 | 21 | NOGMAALS DE ACCOORDEN 22 | 23 | Ik heb op de vorige aflevering van de cursus wel van ��n 24 | (NvdR: waauw dat is veel) persoon commentaar gehad, namelijk 25 | van Stefan Boer, het opperhoofd van de stam der reizende en 26 | rijzende zonnen. 27 | Hij beweerde dat het allemaal eenvoudiger kon, en zou mij 28 | dus een tekst hierover sturen die ik tot op heden nog niet 29 | ontvangen heb (ja, dit is inderdaad een hint!). 30 | Omdat ik de helft niet meer zo goed weet moet ik het maar 31 | ongeveer uit m'n hoofd stampen, dus het zal wel niet 32 | helemaal kloppen. 33 | 34 | Stel je maar eens een klavier voor, en ga bij het 35 | onderstaande uit van de witte toetsen. 36 | Je kiest een beginnoot (bv. C), je slaat een toets over, en 37 | neemt de daarop volgende toets (in ons voorbeeld dus de E). 38 | Doe ditzelfde ook voor de laatste noot van het 39 | (driestemmige) accoord (de G), en je krijgt het volgende 40 | accoord: C E G 41 | 42 | Volgens Stefan werkt dit zo met alle witte toetsen. Als je 43 | goed luistert zul je merken dat er steeds hetzelfde verschil 44 | in toonhoogte inzit (gek h�?), en hiermee kun je dus, als je 45 | op het gehoor afgaat, ook zo een accoord met de zwarte 46 | toetsen maken. De andere variaties uit de vorige cursus 47 | krijg je geloof ik door de hoogste noot van het accoord een 48 | octaaf te verlagen. Meer kan ik er momenteel eigenlijk niet 49 | over zeggen, het wachten is op de beloofde tekst. Ik kom er 50 | hoogstwaarschijnlijk nog wel op terug..... 51 | 52 | SOMETHING COMPLETELY DIFFERENT 53 | 54 | Om dit deel toch vol te krijgen kan ik nog wel iets 55 | vertellen over de OPL-4 van Yamaha. De mogelijkheden zijn al 56 | eens beschreven door Tobias "shit for brains", en hier zal 57 | ik dus ook niet meer op ingaan. 58 | De produktie van de MoonSound is aardig in de war gelopen. 59 | De chips van Yamaha werden pas half februari verstuurd, dus 60 | op zich zou het niet al te lang meer moeten duren, ware het 61 | niet dat er een verkeerd onderdeel is besteld, waardoor de 62 | eerste �cht werkende MoonSounds pas op de beurs in Tilburg 63 | geleverd worden. De volgende series MoonSound en Graphics 64 | 9000 worden waarschijnlijk een paar tientjes duurder. 65 | Overigens krijg je bij deze twee produkten wel al kabels 66 | meegeleverd. 67 | De MoonSound komt - als het even meezit - wel in een 68 | cartridge te zitten, met de V9990 is dit niet het geval. 69 | Deze insteekkaarten zijn te groot om met een behuizing in 70 | een cartridgeslot te passen, en daarom kun je je Graphics 71 | 9000 in een metalen kastje laten bouwen voor Fl. 35,- (Dit 72 | lijkt wel een STER-spotje voor Sunrise...) 73 | Van MoonSound kun je waarschijnlijk nog wel binnenkort een 74 | bespreking op de FD lezen... 75 | 76 | I'M GONNA LEAVE YOU 77 | 78 | Dit was het voor deze keer, mijn tijd is beperkt, en mijn 79 | werk juist niet. Voor de volgende keer hopelijk een betere 80 | en langere aflevering, met waarschijnlijk het laatste deel 81 | van de accoorden en als nieuwe onderwerpen de drums en de 82 | bassline.... 83 | Cya !! 84 | 85 | Jorrith "slaapkop" Schaap 86 | Erasmusweg 7 87 | 9602 AB Hoogezand 88 | 89 | 90 | Tel: 05980-27379 91 | -------------------------------------------------------------------------------- /sunrise_special/3/scrollen_in_kun_basic.md: -------------------------------------------------------------------------------- 1 | S C R O L L I N G I N K U N - B A S I C 2 | 3 | 4 | Zo, nu gaan we weer eens terug naar het begin: BASIC! Ik heb 5 | namelijk een horizontale scroll gemaakt, geheel an al in 6 | BASIC geschreven! Geen bitje machinetaal! (Nou ja, die ene 7 | sprong naar adres &H69 niet meegerekend, dat is om eventueel 8 | aanwezige sprites te wissen. Die routine staat gewoon in het 9 | BIOS.) Het enige wat je nodig hebt is KUN-BASIC, oftewel 10 | XBASIC. 11 | 12 | Kijk maar eens in de listing hoe ik het precies gedaan heb. 13 | De truuk is: VDP(19) en het gebruik maken van integer 14 | variabelen. 15 | 16 | 17 | V D P R E G I S T E R 1 8 18 | 19 | Zo! Hier ben ik nog eens met wat aanvullende info over de 20 | super-scroll in BASIC. Zoals eerder vermeld heb ik gebruik 21 | gemaakt van VDP register 18 (VDP(19)) Dit register wordt ook 22 | gebruikt met het commando SET ADJUST (X,Y). Het is ook 23 | mogelijk om met dit register verticaal te scrollen, maar dat 24 | zou niet slim zijn, want met register 18 kun je dan over 25 | slechts 16 pixels scrollen. vdp register 23 (VDP(23)) is dan 26 | een beter alternatief, omdat dat register, nou ja, laat ik 27 | maar zeggen, speciaal gemaakt is om verticaal te scrollen: 28 | alle 8 bits worden gebruikt voor die ene richting: 29 | verticaal. Je kunt zo dus heel eenvoudig en snel verticaal 30 | scrollen, over 255 beeldlijnen (ja! Onder het scherm zit 31 | namelijk ook nog het gedeelte waar de sprites, kleurwaardes 32 | e.d. opgeslagen zijn, maar die zie je normaal niet). 33 | Voorbeeld in de listing ALPHA.BAS in de laatste regels. 34 | 35 | Nu even terug naar register 20. Zoals gezegd worden 4 bits 36 | voor de verticale en 4 bits voor de horizontale 37 | positionering gebruikt. Scrollen bestaat dus eigenlijk uit: 38 | 1 keer per interrupt 1 pixel "opschuiven" en in de tijd dat 39 | je zo 16 pixels laat opschuiven, ÇÇn keer het hele 40 | beeldscherm m.b.v. het COPY-commando kopieert. Et voilÖ! Een 41 | mooie horizontale scroll! 42 | 43 | 44 | P R O B L E E M P J E 45 | 46 | Nou is er nog een probleempje met de ietwat vreemde 47 | programmering van het register: als je netjes 16 pixels wilt 48 | scrollen, moet je eerst de waardes 8 t/m 15 invoeren, en 49 | daarna pas 0 t/m 7, anders klopt er niet zoveel van. 50 | 51 | Zo, dat was het wel, ik hoop dat BASIC-programmeurs en ook 52 | wel ML-programmeurs in spÇ hiermee wel vooruit kunnen. Voor 53 | voorbeelden kijk je maar in de listing. 54 | 55 | Och, voor ik het vergeet: ik gebruikte wel het woord 56 | interrupt, maar daarmee bedoel ik de tijd die de VDP nodig 57 | heeft om een beeld op te bouwen, normaal dus 1/50 seconde 58 | (of 1/60 bij Japanse computers). Om mooi die tijd aan te 59 | houden, gebruik ik de TIME variabele, deze wordt namelijk 60 | door de VDP met een opgehoogd, als de VDP klaar is met het 61 | opbouwen van een beeld, dus elke 1/50 seconde. 62 | 63 | Volgende keer heb ik misschien een mooi programma (in 64 | BASIC!) om zelf vector-graphics te maken. Een programma 65 | waarmee je in principe elk willekeurig 3-dimensionaal object 66 | kunt invoeren, en dan in elke richting kunt laten draaien, 67 | verplaatsen, vergroten e.d. Lijnen die dan (gedeeltelijk) 68 | buiten het beeld vallen worden geclipt: ze worden dan toch 69 | goed getekend!! 70 | 71 | Randy Simons 72 | -------------------------------------------------------------------------------- /future_disk/20/muizen_in_basic.md: -------------------------------------------------------------------------------- 1 |  2 | MUIZEN IN BASIC 3 | 4 | ���� 5 | ���� 6 | ���� 7 | ���� 8 | 9 | Wederom een tekstje voor de wat minder gevorderden. Dus al 10 | die oude rotten die eigenlijk alles al weten van Basic 11 | moeten maar gewoon ML gaan leren of zo... De muis... men 12 | plugt 'm in poort 1 of 2, men rammelt een beetje met ons 13 | electronische knaag diertje en zie daar, de muiscursor 14 | huppelt vrolijk 't scherm door. Om deze schokkende gebeur- 15 | tenis te achterhalen gebeurt er nog al 't een en ander in 16 | ons MSXje. De technische uitleg wou ik dan maar achterwege 17 | laten maar het hoe en wat betreffende 't uitlezen in basic 18 | wou ik wel even behandelen... 19 | 20 | PAD 21 | Dat is 't commando waar 't allemaal mee dient te gebeuren... 22 | Pad wordt voornamelijk gebruikt om de status van de muis en 23 | de trackball uit te lezen. PHILIPS heeft echter destijds 24 | ooit ook nog eens van die shit zoals tekentableuas en 25 | lichtpennen uitgebracht die ook met pad werken. 26 | 27 | In de praktijk zal het uitlezen ook nog wel mee vallen, maar 28 | het checken of er wel een muis is aangesloten valt over 't 29 | algemeen tegen. Dat valt namelijk niet te checken op een MSX. 30 | Er is echter wel een truukje dat kan worden gebruikt, maar dat 31 | is niet echt netjes(NvdR: net of dat iemand boeit?!). 32 | 33 | De syntaxis 34 | 35 | A=PAD(X) 36 | De waarde van PAD komt hierdoor in A terecht waarbij in X 37 | de specifieke gegevens voor PAD dienen te worden opgegeven. 38 | 12 of 16 Zal altijd -1 geven maar MOET worden opgevraagd 39 | voordat X en Y worden bepaald. 40 | 13 of 17 De verandering op de X-as. 41 | 14 of 18 De verandering op de Y-as. 42 | 43 | Het linker getal is steeds voor poort 1, het rechter voor de 44 | tweede poort. De beste manier om dan de muis coordinaten bij 45 | te houden is gewoon steeds PAD(13) by het X-coordinaat op te 46 | tellen en PAD(14) bij het Y-coordinaat op te tellen. 47 | PAD(12) heeft dus geen functie maar moet wel voor 't 48 | opvragen van PAD(13) en PAD(14) worden bepaald. 49 | Een voorbeeld: 50 | 51 | 10 SCREEN5:X=127:Y=105 52 | 20 DUMMY=PAD(12):X=X+PAD(13):Y=Y+PAD(14) 53 | 30 IFX<0THENX=0:ELSEIFX>255THENX=255 54 | 40 IFY<0THENY=0:ELSEIFY>211THENY=211 55 | 50 PSET(X,Y),15:GOTO20 56 | 57 | Door het bewegen van de muis kunnen we nu keurig een lijntje 58 | trekken over 't scherm. Maar als we nou ook af en toe geen 59 | lijnje willen trekken? Goed, gaan we weer: 60 | 61 | 10 SCREEN5:X=127:Y=105 62 | 20 DUMMY=PAD(12):X=X+PAD(13):Y=Y+PAD(14) 63 | 30 IFX<0THENX=0:ELSEIFX>255THENX=255 64 | 40 IFY<0THENY=0:ELSEIFY>211THENY=211 65 | 50 IFSTRIG(1)THENPSET(X,Y),15:GOTO20:ELSEGOTO20 66 | 67 | Nu kunnen we de muis vrijelijk door 't scherm laten bewegen 68 | zonder dat we een lijntje trekken. Pas als we trig1 inhouden 69 | zal er een lijntje worden getrokken. Maar nu weten we dus 70 | niet waar de muiscursor is als we niet aan 't tekenen zijn. 71 | Hiervoor voegen we weer twee regels toe: 72 | 73 | 15 SPRITE$(1)=CHR$(&H80) 74 | 45 PUTSPRITE 0,(X,Y),14,1 75 | 76 | Nu zal er op de plek van de muis-coordinaten ook echt een 77 | muiscursor verschijnen; nou ja, een grijs stipje. 78 | Maar Tobias zou Tobias niet zijn als ie niet nog een 79 | netelig probleem kon bedenken. Juist ja, misschien zit de 80 | muis wel in poort 2. 81 | 82 | 05 X=0:FORL=0TO25:DUMMY=PAD(12):X=X+PAD(13):NEXTL:IFX>-5 83 | ANDX<5THENMO=12:TR=1 84 | 10 X=0:FORL=0TO25:DUMMY=PAD(16):X=X+PAD(17):NEXTL:IFX>-5 85 | ANDX<5THENMO=16:TR=3 86 | 15 SCREEN5:X=127:Y=105:SPRITE$(1)=CHR$(&H80) 87 | 20 D=PAD(MO):X=X+PAD(MO+1):Y=Y+PAD(MO+2) 88 | 30 IFX<0THENX=0:ELSEIFX>255THENX=255 89 | 40 IFY<0THENY=0:ELSEIFY>211THENY=211 90 | 50 PUTSPRITE0,(X,Y),14,1 91 | 60 IFSTIRG(TR)THENPSET(X,Y),15:GOTO20:ELSEGOTO20 92 | 93 | Nu hebben we eindelijk een routine die met de muis in elke 94 | poort een muis cursor op 't scherm zet en bij een knop op 95 | de linker vuurknop een punt zet. 96 | 97 | Wauw! fantastisch, heb ik weer en half uur zitten typen en 98 | weer geen hond die 't leest. A well, that FutureDisk life! 99 | (NvdR: what life?) 100 | 101 | Keizer... 102 | -------------------------------------------------------------------------------- /future_disk/28/the_pcm_sample_processor.md: -------------------------------------------------------------------------------- 1 |  Bla bla bla bla 2 | The PCM sample processor, the truth... 3 | 4 | ���� 5 | ���� 6 | ���� 7 | ���� 8 | 9 | 10 | 11 | 12 | Those good old days... I can remember them like it was 13 | yesterday... Remember those stories in all the magazines when 14 | the Turbo-R (ST) was released in Japan? A 28.8Mhz CPU, loads 15 | of built-in software and a PCM-Samplechip. WOW!! Now it would 16 | be possible to use samples with your music, or voice-recogni 17 | sion. Yeah, righty... But still, the PCM isn't at all bad... 18 | 19 | 20 | Music 21 | 22 | Were the music part is concerned, there aren't that many 23 | options, unfortunately. Adressing the PCM chip takes too much 24 | time for any other things to be done. Music + samples there- 25 | fore isn't really an option. It is possible, but the sample 26 | freuency has to be very low (No more than 12Khz) and there 27 | will be a 60Hz rustle on the back of the sound. For something 28 | like a drum, that's not too big a problem. But when it comes 29 | to speach or something like that, you'll notice. 30 | 31 | The FD#25 game Ryu No Chie is a nice example of what I mean. 32 | The sample frequency there was 8Khz, the music was played via 33 | a slightly modified Moonblaster replayer in stereo mode. 34 | Naturally, that wasn't the best a Turbo-R can do. For one, 35 | the R800 wasn't on, and the R800 mode is at least 4 times 36 | faster than the Z80 mode. Furthermore, the standard interrupts 37 | where activated, which isn't too clever either. 38 | 39 | FREQUENCY 40 | 41 | The previously mentioned magazines told us the maximum sample 42 | frequency on a Turbo-R was about 16KHz. Not at all true... In 43 | ideal circumstances a sample (play!) frequency of 400KHz(!!!) 44 | should not be a problem. But, like said, under ideal circum- 45 | stances...Think OTIR in cases like these. However, under not 46 | so ideal circumstances (read, a full-function PCM player) 16 47 | Khz is not the top by far. A sample frequency of 44KHz (CD 48 | quality) should not give any problems either. However, the 49 | big problem is recording those samples. As the samples are 50 | recorded with only one bit, is takes a lot more CPU time to 51 | record a sample, than it does to play one... Too bad... 52 | 53 | I haven't calculated all this, but I think recording should be 54 | possible at a sample-rate of 24Khz, playing has very fiew 55 | limits... 56 | 57 | 58 | HOW TO PLAY A SAMPLE... 59 | 60 | Let's make a little program that plays a sample from $4000 61 | till $BFFF. Let's assume we do not need any interrupts, and 62 | it is not possible to abort the process. Here's what you'd 63 | get: 64 | 65 | BEGINN: LD HL,$4000 66 | LD BC,$8000 67 | LD A,%00000010 68 | OUT ($A5),A 69 | 70 | MAINLP: LD A,(HL) 71 | OUT ($A4),A 72 | INC HL 73 | DEC BC 74 | LD A,B 75 | OR C 76 | RET Z 77 | JP MAINLP 78 | 79 | A small player like this one would put you well over the 44Khz 80 | C quality. And when I say well over, I mean well over. If I 81 | take a short look a this, it would put the sample rate at pro- 82 | bably trice the frequence of that of a CD player... But, I 83 | could be wrong... (I'm probably not though) Only remaining 84 | problem is it won't be possible to record samples on a Turbo-R 85 | at that frequence, you'll need quite a PC for that. Other pro- 86 | blem is that at a frequence this high, 32kB's of sample isn't 87 | really a lot to listen to. But still, that 16KHz really wasn't 88 | all that accurate... 89 | 90 | Anyway, I suggest that those interested juggle a little with 91 | this small source, and we'll continue next time, with a real 92 | player with adjustable sample-frequency! How nice... 93 | 94 | By the way, that first OUT is to set the PCM chip for: 95 | 96 | Play sample, Don't send MIC in to speaker, Don't disable 97 | Sound chips (Music/PSG), activate filter... 98 | 99 | Well, good luck... 100 | And till next time... 101 | 102 | Tobias Keizer 103 | -------------------------------------------------------------------------------- /future_disk/37/advanced_basic_6.md: -------------------------------------------------------------------------------- 1 | Een zeer nuttige tekst... 2 | 3 | ADVANCED BASIC CURSUS 6 4 | 5 | 6 | Eindelijk, het laatste deel van deze cursus. Ik heb het 7 | gevoel dat geen hond zich interesseert in deze cursus. 8 | Het aantal personen die Advanced BASIC kochten zijn op een 9 | hand te tellen, ondanks de goede recensies. Blijkbaar 10 | programmeert niemand meer in BASIC, of is men gewoon te 11 | gierig om wat geld uit te geven? Hoe dan ook, dit is het 12 | laatste deel van deze cursus en daar ben ik blij om. Nu kan 13 | ik wat meer tijd zinniger besteden, bijvoorbeeld aan het 14 | programmeren van een MoonSound-replayer voor de FD. 15 | 16 | 17 | ENOUGH CRAP 18 | 19 | Goed, ik zal maar snel verdergaan met de cursus, want daar 20 | gaat het toch om. Zoals gezegd gaat deze aflevering over 21 | hybride-programmeren onder Advanced BASIC. Hybride 22 | programmeren wil zeggen dat er 2 of meer programmeertalen 23 | met elkaar gecombineerd worden, zoals BASIC met ML of PASCAL 24 | met ML. 25 | 26 | BASIC is over het algemeen prima te combineren met ML, maar 27 | wat toch onhandig is, is het doorgeven van veel parameters 28 | aan de routines. Meestal is het een kwestie van de hele zooi 29 | ergens POKE'n, maar dat is niet echt netjes. Met Advanced 30 | BASIC gaat dit een stuk makkelijker, want je kunt namelijk 31 | gewoon met CALL REGreg(x) een waarde aan een register geven. 32 | Alle registers zijn toegestaan, op de stackpointer, program- 33 | counter en de registers I en R na. 34 | 35 | Nadat je alle registers hebt gevuld, kun je met _CALL(adres) 36 | een ML-routine op het aangegeven adres gebruiken. Je kunt de 37 | ML-routine's natuurlijk ook met DEFUSR=x:A=USR(0) aanroepen, 38 | maar dan worden er geen registers doorgegeven. 39 | 40 | Natuurlijk kun je, als je de registers kunt wijzigen, ook de 41 | registers weer uitlezen. Dit kan met het commando CALL 42 | GETreg(adres). Het register aangeduidt met 'reg' wordt dan 43 | gezet in het aangegeven adres. Zoals al in een vorige deel 44 | van deze cursus gezegd werd, kun je met een truukje ook een 45 | variabele als bestemming gebruiken. Dit gaat als volgt: 46 | 10 DEFINT A-Z 47 | 20 _CALL(&H9F) 48 | 30 T=0:_REGA(VARPTR(T)) 49 | 40 PRINT CHR$(T) 50 | RUN 51 | 52 | Dit programmaatje roept routine CHGET op adres &H9F aan, 53 | welke de ingedrukte toets in register A zet. Vervolgens kun 54 | je met VARPTR(T) het adres van variabele T krijgen en dat 55 | adres wordt dus gevuld met de waarde van de ingedrukte 56 | toets. Tot slot wordt de ingedrukte toets eventjes geprint. 57 | Let erop dat als je VARPTR(var) gebruikt, de variabele al 58 | wel moet bestaan. Daarom wordt de variabele T eerst 59 | aangemaakt in regel 30. Doe je dit niet, dan krijg je een 60 | botte Illegal function call. De variabele moet trouwens ook 61 | integer zijn, anders kan het fout gaan. 62 | 63 | 64 | ADVANCED BASIC & KUN-BASIC 65 | 66 | Advanced BASIC en KUN-BASIC kunnen met elkaar gecombineerd 67 | worden. Je moet wel eventjes een heel klein programmaatje 68 | maken, maar dat is zo simpel als wat. De truuk is dat je de 69 | beide uitbreidingen allebei in een andere geheugenpagina zet 70 | en de juist pagina inschakelt als je een extra commando wilt 71 | gebruiken. 72 | 73 | Het volgende programmaatje laad Advanced BASIC en KUN-BASIC 74 | in het geheugen: 75 | 76 | 10 OUT &HFD,2:BLOAD "ADVBASIC.BIN",R 77 | 20 OUT &HFD,4:BLOAD "COMPILER.BIN",R 78 | 79 | Als je nu een commando van Advanced BASIC wilt gebruiken, 80 | schakel je eerst Advanced BASIC in met OUT &HFD,2 en dan kun 81 | je het commando gebruiken. Wil je KUN-BASIC gebruiken, dan 82 | kun je die inschakelen met OUT &HFD,4. 83 | 84 | Een nadeel is dat je geen commando's van Advanced BASIC 85 | binnen een stuk programma dat gecompileerd wordt. Het 86 | volgende kan dus niet: 87 | 10 OUT &HFD,4 ' Schakel KUN in 88 | 20 _TURBO ON 89 | 30 PRINT "This won't work" 90 | 40 OUT &HFD,2 ' Schakel Advanced BASIC in 91 | 50 _WINDOW(0,0,80,3) 92 | 60 OUT &HFD,4 ' Schakel KUN in 93 | 70 _TURBO OFF 94 | RUN 95 | 96 | Het programma loopt nu vast op het commando _WINDOW. 97 | 98 | Als het goed is, heb ik nu alle commando's behandeld. Zo 99 | niet, pech gehad, want ik heb geen zin om ook nog maar ��n 100 | woord aan dit onderwerp vuil te maken. 101 | 102 | Arjan Bakker 103 | -------------------------------------------------------------------------------- /future_disk/42/Lijntjes.md: -------------------------------------------------------------------------------- 1 | Lijntjes zijn heel cool, zo kun je van 4 lijntjes een rechthoek of een vierkant of een parallellogram (ofzo) maken, lijntjes zijn goed... 2 | 3 | LIJNTJES 4 | 5 | 6 | E�n van de lastigste VDP-commando's is wel het line- 7 | commando. Het VDP line-commando werkt namelijk heel anders 8 | dan het BASIC line-commando. In BASIC kun je lekker 9 | makkelijk het start- en eindpunt opgeven, maar de VDP wil 10 | naast het beginpunt ook de lengte van de lijn weten, en de 11 | richting. Okay, als je weet hoe het moet, is ook het line- 12 | commando een makkelijk commando, maar anders kan het je 13 | zeker grijze haren bezorgen. 14 | 15 | Het makkelijkste om op te geven is het beginpunt van de 16 | lijn; deze kunnen direct in VDP-register 36/37 (X) en 38/39 17 | (Y) gezet worden. 18 | 19 | Moeilijker is de lengte van de lijn. Om deze te kunnen 20 | bepalen, moet je eerst de betekenis van register 45 weten. 21 | Deze is als volgt: 22 | 23 | bit: 7 6 5 4 3 2 1 0 24 | 0 MXC MXD MXS DIRY DIRX EQ/NEQ MAJ/MIN 25 | 26 | Ik zal hier alleen even de betekenis van de benodigde bits 27 | uitleggen. 28 | 29 | DIRY: 1: lijn gaat omhoog, 0: lijn gaat omlaag 30 | DIRX: 1: lijn gaat naar links, 0: naar rechts 31 | 32 | MAJ/MIN: 1: Y is belangrijkste richting 33 | 0: X is belangrijkste richting 34 | 35 | Nu kunnen we de lengte en de richting van de lijn bepalen. 36 | Om de X-richting te bepalen trek je het eindco"rdinaat van 37 | het begin-co"rdinaat. Als het resultaat positief is, dan 38 | moet DIRX geset worden. Als het resultaat negatief is, dan 39 | moet het weer positief gemaakt worden (NEG) en moet DIRX 40 | gereset worden. Tot slot zet je het resultaat in register 41 | 40/41 (NX).Hetzelfde verhaal geldt voor de Y-richting, 42 | alleen moet je nu DIRY en register 42/43 (NY) invullen. 43 | 44 | En dan het vreemdste van het line-commando. Als NY groter 45 | dan NX is, dan moeten deze twee waarden omgewisseld worden 46 | en moet MAJ/MIN geset worden. Waarom dit zo gedaan moet 47 | worden weet ik ook niet, maar ja, het moet maar. 48 | 49 | Oh ja, voordat ik het vergeet, de lijnkleur moet in register 50 | 44 komen en register 46 moet met het juiste commando gevuld 51 | worden. En dat commando is (zonder logische operaties) 52 | &b01110000. De logische operatie moet op de laagste 4 bits 53 | ingevuld worden, maar dat weet je waarschijnlijk wel (en 54 | anders lees je nu de verkeerde tekst). 55 | 56 | Tot slot komt hier nog even een source van een line-routine. 57 | 58 | ;In: H: SX 59 | ; L: SY 60 | ; D: DX 61 | ; E: DY 62 | ; C: kleur 63 | 64 | line: ld a,c 65 | ld (color),a ;kleur 66 | 67 | ld a,h 68 | ld (dx),A ;begin X 69 | 70 | ld c,4 ;dir X = links 71 | sub d ;bepaal lengte X-richting 72 | jr nc,line1 ;positief = naar links 73 | ld c,0 ;dir X = rechts 74 | neg ;maak positief 75 | line1: ld b,a ;bewaar in B 76 | LD (nx),A ;en vul in 77 | 78 | ld a,l 79 | ld (dy),a ;begin Y 80 | 81 | set 3,c ;dir Y = omhoog 82 | sub e ;bepaal lengte Y-richting 83 | jr nc,line2 ;positief = omhoog 84 | res 3,c ;dir Y = omlaag 85 | neg ;maak positief 86 | line2: ld (ny),a ;en vul in 87 | cp b ;welke richting is groter? 88 | jr c,line3 ;X>Y, dan is alles goed 89 | set 0,c ;Y is belangrijkste richting 90 | ld (nx),a ;vul Y in NX-register in 91 | ld a,b 92 | ld (ny),a ;vul X in NY-register in 93 | 94 | line3: ld a,c 95 | ld (data),a ;vul dirx/diry/ maj/min in 96 | ld a,%01110000 97 | ld (command),a ;vul line-commando in 98 | call copy ;voer commando uit 99 | ret 100 | 101 | De rest van de source is niet interessant, want die dient 102 | voor het sturen van de juiste data naar de VDP. Voor de 103 | volledigheid staat de source ook op deze FD onder de 104 | logische naam LINE.GEN. 105 | 106 | Arjan 107 | -------------------------------------------------------------------------------- /future_disk/42/lijntjes.md: -------------------------------------------------------------------------------- 1 | Lijntjes zijn heel cool, zo kun je van 4 lijntjes een rechthoek of een vierkant of een parallellogram (ofzo) maken, lijntjes zijn goed... 2 | 3 | LIJNTJES 4 | 5 | 6 | E�n van de lastigste VDP-commando's is wel het line- 7 | commando. Het VDP line-commando werkt namelijk heel anders 8 | dan het BASIC line-commando. In BASIC kun je lekker 9 | makkelijk het start- en eindpunt opgeven, maar de VDP wil 10 | naast het beginpunt ook de lengte van de lijn weten, en de 11 | richting. Okay, als je weet hoe het moet, is ook het line- 12 | commando een makkelijk commando, maar anders kan het je 13 | zeker grijze haren bezorgen. 14 | 15 | Het makkelijkste om op te geven is het beginpunt van de 16 | lijn; deze kunnen direct in VDP-register 36/37 (X) en 38/39 17 | (Y) gezet worden. 18 | 19 | Moeilijker is de lengte van de lijn. Om deze te kunnen 20 | bepalen, moet je eerst de betekenis van register 45 weten. 21 | Deze is als volgt: 22 | 23 | bit: 7 6 5 4 3 2 1 0 24 | 0 MXC MXD MXS DIRY DIRX EQ/NEQ MAJ/MIN 25 | 26 | Ik zal hier alleen even de betekenis van de benodigde bits 27 | uitleggen. 28 | 29 | DIRY: 1: lijn gaat omhoog, 0: lijn gaat omlaag 30 | DIRX: 1: lijn gaat naar links, 0: naar rechts 31 | 32 | MAJ/MIN: 1: Y is belangrijkste richting 33 | 0: X is belangrijkste richting 34 | 35 | Nu kunnen we de lengte en de richting van de lijn bepalen. 36 | Om de X-richting te bepalen trek je het eindco"rdinaat van 37 | het begin-co"rdinaat. Als het resultaat positief is, dan 38 | moet DIRX geset worden. Als het resultaat negatief is, dan 39 | moet het weer positief gemaakt worden (NEG) en moet DIRX 40 | gereset worden. Tot slot zet je het resultaat in register 41 | 40/41 (NX).Hetzelfde verhaal geldt voor de Y-richting, 42 | alleen moet je nu DIRY en register 42/43 (NY) invullen. 43 | 44 | En dan het vreemdste van het line-commando. Als NY groter 45 | dan NX is, dan moeten deze twee waarden omgewisseld worden 46 | en moet MAJ/MIN geset worden. Waarom dit zo gedaan moet 47 | worden weet ik ook niet, maar ja, het moet maar. 48 | 49 | Oh ja, voordat ik het vergeet, de lijnkleur moet in register 50 | 44 komen en register 46 moet met het juiste commando gevuld 51 | worden. En dat commando is (zonder logische operaties) 52 | &b01110000. De logische operatie moet op de laagste 4 bits 53 | ingevuld worden, maar dat weet je waarschijnlijk wel (en 54 | anders lees je nu de verkeerde tekst). 55 | 56 | Tot slot komt hier nog even een source van een line-routine. 57 | 58 | ;In: H: SX 59 | ; L: SY 60 | ; D: DX 61 | ; E: DY 62 | ; C: kleur 63 | 64 | line: ld a,c 65 | ld (color),a ;kleur 66 | 67 | ld a,h 68 | ld (dx),A ;begin X 69 | 70 | ld c,4 ;dir X = links 71 | sub d ;bepaal lengte X-richting 72 | jr nc,line1 ;positief = naar links 73 | ld c,0 ;dir X = rechts 74 | neg ;maak positief 75 | line1: ld b,a ;bewaar in B 76 | LD (nx),A ;en vul in 77 | 78 | ld a,l 79 | ld (dy),a ;begin Y 80 | 81 | set 3,c ;dir Y = omhoog 82 | sub e ;bepaal lengte Y-richting 83 | jr nc,line2 ;positief = omhoog 84 | res 3,c ;dir Y = omlaag 85 | neg ;maak positief 86 | line2: ld (ny),a ;en vul in 87 | cp b ;welke richting is groter? 88 | jr c,line3 ;X>Y, dan is alles goed 89 | set 0,c ;Y is belangrijkste richting 90 | ld (nx),a ;vul Y in NX-register in 91 | ld a,b 92 | ld (ny),a ;vul X in NY-register in 93 | 94 | line3: ld a,c 95 | ld (data),a ;vul dirx/diry/ maj/min in 96 | ld a,%01110000 97 | ld (command),a ;vul line-commando in 98 | call copy ;voer commando uit 99 | ret 100 | 101 | De rest van de source is niet interessant, want die dient 102 | voor het sturen van de juiste data naar de VDP. Voor de 103 | volledigheid staat de source ook op deze FD onder de 104 | logische naam LINE.GEN. 105 | 106 | Arjan 107 | -------------------------------------------------------------------------------- /sunrise_special/4/msx_audio.md: -------------------------------------------------------------------------------- 1 | M S X A U D I O 2 | 3 | 4 | Ik heb dit programma geschreven om de Music Module te 5 | gebruiken bij Compile spellen die op HD staan (en niet naar 6 | BASIC te hoeven). De syntax is: 7 | 8 | MSXAUDIO [ON|OFF] 9 | 10 | Bij ON wordt de MSX-AUDIO chip goed gezet zodat Compile 11 | spellen hem herkennen. Het kan zijn dat bepaalde programma's 12 | hierdoor blijven hangen. De EXTBIO hook wordt nl. gewoon 13 | aangepast ("POKE -54,35"). Indien iemand weet hoe het wel 14 | volgens de standaard kan, of in het bezit is van een �chte 15 | MSX-AUDIO cartridge: laat het even weten. Ik ben dus 16 | ge�nteresseerd in de waarden die op adres #ffca t/m #ffce 17 | staan. 18 | 19 | 20 | D E S O U R C E 21 | 22 | BDOS: EQU 5 23 | FCB1: EQU #5c 24 | 25 | in a,(#c0) 26 | inc a ;c hoog -> a was 255 27 | ; -> geen AUDIO 28 | jr c,NoAUDIO 29 | 30 | Als op poort #c0 de waarde 255 staat, is er geen MSX-AUDIO 31 | aanwezig. 32 | 33 | ld hl,#ffca 34 | ld a,(FCB1+2) 35 | cp "F" 36 | jr z,Off 37 | cp "f" 38 | jr nz,On 39 | 40 | FCB1 bevat de tekst die achter de COM file wordt meegegeven, 41 | maar dan wel in zo'n vorm dat je er meteen een FCB mee kunt 42 | openen. Ik check alleen of er een "F" staat op het tweede 43 | karakter van de filenaam. Alles behalve dit betekent dat 44 | MSX-AUDIO aan wordt gezet. 45 | 46 | 47 | Off: ld a,i 48 | ld (hl),a 49 | ld de,tOff 50 | jr Print 51 | 52 | Om hem ook uit te kunnen zetten heb ik iets gedaan wat 53 | eigenlijk niet mag. Ik heb register I ervoor gebruikt. Voor 54 | zover ik weet wordt het niet door andere programma's 55 | veranderd, en is (was...) het dus een uitstekende plaats om 56 | iets in te zetten dat even bewaard moet blijven. 57 | 58 | 59 | On: ld a,(hl) 60 | ld i,a 61 | ld a,35 ;? 62 | ld (hl),a 63 | ld de,tOn 64 | jr Print 65 | 66 | Ik weet niet precies waarom er 35 op #ffca moet komen, want 67 | de mnemonics die dan aan die hook hangen slaan nergens op. 68 | Vandaar ook dat de computer blijft hangen als er andere 69 | programma's gerund worden die die hook gebruiken. Bijv. TED. 70 | Dat is tevens de reden dat ik een off-optie heb gemaakt. 71 | 72 | 73 | NoAUDIO: ld de,tNoAUDIO 74 | Print: ld c,9 75 | jp BDOS 76 | 77 | tOn: db "Your non-standard MSX-AUDIO chip " 78 | db "can now be used as a " 79 | db "standard Panasonic",13,10 80 | db "MSX-AUDIO module.",13,10,"$" 81 | 82 | tOff: db "EXTBIO hook is restored.",13,10,"$" 83 | 84 | tNoAUDIO: db "No MSX-AUDIO chip available.",13,10 85 | db "$" 86 | 87 | 88 | N O O T 89 | 90 | Ik weet ook wel dat het niet klopt allemaal, en dat het 91 | eigenlijk niet mag volgens de standaard. Maar het programma 92 | is handig wanneer je je Music Module wilt gebruiken bij 93 | spellen van Compile op HD. 94 | 95 | Kasper Souren 96 | -------------------------------------------------------------------------------- /sunrise_special/3/tsr_development_kit.md: -------------------------------------------------------------------------------- 1 | 2 | - MEMMAN - 3 | 4 | T S R D E V E L O P M E N T K I T 5 | 6 | 7 | Producent : MSX Software Team 8 | Computer : 9 | M S X 2 (80 kB RAM) 10 | Medium : 1 dubbelzijdige diskette 11 | Leverancier: MCM's lezersservice 12 | 13 | 14 | Een tijdje geleden alweer dat dit produkt voor het eerst 15 | verkocht werd. Zolang geleden zelfs dat ik toen nog geen ML 16 | kende. 17 | Maar hier volgt alsnog de bespreking van dit MST-produkt. 18 | 19 | 20 | H E T P A K K E T 21 | 22 | ...bestaat uit een handleiding en een disk. Veel tekst uit 23 | de handleiding zullen de meeste kopers van het pakket al 24 | hebben: documentatie van MemMan calls en het artikel over 25 | interrupts dat al in MCM heeft gestaan. Nieuw zijn echter de 26 | beschrijving van het maken van TSR's volgens de MemMan 27 | standaard - toevallig het belangrijkste - en de sources van 28 | de PB.TSR en PRINT.COM. 29 | 30 | 31 | D I S K 32 | 33 | Op de diskette staat eveneens een groot aantal files die al 34 | in het bezit zijn van potentiâle kopers. Alleen LT.COM, de 35 | linker, en daardoor het belangrijkste stukje bitvolgorde op 36 | deze disk, en de raamwerken voor TSR-listings voor M80 en 37 | GEN80. Ook zijn er nog 2 batchfiles, maar dat mag niet 38 | bijster interessant worden genoemd. 39 | 40 | Wat je op deze disk mist zijn de 2 sources die wel in de 41 | handleiding staan geprint. Misschien is dit gedaan ter 42 | voorkoming van het vrijkomen van versies met hele kleine 43 | aanpassingen. 44 | 45 | 46 | R E L - B E S T A N D E N 47 | 48 | De linker werkt alleen met relocatable files. Files die op 49 | een door de gebruiker of een ander programma dan de 50 | assembler op de juiste plaats te zetten zijn. Beschrijving 51 | van deze REL-files is te vinden op Sunrise Special #1. 52 | 53 | Voor zover ik weet is het alleen met GEN80 en M80 mogelijk 54 | om REL-files aan te maken. Bij M80 is het trouwens alleen 55 | maar mogelijk om REL-files te produceren. WB-ASS2 gebruikers 56 | worden hierdoor uitgesloten, maar dit is niet zo erg: GEN80 57 | is toch veel beter! 58 | 59 | De linker maakt van die REL-files TSR-files. Deze files zijn 60 | mijns inziens gewoon veredelde REL-files. In zoverre 61 | veredeld dat TsrLoad ze makkelijk in een MemMan segment kan 62 | plaatsen. 63 | 64 | 65 | Z E L F M A K E N 66 | 67 | Zelf een TSR maken is een koud kunstje met dit LinkTsr. In 68 | je source geef je de hook(s) aan die wilt afbuigen en zet je 69 | de code die aan die hook(s) komt te hangen. Je hoeft je 70 | verder dus niet te bekommeren over het vrijmaken van ruimte 71 | in de top van het geheugen en het correct afbuigen van de 72 | hooks. 73 | 74 | Als voorbeeld staan CHGCPU2.TSR en VOLINMET.TSR met source 75 | en uitleg op deze Special. 76 | 77 | 78 | C O N C L U S I E 79 | 80 | Als je dit koopt moet je niet denken dat je iets nieuws in 81 | handen krijgt. Het grote voordeel is dat je nu alles bij 82 | elkaar hebt, in ÇÇn handleiding. Als je makkelijk TSR's wilt 83 | maken, is het zeker aan te raden! Maar ook als je al je 84 | eigen systeem hebt om TSR's te maken is het een aanrader: 85 | het is wel zo leuk voor de gebruikers om een eigen versie Çn 86 | een MemMan versie te verspreiden. 87 | 88 | Waarschuwing: alleen voor GEN80- en M80-gebruikers. 89 | 90 | Kasper Souren 91 | -------------------------------------------------------------------------------- /future_disk/36/assembly_cursus_5.md: -------------------------------------------------------------------------------- 1 | Arjan programmeert er rustig op los... 2 | 3 | ASSEMBLY (5) 4 | 5 | 6 | Deze keer gaan we het hebben over screensplits, paletsplits 7 | en alle andere soorten splits die je maar kunt bedenken. Een 8 | goed voorbeeld van een screensplit zie je nu terwijl je aan 9 | het lezen bent. Eigenlijk zijn er zelfs 2 screensplits, want 10 | alleen de tekst beweegt en de border staat stil. 11 | 12 | Een split is eigenlijk heel simpel om te maken. Het kan 13 | zelfs op 2 verschillende manieren. Je kunt namelijk de VDP 14 | een interrupt laten genereren als de lijn voorbij is en je 15 | kunt zelf testen of de VDP al voorbij de lijn is. Deze 16 | laatste methode zal ik hier bespreken, de eerste komt een 17 | volgende keer aan bod. 18 | 19 | Zoals gezegd is een split heel simpel. Eerst doe je nog wat 20 | dingetjes totdat je denkt dat de VDP ongeveer is bij de lijn 21 | waar je de split wilt hebben. Dan zet je in register 19 NA 22 | welke lijn je de split wilt hebben. Daarna test je of bit 0 23 | van statusregister 1 een 1 is. Als dat zo is, is de VDP 24 | klaar met die lijn. Vervolgens selecteer je een andere page, 25 | schermmode, palet of whatever. Dit kost wel wat tijd, dus 26 | zorg ervoor dat de lijnen bij de split dezelfde kleur 27 | hebben want anders gaat die lijn knipperen. 28 | 29 | Een voorbeeldje: stel je wilt de helft van het scherm page 0 30 | hebben en de andere helft page 1. Dan zet je in register 19 31 | de waarde 105, dus komt de split bij lijn 106. Lijn 106 maak 32 | je dan op beide pagina's dezelfde kleur en vervolgens test 33 | je of de lijn al voorbij is. Daarna selecteer je page 1 en 34 | dan wacht je weer op een interrupt om page 0 te selecteren. 35 | 36 | De volgende source zal het wel duidelijker maken. De source 37 | staat ook op disk onder de naam SCRSPLIT.GEN. Natuurlijk is 38 | er ook een klein voorbeeldje bij, namelijk SCRSPLIT.BAS, 39 | welke deze routine gebruikt. Dit programmaatje laat ook zien 40 | wat er gebeurt als je de lijnen bij de split niet dezelfde 41 | kleur geeft. 42 | 43 | defb #fe ; BLOAD-header 44 | defw start,einde,start 45 | 46 | org #d000 47 | 48 | start: ei 49 | halt 50 | 51 | ld a,31 ; 31 = page 0, 63 = page 1 52 | out (#99),a ; 127 = page 2, 255 = page 3 53 | ld a,2 + 128 54 | out (#99),a ; Selecteer page 0 55 | 56 | xor a 57 | call #d8 58 | or a 59 | ret nz ; Spatie ingedrukt = stoppen 60 | 61 | ld a,105 ; Lijn voor screensplit 62 | out (#99),a 63 | ld a,19 + 128 64 | out (#99),a ; Stuur lijn naar register 19 65 | 66 | ld a,1 67 | out (#99),a 68 | ld a,15 + 128 69 | out (#99),a ; Selecteer statusregister 1 70 | nop 71 | nop ; geef VDP wat tijd 72 | split: in a,(#99) ; lees statusregister 1 73 | bit 0,A ; test bit 0 (0 = niet 74 | ; voorbij lijn) 75 | jp z,split ; herhaal test indien nodig 76 | 77 | ld a,63 78 | out (#99),a 79 | ld a,2 + 128 80 | out (#99),a ; selecteer page 1 81 | 82 | xor a 83 | out (#99),a 84 | ld a,15 + 128 85 | out (#99),a ; Selecteer statusregister 0 86 | 87 | jp start ; herhaal 88 | 89 | einde: 90 | 91 | Een kleine opmerking wil ik nog maken over het selecteren 92 | van statusregister 0. Dit register moet geselecteerd worden, 93 | omdat de BIOS met IN A,(#99) dit register wil lezen terwijl 94 | 'ie dit register meestal niet eerst selecteert (om tijd te 95 | sparen). 96 | 97 | Als je maar ��n split hebt, hoef je register 19 maar ��n 98 | keer te veranderen, zodat je weer (iets) meer tijd hebt voor 99 | andere dingen. Dit heb ik hier niet gedaan voor de duidelijk- 100 | heid. Natuurlijk is het mogelijk om meerdere splits te maken. 101 | Je zet de routine voor de split vaker in je code, maar dan 102 | telkens met een andere lijn. Zo simpel is dat. 103 | 104 | Dit was het dan voor deze keer. De volgende keer zal ik 105 | .LIB-files behandelen (een file waar je alle files in 106 | propt). Dat wordt een lekker lange aflevering, maar dat mag 107 | ook wel eens een keertje, of niet soms? 108 | 109 | 110 | Arjan Bakker 111 | -------------------------------------------------------------------------------- /future_disk/36/mathpack_2.md: -------------------------------------------------------------------------------- 1 | Arjan heeft het over de Mathpack en ik snap er weer eens geen hout van... 2 | 3 | DE MATHPACK (2) 4 | 5 | 6 | Een vorige keer schreef ik dat ik nog niet alle functies van 7 | de MathPack had. Nu heb ik ze wel, dus kan ik weer een 8 | lijstje met functies geven. Ik begin met ... 9 | 10 | 11 | ...DATA-VERPLAATSINGEN 12 | 13 | Naam Adres Functie Type Verandert 14 | MAF #2C4D DAC -> ARG Dubbele precisie A,B,D,E,H,L 15 | MAM #2C50 (HL) -> ARG Dubbele precisie A,B,D,E,H,L 16 | MOV8DH #2C53 (HL) -> (DE) Dubbele precisie A,B,D,E,H,L 17 | MFA #2C59 ARG -> DAC Dubbele precisie A,B,D,E,H,L 18 | MFM #2C5C (HL) -> DAC Dubbele precisie A,B,D,E,H,L 19 | MMF #2C67 DAC -> (HL) Dubbele precisie A,B,D,E,H,L 20 | MOV8HD #2C6A (DE) -> (HL) Dubbele precisie A,B,D,E,H,L 21 | XTF #2C6F DAC <-> (SP) Dubbele precisie A,B,D,E,H,L 22 | PHA #2CC7 (SP) -> ARG Dubbele precisie A,B,D,E,H,L 23 | PHF #2CCC (SP) -> DAC Dubbele precisie A,B,D,E,H,L 24 | PPA #2CDC ARG -> (SP) Dubbele precisie A,B,D,E,H,L 25 | PPF #2CE2 DAC -> (SP) Dubbele precisie A,B,D,E,H,L 26 | PUSHF #2EB1 (SP) -> DAC Enkele precisie D,E 27 | MOVFM #2EBE (HL) -> DAC Enkele precisie B,C,D,E,H,L 28 | MOVFR #2EC1 CBED -> DAC Enkele precisie D,E 29 | MOVRF #2ECC DAC -> CBED Enkele precisie B,C,D,E,H,L 30 | MOVRMI #2ED6 (HL) -> CBED Enkele precisie B,C,D,E,H,L 31 | MOVRM #2EDF (HL) -> BCDE Enkele precisie B,C,D,E,H,L 32 | MOVMF #2EE8 DAC -> (HL) Enkele precisie A,B,D,E,H,L 33 | MOVE #2EEB (DE) -> (HL) Enkele precisie B,C,D,E,H,L 34 | VMOVAM #2EEF (HL) -> DAC VALTYP B,C,D,E,H,L 35 | MOVVFM #2EF2 (HL) -> (DE) VALTYP B,C,D,E,H,L 36 | VMOVE #2EF3 (DE) -> (HL) VALTYP B,C,D,E,H,L 37 | VMOVFA #2F05 ARG -> DAC VALTYP B,C,D,E,H,L 38 | VMOVFM #2F08 (HL) -> DAC VALTYP B,C,D,E,H,L 39 | VMOVAF #270D DAC -> ARG VALTYP B,C,D,E,H,L 40 | VMOVMF #2710 (HL) -> DAC VALTYP B,C,D,E,H,L 41 | 42 | 43 | REKENEN 44 | 45 | De volgende routine's zijn wel handig (niet allemaal, maar 46 | de meeste wel): 47 | 48 | Naam Adres Functie Verandert 49 | UMULT #314A DE = BC * DE Alles 50 | ISUB #3167 HL = HL - DE Alles 51 | IADD #3172 HL = HL + DE Alles 52 | IMULT #3193 HL = HL * DE Alles 53 | IDIV #31E6 HL = DE / HL Alles 54 | IMOD #323A HL = DE mod HL Alles 55 | 56 | Het resultaat van deze functies komt ook op DAC+2 te staan 57 | en VALTYP wordt op 2 gezet. Als je wilt rekenen, gebruik je 58 | de routine's ISUB en IADD natuurlijk niet. De deling- en 59 | vermenigvuldigingsroutine's zijn echter wel weer handig, als 60 | je je code niet al te groot wilt laten worden tenminste. 61 | 62 | 63 | VERGELIJKINGEN 64 | 65 | Met de volgende routine kun je getallen met elkaar 66 | vergelijken. Na het aanroepen van een van deze functies 67 | wordt in A een waarde teruggegeven. Als A 0 is, dan waren de 68 | twee variabelen gelijk, als A 1 is, dan was de linker 69 | variabele kleiner dan de rechter en als A 255 is, dan was de 70 | linker groter dan de rechter variabele. De routines 71 | veranderen overigens alle registers. 72 | 73 | Naam Adres Functie Precisie 74 | FCOMP #2F21 Vergelijk CBDE met DAC Enkel 75 | ICOMP #2F4D Vergelijk DE met HL Integer 76 | XDCOMP #2F5C Vergelijk ARG met DAC Dubbel 77 | 78 | De routine ICOMP is wat mij betreft overbodig, want die zit 79 | ook al gewoon in de BIOS (DCOMPR - RST #20) en meestal zal 80 | je de code van die routine voor de snelheid ook al direct in 81 | je routine zetten. 82 | 83 | 84 | SLECHTE CODE 85 | 86 | Wat overigens opvalt bij het bestuderen van de routine's van 87 | de Mathpack, is dat de routine's niet altijd gemaakt zijn op 88 | snelheid. Zo kom je bijvoorbeeld de volgende source tegen 89 | (met fictieve namen eventjes): 90 | 91 | move: ld a,(hl) 92 | ld (de),a 93 | inc hl 94 | inc de 95 | djnz move 96 | ret 97 | 98 | Dit kun je veel beter gewoon met LDIR doen. Register C wordt 99 | dan wel aangepast wat eerder niet gebeurde, dus even 100 | PUSH'en, POP'en register B 0 maken is wel noodzakelijk. Op 101 | een Turbo R kun je dit makkelijk aanpassen (bij de 102 | RAM-mode), op een MSX2(+) zal het heel wat meer moeite 103 | kosten. 104 | 105 | De volgende keer komen de resterende routine's van de 106 | MathPack aan bod. 107 | 108 | 109 | Arjan Bakker 110 | -------------------------------------------------------------------------------- /future_disk/36/rom_images_laden.md: -------------------------------------------------------------------------------- 1 | ROM images, laat IK daar nu geen reet van snappen. 2 | 3 | ROM-IMAGES LADEN 4 | 5 | 6 | Op de CD's van MCCM staan heel wat rom-images. Ook op andere 7 | CD's (die illegaal zijn) en via internet (idem dito) zijn 8 | heel wat roms te verkrijgen. Op een MSX-emulator zijn deze 9 | eenvoudig te gebruiken, maar op een MSX is het een stuk 10 | lastiger. 11 | 12 | Er is een programmaatje dat rom-images inlaadt en start, 13 | maar bij mij werken de meeste spelletjes niet of niet 14 | goed. Ik heb geen DOS2, dus ik denk dat het daar aan ligt. 15 | In deze tekst zal ik beschrijven hoe je een programaatje 16 | kunt maken en toch rom-images (van 16kB) kunt gebruiken, en 17 | natuurlijk staat een simpele lader ook op de FD. 18 | 19 | De rom-images beginnen met de letters AB en vervolgens 2 20 | bytes die het adres weergeven waar na initialisatie heen 21 | wordt gesprongen. De letters AB mag je wissen, zodat het 22 | spel niet automatisch opstart na het resetten. 23 | 24 | De 2 bytes na AB kun je gebruiken om te kijken op welk adres 25 | je het programma moet zetten. Als het adres groter is dan 26 | #3FFF, dan kun je de rom-image op het interval #4000-#7FFF 27 | laden en anders vanaf adres #0000. 28 | 29 | Verder moet er op pagina 1 en soms op 0 ram geschakeld zijn. 30 | Onder DOS is dit altijd het geval, maar onder BASIC niet. Je 31 | kunt met het volgende programmaatje op pagina 1 tot en met 3 32 | hetzelfde ram-slot selecteren. Als op pagina 0 ook RAM moet 33 | staan, dan moet je vier keer RRA gebruiken in plaats van 34 | twee keer. 35 | 36 | in a,(#a8) ; Lees huidige stand 37 | and 240 ; Hoogste 4 bits zijn onder 38 | ld b,a ; BASIC altijd al RAM 39 | rra ; Schuif de bits naar rechts 40 | rra 41 | or b ; Oude stand erbij 42 | out (#a8),a ; Schrijf slotstand weg 43 | 44 | Zo, nu weet je alles om een 16kB rom-image te gebruiken. Nu 45 | gaan we daadwerkelijk het programma maken (niet helemaal 46 | natuurlijk, maar alleen de code waar je problemen mee kunt 47 | krijgen. De volledige source staat op deze FD in de file 48 | ROM16.LZH, waar ook een simpele BASIC-lader in staat) 49 | waarmee je 16kB rom-images mee kunt inladen. Het programma 50 | aanpassen voor 32kB is trouwens erg makkelijk. 51 | 52 | org #c000 53 | 54 | Onder BASIC erg logisch, want op adres #4000-#7FFF mag niets 55 | geladen worden. 56 | 57 | ld de,fcb 58 | ld c,open_file 59 | call bdos ; open de rom-image 60 | 61 | call initFCB ; initialiseer FCB om te 62 | ; laden 63 | 64 | ld de,#8000 65 | ld c,setdta ; Zet adres waar de data 66 | call bdos ; terecht komt 67 | 68 | ld hl,16384 69 | ld de,fcb 70 | ld c,read_block 71 | call bdos ; Lees file in 72 | 73 | di ; Interrupts uit 74 | 75 | call selram ; Schakel RAM in 76 | 77 | ld hl,#8000 ; Wis A van AB zodat rom niet 78 | ld a,0 ; na reset opstart 79 | ld (hl),a 80 | ld bc,#4000 ; Grootte 81 | ld de,#4000 ; Bestemming 82 | ld a,(#8003) ; Check startadres van rom 83 | cp #40 84 | jp nc,jump1 ; >#4000 -> Bestemming is 85 | ; goed 86 | 87 | ld de,#0000 88 | 89 | jump1: ldir ; Verplaats 90 | 91 | ld hl,(#8002) ; Laadt start adres 92 | jp (hl) ; en spring ernaar toe 93 | 94 | 95 | Het gebruik van ROM-images die groter dan 32kB zijn is veel 96 | lastiger, omdat die schakelroutine's gebruiken die bij 97 | bepaalde roms de data op andere adressen schakelen dan bij 98 | andere roms. Daarom heeft fMSX bij het selecteren van roms 99 | een optie om de cartridge-type te kiezen, zodat de roms wel 100 | werken. Het programma LOADROM (voor MSX) kan wel mega-roms 101 | aan, maar dat programma werkt alleen onder DOS2 goed en laat 102 | ik die nou net niet hebben. Een ander probleem is het 103 | geheugen, want bij mega-roms heb je gewoon meer dan 128kB 104 | geheugen nodig. Ook een probleem is dat de roms zelf ook 105 | naar ram schrijven en dus je kopie kunnen overschrijven 106 | waardoor alles in de soep loopt. 107 | 108 | 109 | Veel plezier en succes! 110 | 111 | 112 | Arjan Bakker 113 | -------------------------------------------------------------------------------- /future_disk/21/moonblaster_music_cursus_4.md: -------------------------------------------------------------------------------- 1 | Jorrith probeert de mensen weer aan te zetten tot het maken van riedels... 2 | 3 | 4 | MOONBLASTER CURSUS part IV 5 | 6 | Hartelijk welkom beste lezer, bij alweer de vierde 7 | aflevering van de MB-cursus. Een korte dit keer, het is 8 | tenslotte voor mij ook vakantie !! (Voor de enige lezer 9 | (Koen), voor het controleren van taalfouten zal het toch 10 | niet veel meer uitmaken of ik nu veel of weinig onzin te 11 | vertellen heb). Ik heb vorige keer een aantal dingen 12 | beloofd. Zo beloofde ik bijvoorbeeld om met deze cursus een 13 | of meerdere muziekstukken op te bouwen. Helaas komt dat er 14 | door tijdgebrek nooit van, dus moet je gewoon de muziekjes 15 | (die je in ieder geval t/m #20 nog in MoonBlaster in kan 16 | lezen) maar eens helemaal met behulp van MB uitpluizen (heb 17 | je wat te doen als je je verveeld!). Ik weet het, belofte 18 | maakt schuld, maar ik heb me al aan zoveel dingen schuldig 19 | gemaakt dat dit beetje er nog wel bij kan! 20 | 21 | BASSss 22 | 23 | In deze aflevering wilde ik het basgedeelte van een 24 | muziekstuk bespreken. Voor je begint is het wel zo 25 | verstandig om een bas-instrument te selecteren (Electric 26 | bass 1 of 3 zijn 2 van mijn favorieten). Ik zal de rest aan 27 | de hand van wat losse tips duidelijk proberen te maken. Voor 28 | de zoveelste keer: als je het niet snapt kun je altijd 29 | contact opnemen met de redactie. Ik heb nog nooit iemand 30 | iemand gehad die het niet snapte. Op zich erg vreemd, ik kan 31 | me niet voorstellen dat ik alles zo goed uitleg. Sterker 32 | nog, ik weet zelfs niet altijd wat ik bedoel met hetgeen ik 33 | getypt heb... 34 | 35 | Om een lang verhaal kort te maken komen hier enkele tips: 36 | 37 | - Gebruik een (of meerdere) lage octaven. Mijn persoonlijke 38 | favorieten zijn octaaf 2 en 3(NvdR: die van mij 1 & 8). 39 | - Om een bas te maken die niet vals klinkt kun je het beste 40 | een beetje de hoogte van de laagste noot van een accoord 41 | aanhouden. Dit is een nogal ingewikkelde zin, dus ik zal 42 | hem even uitleggen aan de hand van een voorbeeldje. 43 | Stel: Je hebt het volgende ingevoerd in MB: 44 | 45 | Step: 01 02 03 04 05 06 07 08 46 | Ch.1: A 4 OFF A 4 OFF A 4 OFF A 4 OFF 47 | Ch.2: C 5 OFF C 5 OFF C 5 OFF C 5 OFF 48 | Ch.3: E 5 OFF E 5 OFF F 5 OFF E 5 OFF 49 | 50 | Om nu een goed klinkende bas te maken moet je een beetje de 51 | laagste noot van het accoord aanhouden, in dit geval dus de 52 | "A". Het zou er dan zo uit kunnen zien: 53 | 54 | Step: 01 02 03 04 05 06 07 08 55 | Ch.1: A 4 OFF A 4 OFF A 4 OFF A 4 OFF 56 | Ch.2: C 5 OFF C 5 OFF C 5 OFF C 5 OFF 57 | Ch.3: E 5 OFF E 5 OFF F 5 OFF E 5 OFF 58 | Ch.4: A 2 OFF A 2 OFF A 3 OFF A 2 OFF 59 | 60 | - Bij een rustig nummer hoort een rustige bas. Laat daarom 61 | relatief veel ruimte vrij tussen de verschillende noten. 62 | - Bij een snel nummer precies het tegenovergestelde: veel 63 | noten, maar ook weer niet teveel. Als je het hele 64 | baskanaal vol zet ben je een beetje te enthousiast 65 | geweest... 66 | - Doe af en toe wat afwisseling in de bas, dit zorgt vaak 67 | voor schitterende resultaten. 68 | - Een bas die steeds hetzelfde blijft, terwijl de accoorden 69 | veranderen kan mooie resultaten hebben. 70 | - Het springen van een lager octaaf naar 1 octaaf hoger 71 | klinkt vaak erg goed. Spring daarna wel weer terug, zodat 72 | je dit spelletje -indien gewenst- nog eens kan herhalen. 73 | 74 | Dit was zo'n beetje alles. Valt mee he? Als je eenmaal de 75 | accoorden onder de knie hebt is de rest echt niet meer zo 76 | moeilijk. 77 | 78 | OEFENING BAART KUNST 79 | 80 | Een oud spreekwoord, maar het blijft gelden. Hoe meer je het 81 | doet hoe beter je erin wordt. Overigens geldt ditzelfde ook 82 | voor OPL4, alleen moet je dan de genoemde octaven verlagen, 83 | omdat dit nu eenmaal iets anders werkt. Goede kandidaten bij 84 | OPL4 zijn voor een rustig nummer Slap bass (1 of 2) en 85 | Fingered bass, bij het wat ruigere werk is Picked bass of 86 | Synth bass (1 of 2) aan te bevelen. 87 | 88 | A little present 89 | 90 | Op deze disk staan (onder voorbehoud) de drumvoorbeelden van 91 | de vorige keer. Ze stonden er wel op, maar niet zoals het 92 | hoorde... Ook staan er nog twee voorbeelden op met daarin de 93 | tot nu toe besproken onderwerpen, nl. de bas, de accoorden 94 | en de drums. Zo houdt ik me toch nog een beetje aan m'n 95 | belofte!(NvdR: misschien komt dit allemaal wegens 96 | diskruimte gebrek te vervallen; schrik niet als de zooi niet 97 | op de disk staat) 98 | 99 | Een prettige vakantie allemaal ! 100 | 101 | Jorrith "Vakantiestress..." Schaap 102 | -------------------------------------------------------------------------------- /sunrise_special/1/set_scroll_in_basic.md: -------------------------------------------------------------------------------- 1 | # S E T S C R O L L I N B A S I C 2 | 3 | 4 | 5 | ## I N L E I D I N G 6 | 7 | Op een MSX2+ kan (in BASIC) m.b.v. het SET SCROLL commando 8 | een vrijwel vloeiende scroll beweging krijgen. Omdat niet 9 | iedereen zelf een vloeiende scroll in BASIC of in ML kan 10 | programmeren, leg ik in deze tekst uit hoe je heel 11 | gemakkelijk het SET SCROLL commando kunt gebruiken. 12 | 13 | 14 | ## S E T S C R O L L 15 | 16 | Het SET SCROLL commando kan je in alle schermen gebruiken, 17 | behalve in SCREEN 0. Bij gebruik van het SET SCROLL commando 18 | in SCREEN 0 gaat het naar boven scrollen niet hetzelfde als 19 | in de grafische schermen. Bij deze tekstschermen gaat de 20 | tekst of eventueel tekening niet omhoog maar scrollt met 21 | rijen van acht hoog, (dat is dus het formaat van de ASCII 22 | karakterset), daar wil ik mee zeggen dat alles wat boven aan 23 | het blok van acht hoog verdwijnt, er aan de onderkant weer 24 | bij komt. 25 | 26 | In de grafische schermen scrollt het hele beeld wel goed 27 | maar krijg je het sprites-blok te zien. Daar heb ik wel een 28 | truukje voor maar dat komt later. 29 | 30 | 31 | ## G E B R U I K 32 | 33 | Het gebruik is eigenlijk heel gemakkelijk, je hoeft namelijk 34 | alleen het commando plus een getal voor de horizontale 35 | scrolling en een getal voor de verticale scrolling in te 36 | voeren. B.v. Set scroll 2,4 betekent dat je 2 pixels 37 | horizontaal en 4 pixels verticaal scrollt. 38 | 39 | Overigens mag je geen negatieve (dus min) getallen in 40 | voeren. Dat is ook niet nodig want als je in grafische 41 | schermen SET SCROLL 0,0 in voert geeft dat het zelfde 42 | resultaat als SET SCROLL 256,0 (voor SCREEN 6 en 7 dus SET 43 | SCROLL 512,0), alleen is het scherm bij SET SCROLL 256 (of 44 | 512),0 een keer helemaal rond geweest. Zo kan je dus ook met 45 | een lus optellen van 0 tot 255 (of 511) en ook aftellen van 46 | 255 (of 511) tot 0. Dat laatste geeft dus een scroll naar 47 | links en de eerste naar 48 | rechts. Zo werkt dat ook met het verticaal scrollen. 49 | 50 | 51 | ## V D P ( 1 9 ) E N V D P ( 2 4 ) 52 | 53 | Het set scroll commando komt overeen met VDP(19) (of set 54 | adjust) en VDP(24). VDP(19) geeft namelijk een soort van 55 | horizontale scroll net als set scroll X,0. Hier staat X voor 56 | een getal. Er is wel een groot nadeel aan VDP(19) namelijk 57 | dat de getallen die je in kunt voeren van -7 tot +8 lopen. 58 | En met VDP(19) kan je een horizontale EN verticale scroll 59 | maken. Dan nu VDP(24), dit komt volkomen overeen met het 60 | getal dat je in voert bij set scroll voor verticaal 61 | scrollen. Je kunt ook getallen van 0 tot 255 invoeren en 62 | zelfs het spritesblok komt ook mee. Hieronder heb ik een 63 | klein tabelletje neergezet waarin je kunt zien waarmee SET 64 | SCROLL overeenkomt, zoals je ziet is verticaal scrollen 65 | hetzelfde als VDP(24). 66 | 67 | HORIZONTAAL -- VERTICAAL 68 | ------------------------------------------------- 69 | |SET SCROLL | GETAL 0 TOT 255 | GETAL 0 TOT 255 | 70 | |-----------|-----------------|-----------------| 71 | | VDP(19) | GETAL -7 TOT +8 | GETAL -7 TOT +8 | 72 | |-----------|-----------------|-----------------| 73 | | VDP(24) | N.V.T. | GETAL 0 TOT 255 | 74 | ------------------------------------------------- 75 | 76 | 77 | ## V O O R B E E L D 78 | 79 | Dan nu maar even een klein voorbeeld programaatje. Met de ' 80 | geef ik wat kommentaar. Bedenk wel dat dit programmaatje 81 | ALLEEN voor MSX2+ bedoeld is. 82 | ``` 83 | ; Dit programma is alleen voor grafische schermen 5 en 8 84 | 85 | 10 COLOR 15,0,0:SCREEN X ' VUL HIER VOOR X IN 5 OF 8 86 | 20 SET PAGE 1,1:CLS:COPY (0,0)-(256,64) TO (0,212) 87 | 30 VDP(9)=VDP(9) OR 2 'LAAT DE SPRITES NIET ZIEN 88 | 40 OPEN "GRP:" FOR OUTPUT AS #1 89 | 50 PSET (200,200):PRINT #1,"MSX 2+" 90 | 55 ' _TURBO ON 'GEBRUIK ALLEEN MET _BC 91 | 60 X1 = 1:Y1 = 1 92 | 70 X2 = X2+X1:IF X2 > 245 THEN X1 = -1 'X2>245 ? JA,DAN -1 93 | 80 Y2 = Y2+Y1:IF Y2 > 200 THEN Y1 = -1 'Y2>200 ? JA,DAN -1 94 | 90 IF X2<15 THEN X1 = 1 'X2<15 ? JA,DAN +1 95 | 100 IF Y2<50 THEN Y1 = 1 'Y2<50 ? JA,DAN +1 96 | 110 SET SCROLL X2,Y2 'SCROLLEN 97 | 120 IF INKEY$="" THEN GOTO 70 ELSE END 98 | ``` 99 | Je kan eventueel nog _BC gebruiken en dan in regel 55 het 100 | rem (') teken weghalen. Als je het programma RUNt zie je de 101 | tekst MSX 2+ over het beeld schuiven, de tekst gaat ook door 102 | het beeld (dus links eruit en rechts erin). Maar er is geen 103 | sprites blok te bekennen. 104 | 105 | Veel plezier met het SET SCROLL commando en misschien de 106 | volgende keer een complete tekstzoek routine met scroll. 107 | 108 | Bart Schouten 109 | --------------------------------------------------------------------------------