; Forty columns or eighty, whichever the screen is not in. ; ; A machine wakes up in the forty column mode and CosmOS asks for eighty, because that is ; what its own output was written for. A game is the other way round: Snake on a forty column ; screen is the same board drawn twice the size, which is what a person sitting in front of ; it actually wants. ; ; ---- The smallest program this system can load ---- ; ; Ten instructions and NO DATA AT ALL, which is not a curiosity: it is the shape that found ; a bug in the loader. Every program written for CosmOS until this one had something in its ; Data Segment, so the loader had never been asked to move a segment of no bytes - and a ; length of zero asks the memory controller for the whole 64K, which does not fit, which it ; refused, which stopped the machine in the middle of loading. On a terminal that printed a ; fault. Behind a window it looked exactly like a hang. ; ; So this is kept dataless on purpose. The two digits it prints are put in a register one at ; a time rather than being a string, which is the only reason it can say anything at all. ; ; Written by Anachronaut #Include services.asm #Program #Base 0x4000 start: INA 0x31 ; Which mode the screen is in now. BRA modeWide ; Nought is the forty column one, so go the other way. ; Anything else becomes forty, and that deliberately includes bitmap mode. A program that ; left the screen with no text on it left nowhere to print, so coming back to a mode that ; has characters in it is more use than refusing. RSTA OUTA 0x31 INIA 0x34 ; '4' BRI modeSay modeWide: INIA 0x01 OUTA 0x31 INIA 0x38 ; '8' modeSay: OUTA 0x00 INIA 0x30 ; '0' OUTA 0x00 INIA 0x0A OUTA 0x00 RSTA SWI osExit