Этим Вы окажете большую помощь науке и медицине. См. подробнее: http://solidstate.karelia.ru/~yura/pyldin/yura/computing.htm |
НАУЧНО-ИЗСЛЕДОВАТЕЛСКА И ПРОИЗВОДСТВЕНА ЛАБОРАТОРИЯ "Програмно осигуряване" ---------------------------------------------------------------------------- О П Е Р А Ц И О Н Н А С И С Т Е М А U N I D O S за персонален компютър П Ъ Л Д И Н Р Ъ К О В О Д С Т В О З А П О Т Р Е Б И Т Е Л Я ОПИСАНИЕ НА BIOS И MONITOR - версия 01 Jun 1989 - 1. ОБЩИ ПОЛОЖЕНИЯ Микрокомпютърът Пълдин е разработен на базата на микропроцесорната фамилия СМ 600, като съдържа: - СМ 601 - 8 битов микропроцесор (аналог на MC6800); - СМ 602 - паралелен интерфейсен адаптер (аналог на MC6820); - СМ 607 - видеоконтролер (аналог на MC6845); - СМ 609 - флопидиск контролер (аналог на I8272A); - 64 килобайта динамична памет DRAM; - 4 килобайта постоянна памет PROM; - до 64 килобайта допълнителна постоянна памет PROM, със странична организация по 8 Kb. Операционната система UNIDOS поддържа всички хардуерни устройства и включва: - BIOS - основна входно/изходна система, включва UniDOS_BIOS и Graphics_BIOS - MONITOR - UNIDOS - команден интерпретатор Този документ съдържа информация, необходима при използването на операционната система UNIDOS. ПРЕДУПРЕЖДЕНИЕ: С оглед на осигуряване на съвместимост със следващи версии на операционната система, се счита за уместно всички програми, използващи функции на операционната система да осъществяват това по единен протокол, чрез използване на инструкцията SWI. Всяко друго директно обръщение към кода на операционната система се счита за нелегално и не се поема никаква отговорност за неприложимостта на такива програми в бъдеще. Формата на обръщението към операционната система е инструкцията SWI, следвана от един байт, съдържащ номер на функцията (interrupt). Номерата са разпределени по следния начин: $ 00 - 7F - запазени за UNIDOS $ 80 - FF - свободни (за използване от езици и потребителя) Необходимите параметри се предават и получават чрез регистрите P, A, B и X, или чрез указател към параметрите в регистърът X. Стойностите на всички други неизползвани регистри не се променя. При обработка на прекъсвания (IRQ или NMI) е възможно да се използват функции на операционната система САМО ако флага INDOS (адрес $0000) е нула. Това е съществено и се налага от факта, че процедурите не са реентрантни. ПРЕДУПРЕЖДЕНИЕ: Несъобразяването с флага INDOS, както и промяната на стойността му е твърде опасно и може да има тежки последици! Не е целесъобразно да се използва прекъсване NMI при работа с флопи-дисково устройства или други време-критични устройства, тъй като може да предизвика загуба на информация. Програмите се зареждат от адрес $0100, и се заделя памет колкото е дължината на програмата. Изпълнението започва от адрес $0100. Програмите имат право да разполагат с оперативната памет от адрес $0100 до адреса определен от регистъра SP (стековия указател) - върха на стека. Използваната кодова таблица е MIK, еднаква с използваната в микрокомпютрите Правец-16. Файловата организация на UNIDOS е еднаква с тази на MSDOS и използваната в Правец-16. Клавитурата може да генерира символи от латинската азбука и от кирилица. Основен режим е латиница и се индикира с мигащ курсор. Режим кирилица се индикира с постоянен (немигащ) курсор. Когато няма курсор се изпълнява операция и клавитурата не е активна. В този случаи не могат да се въвеждат символи. 2. РАЗПРЕДЕЛЕНИЕ НА ПАМЕТТА 2.1. Разпределение на оперативната памет: $0000 - флаг INDOS $0001 - equipment: $80 - UniDOS kernel, $40 - Graphic BIOS, $20 - Basic, $10 - Pascal, $01 - UniDOS shell $0002 - configuration: $80 - 601A, $02 - drive B, $01 - drive A present $0004 - SWIC $0005 - SWIB $0006 - SWIA $0007-0008 - SWIX $0018-001F - текущо време: $0018 - стотни от секундата $0019 - секунди $001A - минути $001B - часове $001C - ден $001D - месец $001E - година $001F - век $0000-007F - работна област за UNIDOS $0080-00FF - запазена за BASIC и PASCAL $0100-BFFF - оперативна памет RAM $C000-DFFF - странична памет ROM 8 KB и RAM $E000-E5FF - работна област за UNIDOS $E600-E6FF - I/O област $E700-EFFF - работна област за UNIDOS $F000-FFFF - ROM и системен текстов екран (само за писане) Областта $C000-DFFF (съвпадаща със страничния ROM) е запазена за интерпретатора на команди на UNIDOS. ПРЕДУПРЕЖДЕНИЕ: Използването на работната област на операционната система е опасно и може да доведе до крах на системата! 2.2. Разпределение и формат на страничният ROM: В микрокомпютъра Пълдин може да се постави платка със страничен ROM, съдържаща четири интегрални схеми EPROM 2764. Възможно е да се поставят също и схеми 27128, като такъв начин броя н страниците може да бъде увеличен до 8 (или с общ обем 64 килобайта). Използват се четири страници за следните нужди: - една страница се използва за UniDOS_BIOS - една страница се използват за Graphics_BIOS - една страница се използва за BASIC, - една страница се предвижда да се използва за интерпретатора на p-код (за реализация на Pascal. Всяка от страниците трябва да съдържа в началото следните полета: дума +$0 - идентификатор $A55A (при използване на ИС 27128, горната половина на схемата трябва да съдържа иденти- фикатор $5AA5); байт +$..+$9 - име (8 символа); байт +$A..+$C - входна точка за инициализация; байт +$D..+$F - главна входна точка; байт +$10 - таблица от записи по 3 байта. Всеки запис съдържа 1 байт номер на функция и 2 байта адрес. Таблицата завършва със запис, съдържащ номер на функция 0. При сумране на всички байтове от ROM, без отчитане на преноса трябва да се получи $00. 2.3. Номера на страниците Номерата на страниците имат следния смисъл: 0 - използва се ако адреса на интеръпта е извън областта $C000-$DFFF 1..6 - тези номера са запазени (за бъдещи разширения) 7 - номер на RAM страницата 8 - номер на страницата за първата ИС (EPROM 2764) 9 - номер на страницата за втората ИС (EPROM 2764) A - номер на страницата за третата ИС (EPROM 2764) B - номер на страницата за четвъртата ИС (EPROM 2764) C - номер на страницата за първата ИС (EPROM 27128 - втора половина) D - номер на страницата за втората ИС (EPROM 27128 - втора половина) E - номер на страницата за третата ИС (EPROM 27128 - втора половина) F - номер на страницата за четвъртата ИС (EPROM 27128 - втора половина) ПРЕДУПРЕЖДЕНИЕ: Променянето на старницата и адреса на даден интеръпт трябва да става само чрез използването н предвидената за целта функция: INT 2F. Всеки друг начин е опасен и може да доведе до крах на системата! 3. ОПИСАНИЕ НА ФУНКЦИИТЕ НА ОПЕРАЦИОННАТА СИСТЕМА UNIDOS Както е указано раздел 1 обръщението към функциите на операционната система се осъществява чрез инструкцията SWI, следвана от байт, съдържащ номера на функцията. Директното обръщение към адреса на функцията, нарушава консепцията на операционната система и се счита за нелегално. Ако адреса на някоя функция е $0000 то тя не е инициализирана и в момента не се използва. Описанието на функциите е валидно е при условие, че са поставен страничния ROM, съдържащ тези интеръпти. В противен случай част от тях може да не функционират, така както е описано (INT 00 - INT 2F) или въобще да не работят (предимно INT 30 - INT 7F). 3.1. Функции от BIOS INT 00 - запазен специален, използва се при страничния ROM за указване на края на таблицата с функции и за разграничаване на "студено" и "топло" стартиране на компютъра (RESMAGIC); INT 01 - reset вектор, нормално се насочва към входната точка на монитора или на командния интерпретатор; INT 02 - NMI вектор; INT 03 - IRQ вектор; INT 04 - вектор за прекъсване (BREAK); INT 05 - вектор за периодично прекъсване - 50 Hz (PERIODIC); INT 06 - вектор за периодично прекъсване - 1 Hz; INT 07 - critical error OUTPUT: A - b7 = 1 - disk device b7 = 0 - char device b6-0 - error code B - (if disk device) b3-2 - area: 0 - DOS, 1 - FAT, 2 - Dir, 3 - Data b1-0 - operation: 0 - init, 1 - read, 2 -write b4 - ignore valid b5 - retry valid b6 - fail valid X - pointer to INT_40 table (if disk device) INPUT: A - response: 0 -ignore, 1 - retry, 2 - abort, 3 -fail INT 08 - запазен указател към параметрите на флопидисковото устройтво - таблица с 9 байта, съдържаща типа на сектора и времеконстанти (FDDPARMS), трябва да бъде разположена извън областта $C000-$DFFF ! Параметрите имат следния смисъл: 0 = $af - step rate & head unload time 1 = $03 - head load time & non-dma mode 2 = $02 - sector type 512 bytes 3 = $09 - last sector on track 4 = $2a - gap1 5 = $ff - dtl 6 = $50 - gap2 7 = $f6 - fill byte 8 = $80 - константа определяща момента за изключване на мотора по 20 милисек. след завършване на операцията. INT 09 - облужване на IRQ от клавитурата INT 0A - указател към клавитурни макроси - таблица със следната структура: клавиш - 1 байт, макрос - ASCIIZ стринг $FF - край на таблицата (невалиден клавиш) Таблицата трябва да бъде разположена извън областта $C000-$DFFF ! INT 0B - запазен (за ULAN) указател към параметрите на конзолата - таблица 11 байта, определяща скоростта на клавитурата и формата на курсора, трябва да бъде разположена извън областта $C000-$DFFF ! Параметрите имат следния смисъл: 0 = $28 - времеконстанта, определяща началното закъснение на повторението на клавитурата (autorepeat); 1 = $0А - времеконстанта, определяща скоростта на повторението; 2 = $20 - константа, определяща силата на озвучаването на клавитурата. 3 = $13 - PAUSE (ctrl-S) 4 = $03 - BREAK (ctrl-C) 5,6 - начална и крайна скан линия на курсора в режим replace 7,8 - начална и крайна скан линия на курсора в режим insert 9,10 - начална и крайна скан линия на курсора в режим non-read INT 0C - запазен (за ULAN) указател към параметрите на серийния вход/изход - таблица с 3 байта, определяща контрола по четност и бодовете (RSPARMS), трябва да бъде разположена извън областта $C000-$DFFF ! Параметрите имат следния смисъл: 0 - бодове: $7е - 1200, $3а - 2400, $18 - 4800, $07 - 9600 1 - битове: 7 или 8 2 - четност $00 - even + 1 stop, $FF - odd + 1 stop, $80 - no + 2 stop INT 0D - internal use ПРЕДУПРЕЖДЕНИЕ: Модифицирането на този вектор, може да доведе до крах на системата! INT 0E - internal use ПРЕДУПРЕЖДЕНИЕ: Модифицирането на този вектор, може да доведе до крах на системата! INT 0F - internal use ПРЕДУПРЕЖДЕНИЕ: Модифицирането на този вектор, може да доведе до крах на системата! INT 10 - проверка на клавитурата (продължителност около 1 ms) EXPORT: A - $FF ако няма натиснат клавиш INT 11 - четене на клавитурата EXPORT: A - скан код INT 12 - инициализация на видео режима (SCRINIT), към номера на режима може да се добави $80 за да не се изчиства екрана при инициализирането, след това е необходимо да се позиционира курсора. Това предполага, че преди това екрана е бил инициализиран в този режим и положението на курсора и началния адрес са запазени (след получаването им чрез INT14). Трябва да се има предвид, че базовия адрес и началния адрес на екрана са нормално различни в текстов режим поради метода на скролиране. IMPORT: A = 0 - текст 25 реда * 40 символа B = 0 - черно/бял (без атрибут) B <> 0 - цветен атрибут [601A] A = 1 - графика 80*200 в 16 цвята A = 1 - графика 160*200 в 16 цвята [601A] A = 2 - графика 160*200 в 4 цвята A = 2 - графика 320*200 в 4 цвята [601A] B - палитра (0..3) A = 3 - графика 320*200 в 2 цвята A = 3 - графика 640*200 в 2 цвята [601A] A = 4 - текст 25 реда * 80 символа [601A] B = 0 X - адрес на екрана, за режим 0 и 4 не е необходима, а при режим $80 и $84 това е началния адрес на екрана (връща се от INT14) EXPORT: няма INT 13 - видеорежим IMPORT: няма EXPORT: А - видеорежим (по смисъла на INT12) B - палитра X - базов адрес на екрана INT 14 - положение на курсора (CURSOR) IMPORT: няма EXPORT: A - колона B - ред X - начален адрес на екрана INT 15 - задаване на курсора IMPORT: A - колона B - ред INT 16 - задаване на атрибут IMPORT: B - атрибут (601 A) INT 17 - работа с FDD (FLOPPY) IMPORT: А = 0 - reset A = 1 - четене на сектор А = 2 - писане на сектор A = 3 - позициониране (seek) A = $FF - motor shut down (601 A) X - указател към таблица с параметри 1b - drive 1b - track 1b - head 1b - sector 1w - адрес на буфера EXPORT: А - код на грешката: bit 0 - write protected bit 1 - overrun bit 2 - bad CRC bit 3 - bad record bit 4 - bad address field bit 5 - seek error bit 6 - timeout bit 7 - bad FDC INT 18 - четене на символ от серийния вход (RSIN) IMPORT: няма EXPORT: А - прочетения символ C - error INT 19 - писане на символ на серийния изход (RSOUT) IMPORT: А - символ за извеждане EXPORT: няма INT 1A - вход от касетофон (CASSIN) IMPORT: няма EXPORT: X - буфер BA - дължина INT 1B - изход на касетофон (CASSOUT) IMPORT: X - буфер BA - дължина EXPORT: няма INT 1C - получаване на текущото време (GETTIME) IMPORT: няма EXPORT: B - часове А - минути Х - секунди и стотни INT 1D - задаване на текущото време (SETTIME) IMPORT: B - часове А - минути Х - секунди и стотни EXPORT: А = $FF - невалидно време INT 1E - получаване на текущата дата (GETDATE) IMPORT: няма EXPORT: В - ден А - месец Х - година INT 1F - задаване на текущата дата (SETDATE) IMPORT: В - ден А - месец Х - година EXPORT: A = $FF - невалидна дата INT 20 - четене на символ от STDIN (GETCHAR) IMPORT: няма EXPORT: А - прочетения символ INT 21 - четене на ред от STDIN (GETLINE) IMPORT: X - указател към буфера B - дължина на буфера, буфера трябва да е с 1 байт по-голям EXPORT: A - дължина на прочетения ред INT 22 - печат на символ върху STDOUT (PUTCHAR) IMPORT: А - символ за печат EXPORT: няма INT 23 - печат на стринг врху STDOUT (PUTLINE) IMPORT: X - указател към стринга EXPORT: няма INT 24 - печат на дума в десетичен формат (PUTDECW) IMPORT: X - думата за печат B - брой цифри EXPORT: няма INT 25 - печат на байт в шестнадесетичен формат (PUTHEXB) IMPORT: А - байта за печат EXPORT: няма INT 26 - печат на символ врху STDPRN (PRNCHAR) IMPORT: А - символ за печат (само за функция 2) B - функция: 0 - печат 1 - състояние 2 - инициализация EXPORT: A - състояние INT 27 - запазен за STDAUX IMPORT: A - символ B - функция 0 - read; 1 - write 2 - status; 3 - init; EXPORT: A - error INT 28 - умножение без знак на 8 битово * 8 битово число IMPORT: A, B - множители EXPORT: BA - резултат INT 29 - деление без знак на 16 битово число на 16 битово число (DIVU) IMPORT: X - делимо BA - делител EXPORT: X - частно BA - остатък, ако BA = $FFFF, то грешка: division by zero INT 2A - алокиране (запазване) на памет (ALLOC) IMPORT: B - изравняване: 0 - на граница на байт, 1 - на граница на дума (2 байта), 2 - на граница на дълга дума (4 байта), 3 - на граница на четворна дума (8 байта), 4 - на граница на параграф (16 байта), 5 - на граница на 32 байта, 6 - на граница на 64 байта, 7 - на граница на 128 байта, 8 - на граница на страница (256 байта) X - брой байтове EXPORT: X = 0 - неуспешно алокиране X <> 0 - указател към алокираната памет INT 2B - деалокиране (освобождаване) на памет (DEALLOC) IMPORT: X - указател за деалокиране (паметта до този адрес се освобождава) EXPORT: X - размер на деалокирана памет INT 2C - маркиране на резидентна област (MARK_RESIDENT) IMPORT: няма EXPORT: няма (Цялата памет над текущата стойност на указателя HIMEM, се маркира като резидентна.) INT 2D - местене на памет (MOVE) IMPORT: Х - указател Х1 - source адрес Х2 - target адрес ВА - дължина EXPORT: Х - брой преместени байтове INT 2E - получаване на адреса на интеръпт (GET_VECTOR) IMPORT: А - номер на интеръпта EXPORT: B - страница (валидни са младшите 4 бита) X - адрес INT 2F - задаване на адреса на интеръпт (PUT_VECTOR) IMPORT: А - номер на интеръпта B - страница (валидни са младшите 4 бита) X - адрес EXPORT: няма INT 30 - call MONITOR INT 31 - call BASIC interpreter INT 32 - запазен INT 33 - запазен (play) INT 34 - запазен (draw) INT 35 - PRESERVE MEMORY IMPORT: BA - size (must be less than returned by INT36) EXPORT: X - start address (base) of preserved memory BA - actual size, check against 0 for error INT 36 - GET FREE MEMORY EXPORT: BA - size (limited by SP) X - start address (base) INT 37 - CHAIN INTERRUPT - интеръпта е предвиден да се използва в тялото на някакъв интеръпт, предава параметрите с който е бил повикан този интеръпт на chain адреса (от променливите SWIC, SWIX, SWIB и SWIA, които не трябва да са модифицарани, също така стека трябва да е валиден - като при завършване). Предвидено е да се използва само в случаите, когато интеръпт е бил подменен и има необходимост да се извика стария вектор, чийто адрес е бил запазен и сега се предава в регистрите BX. Действието е еквивалентно на безусловен преход. IMPORT: B - страница (валидни са младшите 4 бита) X - адрес SWIC, SWIX, SWIB, SWIA - съдържат оргиналните параметри EXPORT: зависи от интеръпта 3.2. Файлови функции: INT 38 - завършване на изпълнението на програма (TERMINATE) IMPORT: няма EXPORT: няма INT 39 - SYSTEM CALL IMPORT: X - command line ptr EXPORT: A - error code INT 3A - exit to UniDOS SHELL INT 3B - ARGC (PARAMCOUNT) EXPORT: A - argc INT 3C - ARGV (PARAMSTR) IMPORT: A - parameter no X - buffer (max 81 bytes) INT 3D - get error text IMPORT: A - error no X - buffer (max 81 bytes) INT 3E - запазен INT 3F - call Pascal Y-code interpreter (internal use) IMPORT: A - handle EXPORT: B - $FF if error in .PGM file else error level INT 40 - четене/писане на логически сектор IMPORT: А - операция: 1 - четене 2 - писане Х - указател към параметри 5 байта 1w - буфер 1b - устройство (0-А, 1-В, ...) 1w - логически сектор EXPORT: A - код на грешката INT 41 - версия на UniDOS BIOS (VERSION) IMPORT: няма EXPORT: ВА - версия INT 42 - Get first entry IMPORT: A - required attr mask B - invalid attr mask (bit 7 - disable wildcard) X - parameters 1w - FindFirst & FindNext table ptr 1w - dir entry buff. 1w - path EXPORT: A - error code INT 43 - Get next entry IMPORT: X - parameters 1w - FindFirst & FindNext table ptr 1w - dir entry buff. EXPORT: A - error code INT 44 - Set current drive IMPORT: A - new drivre EXPORT: A - error code INT 45 - Get current drive IMPORT: nothing EXPORT: A - current drive INT 46 - Set current directory IMPORT: X - buffer pointer (64 bytes) EXPORT: A - error code INT 47 - Get current directory IMPORT: A - drive X - buffer pointer (64 bytes) EXPORT: A - error code INT 48 - create subdirectory IMPORT: X - name pointer EXPORT: A - error code INT 49 - remove directory IMPORT: X - directory name EXPORT: A - error code INT 4A - open file IMPORT: A - open mode (1 - ro, 2 - wo, 3 - rw) X - parameters 1w - path/name 1w - buffer pointer EXPORT: A - error code B - file handle INT 4B - create file IMPORT: A - file attribute 0 - normal 1 - read-only 2 - hidden 4 - system X - parameters 1w - path/name 1w - buffer pointer EXPORT: A - error code B - file handle INT 4C - read file IMPORT: A - file handle X - parameters 1w - buffer pointer 1w - number of bytes EXPORT: A - error code X - number of bytes read INT 4D - write file IMPORT: A - file handle X - parameters 1w - buffer pointer 1w - number of bytes EXPORT: A - error code X - number of bytes written INT 4E - close file IMPORT: A - file handle EXPORT: A - error code INT 4F - delete file IMPORT: X - file name EXPORT: A - error code INT 50 - LSEEK IMPORT: A - file handle B - method 0 - from the begining 1 - from current pos 2 - from the end of file X - buff pointer (4 bytes) EXPORT: A - error code X - new position INT 51 - File size IMPORT: A - file handle X - buff_addr (4 bytes) EXPORT: size in buff INT 52 - Disk free space IMPORT: A - drive X - buff_addr EXPORT: space in buff INT 53 - Return file position IMPORT: A - handle X - buffer pointer (4 bytes) EXPORT: A - error code X^ - file position INT 54 - Get/set file attributes IMPORT: X - file path name B - file attributes A=0 - get attributes A=1 - set attributes EXPORT: A - error INT 55 - Get/set file date&time IMPORT: B - file handle X - buff_addr 1w - packed date 1w - packed time A=0 - get A=1 - set EXPORT: A - error INT 56 - Rename file IMPORT: X - table 1w - first name 1w - second name EXPORT: A - error INT 57 - ReadLn from text file IMPORT: A - file handle B - buffer length X - buffer address EXPORT: A - error INT 58 - Return EOF IMPORT: A - file handle B - mode: 0 - binary, 1 - text EXPORT: A - error code B <> 0 - EOF INT 59 - запазен (internal use - move file handle) INT 5A - запазен INT 5B - expand file handles max 32 handles IMPORT: A - _handles INT 5C - media_check IMPORT: A - drive EXPORT: A - error code INT 5D - Install block device driver IMPORT: B - page X - header addr EXPORT: A - error INT 5E - Install char device driver IMPORT: B - page X - header addr EXPORT: A - error INT 5F - запазен 3.3. Графични функции: INT 60 - Allocate graphic screen EXPORT: X - screen address INT 61 - disable graphic screen int 62 - internal use (reserved) INT 63 - return graphic screen base & size EXPORT: X - screen base BA - size INT 64 - set font page IMPORT: A - bits coressponding to fontpages B - memory_page (MSB of 32 bytes font addr) , if several fontpages used, subsequent memory pages used INT 65 - return current coordinates IMPORT: X - pointer to 4 bytes buffer INT 66 - graphic plot command IMPORT: A - command: 1 - move, 2 - plot, 3 - point, 4 - circle, $80 - rel X - pointer to coordinate couple (x,y) INT 67 - edit line IMPORT: A - display flag, if non zero default is displayed B - max length X - buffer pointer, [X] must be 0 for empty default EXPORT: A - length of line INT 68 - reserved INT 69 - reserved INT 6A - reserved INT 6B - reserved INT 6C - reserved INT 6D - current screen max rows & cols EXPORT: A - cols B - rows INT 6E - player IMPORT: X - pointer to music - 3-byte structures: note, duration, pause in units of 7 msec and 1-byte structures: FE-F8 tember, FF - end INT 6F - play subroutine IMPORT: A - note: 0 - pause, 1-72 B - tembre: 1-7 X - duration in units of 1.536 msec INT 70 Ў INT 7F - reserved 3.4. Описание на командите на програмата MONITOR Промптът (вж. Основни термини) на монитора е символа (ромб). При наличието на този символ и курсор след него могат да се въвеждат от клавитурата команди. Синтаксиса на командите е подобен на синтаксиса на командите на монитора на компютъра Правец-8. Всяка команда се от числен параметър и еднобуквена команда. Командата се изпълнява с натискане на клавиша {RETURN}. Под {адрес} се разбира четирицифрено шестнадесетично число. Указването на по-малко от 4 цифри означава, че числото се допълва с водещи нули, например A5 е еквивалентно на 00A5. Указването на повече от 4 цифри, предизвиква игнориране на старшите цифри. Под {стойност} се разбира двуцифрено шестнадесетично число. Въвеждането на по-малко от две цифри означава допълване с водещи нули, а въвеждането на повече цифри - игнориране на старшите. При въвеждане на няколко стойности, означава се с [ {стойност}] за разделител между стойностите се използва поне един интервал. Под {текст} се разбира произволна поредица от символи до натискане на клавиш {RETURN}. Използват се следните команди: 0..9, A..F - шестнадесетични цифри; {адрес}G - изпълнение на програмата от този адрес; пример: F000G {RETURN} {адрес}.{адрес}I - четене на файл от серийния вход. Първата дума е начален адрес, втората дума е краен. пример: I {RETURN} U - дизасемблира следващата интрукция {адрес}.{адрес}U - дизасемблира инструкциите между двата адреса; примери: F000U {RETURN} F000UUUU {RETURN} F000.F030U {RETURN} {адрес1}<{адрес2}.{адрес3}M - премества на адрес1 област от паметта от адрес2 до адрес3; пример: 1000<1300.15FFM {RETURN} {адрес}.{адрес}О - изпраща област от паметта по серийния изход; пример: F000.F200O {RETURN} P - дъмп на следващите 8 байта {адрес}.{адрес}P - дъмп на паметта между двата адреса; примери: F000P {RETURN} F000PPPP {RETURN} F000.F030P {RETURN} R - четене от касетофон на файл серийния вход; пример: R {RETURN} {адрес1}<{адрес2}.{адрес3}V - сравняване на паметта от адрес1 с паметта между адрес2 и адрес3, в резултат се отпечатва адреса на който има разлика, стойността му и стойността с която е сравняван; пример: F000<F010.F017V {RETURN} {адрес}.{адрес}W - изпраща област от паметта на касетофон; пример: F000.F200W {RETURN} {адрес}="{текст} - начало на стринг (до края на реда) {адрес}={стойн.}[ {стойн.}] - въвеждане на байтовете до края на реда; примери: F300:8F BA AB A4 A8 AD 31 {RETURN} F300:"Пълдин2 {RETURN} F300:8F BA AB "дин3 {RETURN} ? - печат на съдържанието на регистрите 4. ОРГАНИЗАЦИЯ НА ВХОДНО-ИЗХОДНАТА ОБЛАСТ Адресното пространство $E600-$E6FF е разделено на 8 области, всяка с размер по $20 байта. Обръщението на микропроцесора към адрес от тези области образува сигнал Device Select 0-7. В скоби след адреса е указана разрешената операция (Read или Write). 4.1. Сигнал DS0 Сигнал DS0 се използва от видеоконтролера СМ607. Използват се адресите: $E600 (W) - адресен регистър, $E601 (RW) - данни регистър. 4.2. Сигнал DS1 Сигнал DS1 се използва от PIA СМ602. Използват се адресите: $E628 (RW) - DRA, $E629 (RW) - DRB, $E62A (RW) - CRA, $E62B (RW) - CRB. Разпределението на битовете е следното: БИТ ПОСОКА ЗНАЧЕНИЕ -------------------------------------------------------------------------- PA in ASCII код на прочетения символ от клавитурата CA1 in строб на клавитурата CA2 out светодиод за CAPSLOCK PB0 out режим LAT/-КИР на клавитурата PB1 out видеорежим LORES/-MIDRES PB2 out видеорежим COLOR/-B&W PB3 out палитра за видеорежим MIDRES PB4 out палитра за видеорежим MIDRES PB5 out видеорежим GRAF/-TEXT PB6 out касетофон и сериен изход PB7 in касетофон и сериен вход CB1 in 50 Hz CB2 out говорител 4.3. Сигнал DS5 Сигнал DS5 е предвиден да се използва за контролера за принтер. 4.4. Сигнал DS6 Сигнал DS5 се използва от контролера на флопи-дисковото устройство. Използват се адресите: $E6C0 (W) - регистър (4 бита) за управление на режима: бит 0 - -RESET бит 1 - TC бит 2 - drive select бит 3 - motor on $E6D0 (R) - статус регистър на СМ609; $E6D1 (RW) - данни регистър на СМ609. 4.5. Сигнал DS7 Сигнал DS7 се използва за управление на страничния ROM. Използва се адреса: $E6F0 (RW) - регистър (4 бита) за номер на страницата. ПРЕДУПРЕЖДЕНИЕ: Тази информация се дава за пълнота. Директното (не чрез операционната система) обръщение към входно-изходната област не се препоръчва и може да има неприятни последици. 5. Кодове 5.1. Символен набор 3U1 ------T---T---T---T---T---T---T---T---T---T---T---T---T---T---T---T---¦ L L L L L L L L L L L L L L L L L L L + L$00L$10L$20L$30L$40L$50L$60L$70L$80L$90L$A0L$B0L$C0L$D0L$E0L$F0L L L L L L L L L L L L L L L L L L L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L 0 LNULLDLEL SPL 0 L @ L P L ` L p L А L Р L а L р L L L ¦ L - L Ё L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L 1 LSOHLDC1L ! L 1 L A L Q L a L q L Б L С L б L с L + L T L - L ё L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L 2 LSTXLDC2L " L 2 L B L R L b L r L В L Т L в L т L T L T L - L Є L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L 3 LETXLDC3L # L 3 L C L S L c L s L Г L У L г L у L + L L L ¦ L є L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L 4 LEOTLDC4L $ L 4 L D L T L d L t L Д L Ф L д L ф L - L L L + L Ї L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L 5 LENQLNAKL % L 5 L E L U L e L u L Е L Х L е L х L + L - L ¦ L ї L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L 6 LACKLSYNL & L 6 L F L V L f L v L Ж L Ц L ж L ц L ¦ L г L ¦ L Ў L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L 7 LBELLETBL ' L 7 L G L W L g L w L З L Ч L з L ч L ¦ L + L ¬ L ў L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L 8 L BSLCANL ( L 8 L H L X L h L x L И L Ш L и L ш L L L + L ¬ L ° L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L 9 L HTL EML ) L 9 L I L Y L i L y L Й L Щ L й L щ L г L - L ¦ L L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L A L LFLSUBL * L : L J L Z L j L z L К L Ъ L к L ъ L ¦ L - L ¦ L · L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L B L VTLESCL + L ; L K L [ L k L { L Л L Ы L л L ы L T L - L ¬ L v L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L C L FFL FSL , L < L L L \ L l L | L М L Ь L м L ь L ¦ L - L - L № L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L D L CRL GSL - L = L M L ] L m L } L Н L Э L н L э L = L ¦ L - L ¤ L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L E L SOL RSL . L > L N L ^ L n L ~ L О L Ю L о L ю L + L ¦ L - L ¦ L +-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---L L F L SIL USL / L ? L O L _ L o LDELL П L Я L п L я L ¦ L - L ¬ L L L-----+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---- 2U0 5.2. Клавитура 3¤U1 --------T-------T-------T-------T-------T-------T-------T-------T-------T-------T-------T-------T-------T-------T-------T-------¦ L L L L L L L L L L L L L L L L L L Esc L F1 L F2 L F3 L F4 L F5 L F6 L F7 L F8 L F9 L F10 L F11 L F12 L Home L End L Ins L L L L L L L L L L L L L L L L L L L-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------- --------T-------T-------T-------T-------T-------T-------T-------T-------T-------T-------T-------T-------T-------T-------T-------¦ L ! L @ ? L # + L $ " L % L ^ = L & : L * / L ( _ L ) - L _ I L + V L | L L L L L L L L L L L L L L L L L L Del L Кирил L Reset L L 1 L 2 L 3 L 4 L 5 L 6 L 7 L 8 L 9 L 0 L - L = . L \ Ы L L L L ----+---T---+---T---+---T---+---T---+---T---+---T---+---T---+---T---+---T---+---T---+---T---+---T---+-------+-------+---T---+---T---- L L Q ; L W L E L R L T L Y L U L I L O L P L ~ L L L L Tab L L L L L L L L L L L L Enter L L^ L L L , L У L Е L И L Ш L Щ L К L С L Д L З L ` Ц L L L L-T-----+-T-----+-T-----+-T-----+-T-----+-T-----+-T-----+-T-----+-T-----+-T-----+-T-----+-T-----+-T-------T-------T-----+-T-----+-¦ L L A L S L D L F L G L H L J L K L L L : L " L { ( L } ) L L L L Ctrl L L L L L L L L L L L L L L <-- L --> L L L Ь L Я L А L О L Ж L Г L Т L Н L В L ; М L ' Ч L [ L ] L L L +-------+---T---+---T---+---T---+---T---+---T---+---T---+---T---+---T---+---T---+---T---+---T---+-------+---T---+---T---+---T---- L L Z L X L C L V L B L N L M L < L > L ? L L L L L Shift L L L L L L L L L L L Shift L Caps L Lv L L L Ю L Й L Ъ L Э L Ф L Х L П L , Р L . Л L / Б L L L L L-----------+T------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------T-------+-------+-------- L L L L L L L--------------------------------------------------------------------------------------- 2U0 5.2.1. Буквено-цифрови клавиши Всички буквено-цифрени клавиши генерират код в интервала $00/000 Ў $BF/191, съвпадащ си с ASCII кода на символа (вж. таблицата Символен набор). 5.2.2. Други клавиши (управляващи, функционални) Клавишите за управление (редактиране) и функционалните генерират код в интервала $C0/192 Ў $FE/254, съгласно следната таблица. 3U1 --------------------T-------T-------T-------¦ L L L L L L К Л А В И Ш L L shift LcontrolL L L L L L +-------------------+-------+-------+-------L L Esc L$1B/027L$1B/027L$1B/027L +-------------------+-------+-------+-------L L F1 L$C9/201L$D5/213L$E1/225L +-------------------+-------+-------+-------L L F2 L$CA/202L$D6/214L$E2/226L +-------------------+-------+-------+-------L L F3 L$CB/203L$D7/215L$E3/227L +-------------------+-------+-------+-------L L F4 L$CC/204L$D8/216L$E4/228L +-------------------+-------+-------+-------L L F5 L$CD/205L$D9/217L$E5/229L +-------------------+-------+-------+-------L L F6 L$CE/206L$DA/218L$E6/230L +-------------------+-------+-------+-------L L F7 L$CF/207L$DB/219L$E7/231L +-------------------+-------+-------+-------L L F8 L$D0/208L$DC/220L$E8/232L +-------------------+-------+-------+-------L L F9 L$D1/209L$DD/221L$E9/233L +-------------------+-------+-------+-------L L F10 L$D2/210L$DE/222L$EA/234L +-------------------+-------+-------+-------L L F11 L$D3/211L$DF/223L$EB/235L +-------------------+-------+-------+-------L L F12 L$D4/212L$E0/224L$EC/236L +-------------------+-------+-------+-------L L Tab L$ED/237L$EE/238L$ED/237L +-------------------+-------+-------+-------L L Backspace L$7F/127L$7F/127L$EF/239L +-------------------+-------+-------+-------L L Enter L$C0/192L$C0/192L$F0/240L +-------------------+-------+-------+-------L L Left_arrow L$C1/193L$C5/197L$F1/241L +-------------------+-------+-------+-------L L Right_arrow L$C2/194L$C6/198L$F2/242L +-------------------+-------+-------+-------L L Down_arrow L$C3/195L$C7/199L$F3/243L +-------------------+-------+-------+-------L L Up_arrow L$C4/196L$C8/200L$F4/244L +-------------------+-------+-------+-------L L Home (s-Left) L$C5/197L$C5/197L$F5/245L +-------------------+-------+-------+-------L L End (s-Right) L$C6/198L$C6/198L$F6/246L +-------------------+-------+-------+-------L L PageDown (s-Down) L$C7/199L$C7/199L$F7/247L +-------------------+-------+-------+-------L L PageUp (s-Up) L$C8/200L$C8/200L$F8/248L +-------------------+-------+-------+-------L L Delete L$F9/249L$F9/249L$F9/249L +-------------------+-------+-------+-------L L Insert L$FA/250L$FA/250L$FA/250L +-------------------+-------+-------+-------L L Lat/Кир L$FB/251L$FB/251L$FB/251L +-------------------+-------+-------+-------L L CapsLock L$FC/252L$FC/252L$FC/252L +-------------------+-------+-------+-------L L Pause (s-Space) L$FD/253L$FD/253L$FD/253L +-------------------+-------+-------+-------L L Break (c-Space) L$FE/254L$FE/254L$FE/254L L-------------------+-------+-------+-------- 2U0 Някои клавиши не съществуват на някои модели клавитури. Част от тях са еквивалентни на комбинацията посочена в скоби. Кода $FF/255 е невалиден. 6. ГРЕШКИ НА ОПЕРАЦИОННАТА СИСТЕМА _NO_ERROR = 0 _BAD_CMD = 1 _INV_DRV = 2 _WRT_PROT = 3 _ADDR_ERR = 4 _DTA_ERR = 5 _GENERAL_ERR = 6 _INV_SECTOR = 7 _NO_DEVICE = 8 _BAD_DESCR = 9 _FAT_ERROR = 10 _INV_PATH = 11 _INV_DIR = 12 _NO_HANDLE = 13 _ACC_DENIED = 14 _FILE_OPEN = 15 _INV_HANDLE = 16 _DISK_FULL = 17 _FILE_LOST = 18 _INV_NAME = 19 _DIR_FULL = 20 _DIR_EXIST = 21 _CUR_DIR = 22 ;atempt to delete current dir _DIR_NOT_EMPTY = 23 _BAD_POSITION = 24 _INV_FUNCTION = 25 _NOT_DISK_FILE = 26 _TOO_MANY_DRVRS = 27 _EOF = 200 _RESERVED_CLU = 201 _BAD_CLU = 202 _INV_NUM_PARMS = 150 _FILE_TOO_LONG = 151 7. УПРАВЛЯВАЩИ СИМВОЛИ НА КОНЗОЛАТА: $07 - bell $08 - backspace - връща курсора една позиция назад $09 - tab - мести курсора на следващата кратна на 8 позиция $0A - linefeed - мести курсора в началото на следващия ред $0C - formfeed - мести курсора в началото на нова страница (изчиства екрана) $0D - carriage return - мести курсора в началото на текущия ред $18 - cancel - изтрива до края на реда $1B - escape - следващия символ се печати като нормален независимо какъв е $1Е - (gotoxy) - следващите два символа указват новата хоризонтална и вертикална позиция, увеличена с $20, например отпечатването на следните три символи: $1Е $28 $25 - праща курсора на 8 колона, 5 ред. 8. ОСНОВНИ ТЕРМИНИ: адрес (address) - номер на клетка от паметта, микропроцесора СМ601 може да се обръща към 65536 клетки, номерират се с $0000 до $FFFF; байт (byte) - съвкупност от 8 бита, обем на 1 клетка от паметта, единица за количество памет, в един байт могат да се запишат 256 различни стойности; бит (bit) - елементарна единица за информация, определяща две състояния 0 и 1; вектор (vector) - начален адрес в паметта, съдържаща инструкции на микропроцесора ; дума (word) - съвкупност от 16 бита или 2 байта, в една дума могат да се запишат 65536 различни стойности; интеръпт (interrupt) - прекъсване, биват хардуерни - IRQ, NMI и софтуерни - SWI. В този документ понятието интеръпт означава софтуерно прекъсване - изпълнение на инструкцията SWI, следвана от един байт, указващ номер на прекъсването; килобайт (kilobyte) - приблизително 1000 байта, единица за количество памет, по-точно 2^10 байта, 64 килобайта са 65536 или 2^16 байта; промпт (prompt) - известяващ символ или нялолко символа, указващ например коя системна програма се изпълнява в момента; регистър (register) - един от регистрите на микропроцесора: акумулатори - A и B, индексен - X, на състоянието - P, указател на стека - SP и програмен брояч - PC; стринг (string) - поредица от символи, завършваща с байт със стойност $00; указател (pointer) - начален адрес в паметта, съдържаща данни; шестнадесетична цифра (hex digit) - цифра в бройна система с основа 16, използват се цифрите 0 до 9 и буквите A до F;