TMP --- Tiki Monitor Prom er en modul innen TIKO som tar seg av den mest maskin-nære koden. Brukes blant annet av TIUM. Når TIKI-100 slåes på, ligger 0 i systemregisteret noe som fører til at EPROM'en er synlig fra adresse 0. Prosessoren begynner å kjøre fra adresse 0. Oppstart (kaldstart): Test av RAM/ROM Kopiere TMP fra ROM til RAM Hoppe til dette RAM-området Koble ut ROM Initiere kladdeområder og variable Initiere seriekanaler Starte avbruddsrutiner for tastatur Klargjøring av videorutiner Initiering av diskrutiner Hoppe til varmstartrutine som laster TIKO fra diskett Andre ting i MONITOR: Varmstart Avsporingsfelle Diverse videorutiner Tegntabell for tastatur Inn, ut og status for seriekanaler Avbruddsrutiner for: tastatur timer serie inn Diverse diskrutiner Diverse andre hjelperutiner Hopptabell på adresse F000H --------------------------- F000H: Kaldstart: Full oppstart fra EPROM, som ved SHIFT-BRYT F003H: Varmstart: Ny oppstart av TIKO Tastatur og video F006H: Konsoll status: Test om en tast er nedtrykket Ut: A-reg = 0 hvis ikke nedtrykket F009H: Konsoll inn: Hent neste tegn fra tastaturet Ut: Venter til nedtrykk, tegn i A-reg F00CH: Konsoll ut: Skriv et tegn til video skjerm. Inn: Tegn i A-reg Seriegrensesnitt B (port 1 DCE) F012H: Serie B status: Test om data venter på seriegrensesnitt B Ut: A-reg = 0 hvis ikke data venter F015H: Serie B inn: Hent neste tegn fra seriegrensesnitt B Ut: Venter på data, tegn i A-reg F018H: Serie B ut: Skriv et tegn til seriegrensesnitt B Inn: Data i A-reg Diskettrutiner Feilstatus tolkes som følger: Ved velg disk / søk spor Ved les / skriv: Bit 2: finner ikke spor 0 data tapt Bit 3: CRC feil CRC feil Bit 4: finner ikke ønsket spor finner ikke ønsket sektor Bit 5: ubrukt feil ved skriving Bit 6: ubrukt disk skrivebeskyttet Bit 7: enhet ikke klar for bruk enhet ikke klar for bruk F01BH: Velg disk: Velg diskett enhet. Velger ny enhet kun hvis denne er klar til bruk. Inn: enhetnummer i C-reg. Ut: feil status i A-reg, 0 hvis OK F01EH: Gå til spor 0: Flytt r/w hodet til spor 0 Ut: feil status i A-reg, 0 hvis OK F021H: Gå til spor n: Flytt r/w hodet til angitt spor Inn: ønsket spor i C-reg Ut: feil status i A-reg, 0 hvis OK F024H: Les sektor: Les angitt sektor fra valgt spor og disk Inn: ønsket sektor i C-reg, bufferpeker i HL-reg Ut: feil status i A-reg, 0 hvis OK F027H: Skriv sektor: Skriv angitt sektor til valgt spor og disk. Inn: ønsket sektor i C-reg, bufferpeker i HL-reg Ut: feil status i A-reg, 0 hvis OK F030H: Les sektor hode: Setter rett skrive-tetthet og finner sektor lengde Inn: enhet nummer i C-reg Ut: A-reg = 1, 2, 3 eller 4 for hhv. 128, 256, 512 eller 1024 b/s. HL-reg = sektorlengde i hex. Seriegrensesnitt A (port 2 DTE) F033H: Serie A status: Test om data venter på seriegrensesnitt A Ut: A-reg = 0 hvis ikke data venter F036H: Serie A inn: Hent neste tegn fra seriegrensesnitt A Ut: Venter på data, tegn i A-reg F039H: Serie A ut: Skriv et tegn til seriegrensesnitt A Inn: Data i A-reg Grafikkrutiner F03CH: Resett grafikk: Nullstill grafikkrutiner. F03FH: Hent 8 punkt: Hent en byte fra grafikk RAM Inn: adresse i HL-reg Ut: data i A-reg F042H: Skriv 8 punkt: Skriv en byte til grafikk RAM Inn: adresse i HL-reg, data i A-reg F045H: Skriv n punkt: Skriv samme byte til flere pos i grafikk RAM Inn: adresse i HL-reg, antall byte i B-reg, data i A-reg F048H: Vert. offset: Definer vertikal offset Inn: peker til grafikk kontroll blokk i IX-reg, (IX + 10) gir pos for relativ offset - roll. Noen nyttige RAM posisjoner --------------------------- F04BH: Velg font: RAM posisjon for peker til standard tegnsett F04DH: Video port: RAM posisjon for kopi av videoport, adr 0CH F04EH: Punkt på linje: RAM posisjon for maksimalt antall punkt på linje F050H: Venstre marg: RAM posisjon for bredde på venstre marg F057H: Blink cursor: Vektor til rutine som tenner/slukker cursor. Denne kalles hvert 0.2 sekund (unøyaktig). FB00H-FEFFH: Disk buffer FF00H-FF1BH: Avbruddsprogram vektorer FF00H: Seriekanal B, sender, normal FF02H: Seriekanal B, sender, feilutgang FF04H: Seriekanal B, mottager, normal FF06H: Seriekanal B, mottager, feilutgang FF08H: Seriekanal A, sender, normal FF0AH: Seriekanal A, sender, feilutgang FF0CH: Seriekanal A, mottager, normal FF0EH: Seriekanal A, mottager, feilutgang FF10H: Tellerkanal 0, brukes til baudrate seriekanal A, 9600 FF12H: Tellerkanal 1, brukes til baudrate seriekanal B, 9600 FF14H: Tellerkanal 2, alt. baudrate for seriekanal A (lav hastighet) seriekoblet med kanal 0, ut via koblingsbøyle FF16H: Tellerkanal 3, gir avbrudd hvert 8. ms for tastatur, cursorblink, timer og diskmotor av FF18H: Parallellkanal A FF1AH: Parallellkanal B FF6CH: Disk motor timer, reduseres med 1 hvert sekund og slår av motor på 0 FF8CH: 16 bit binær teller, økes hvert 8. ms. FF8EH: 16 bit binær teller, økes hvert (8*65536) ms. FF92H: Sekund register FF93H: Reservert minutt register FF94H: Reservert time register FF95H: 16 posisjoners tastatur ringbuffer FFA5H: Antall tegn i ringbuffer FFA6H: Buffer inn peker FFA7H: Buffer ut peker FFC8H: Kopi av system register. Kode som forandrer system-register og kopi av systemregister må omsluttes av DI og EI instruksjoner, for å forhindre trøbbel med avbrudd. Initiering av I/O-kretser ------------------------- Seriekanalene, SIO kanal A og B, er initielt satt opp med 9600 bit/sek. fra CTC kanal 0 og 1, med 8 bit, 1 stoppbit og ikke paritet. Ønsker en å endre baudrate må CTC kanal 0, alt. 1, settes opp i teller modus med følgende periodelengde: - 110 baud mulig - 300 baud mulig 208 for 600 baud 104 for 1200 baud 52 for 2400 baud 26 for 4800 baud 13 for 9600 baud Timer kanal 3 er initielt satt opp for å generere avbrudd hvert 8. ms. --- 13 juli 2000 Asbjørn Djupdal, djupdal@stud.ntnu.no