diff --git a/.gitignore b/.gitignore index 76f9d8a..5244575 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ *.bak *.lst *.tmp +*.sh .idea/ +src/.idea/ \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index ac35241..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..fd26e1b --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# Эмулятор персонального компьютера Океан-240.2 + +![Icon](img/IconBig.png?raw=true "AppIcon") + +## Зачем? + +Эмулятор был разработан для удобства реверс-инжененринга программ монитора и приложений для этого старого компьютера. +Поэтому и имеет такой минималистичный интерфейс. + +Если нужен более точный эмулятор Океана-240.2 и других компьютеров на безе процессора КР580ВМ80, рекомендую проект [Emu80](https://emu80.org/). + +## Особенности реализации + +- Микросхемы КР580ВВ55, ВИ53, ВИ51, ВТ59, КР1818ВГ93 эмулируются в степени, достаточной для работы операционной системы и монитора. +- В отличие от оригинала, который использует CPU КР580ВМ80, в эмуляторе использована эмуляция Z80. + Эмулятор Z80 у меня уже был написан, поэтому использовал его, возможно, позже, обрежу его до i8080. + Из за меньшего количества тактов у некоторых инструкций Z80, эмуляция работает несколько быстрее оригинала. +- Эмулируются 2 дисковода с дисками 720К, такой вариант используется с CP/M и Монитором R8. +- Работает под современными ОС Windows и Linux. Используется фреймворк [Fyne](https://fyne.io/), что позволяет скомпилировать код и под другие платформы, но я не пробовал. +- Поддерживает ZRCP - протокол отладки эмулятора [ZEsarUX](https://github.com/chernandezba/zesarux)). Это позволяет использовать среду разработки VSCode с плагином DeZog +для отладки исходного кода прямо в эмуляторе. + +## Возможности отладки + +Работают все функции плагина Dezog и протокола: [документация плагина](https://github.com/maziac/DeZog/blob/main/documentation/Usage.md#remote-types). + +- Выполнение кода по шагам, в том числе и назад (с ограничениями плагина DeZog) +- Просмотр и изменение памяти +- Просмотр и изменение значения регистров процессора +- Условные и безусловные брейкпоинты +- ASSERTION - остановка по несоблюдению указанного условия +- WPMEM - остановка при обращении к указанным ячейкам памяти (можно указать тип обращения r|w|rw) +- CodeCoverage - в коде, цветом помечаются строки, выполненные процессором. + +![Debug](img/Debug.jpg?raw=true "Debug in VSCode") + +Можно отлаживать код и без VSCode, подключившись телнетом к порту отладчика, по умолчанию это localhost:10001, далее, можно передавать отладчику команды. +Их список доступен по команде help. + + telnet localhost 10001 + +### Список доступных команд отладчика + + __about__ Shows about message + __clear-membreakpoints__ Clear all memory breakpoints + __close-all-menus__ Close all visible dialogs + __cpu-code-coverage__ Sets cpu code coverage parameters + __cpu-history__ Runs cpu history actions + __cpu-step__ Run single opcode cpu step + __disable-breakpoint__ Disable specific breakpoint + __disable-breakpoints__ Disable all breakpoints + __disassemble__ Disassemble at address + __enable-breakpoint__ Enable specific breakpoint + __enable-breakpoints__ Enable breakpoints + __enter-cpu-step__ Enter cpu step to step mode + __evaluate__ Evaluate expression + __exit-cpu-step__ Exit cpu step to step mode + __extended-stack__ Sets extended stack parameters, which allows you to see what kind of values are in the stack + __get-cpu-frequency__ Get cpu frequency in HZ + __get-current-machine__ Returns current machine name + __get-machines__ Returns list of emulated machines + __get-membreakpoints__ Get memory breakpoints list + __get-memory-pages__ Returns current state of memory pages + __get-os__ Shows emulator operating system + __get-registers__ Get CPU registers + __get-tstates-partial__ Get the t-states partial counter + __get-tstates__ Get the t-states counter + __get-version__ Shows emulator version + __hard-reset-cpu__ Hard resets the machine + __help__ Shows help screen or command help + __hexdump__ Dumps memory at address, showing hex and ascii + __load-binary__ Load binary file "file" at address "addr" with length "len", on the current memory zone + __quit__ Closes connection + __read-memory__ Dumps memory at address + __reset-tstates-partial__ Resets the t-states partial counter + __run__ Run cpu when on cpu step mode + __save-binary__ Save binary file "file" from address "addr" with length "len", from the current memory zone + __set-breakpoint__ Sets a breakpoint at desired index entry with condition + __set-breakpointaction__ Sets a breakpoint action at desired index entry + __set-breakpointpasscount__ Set pass count for breakpoint + __set-debug-settings__ Set debug settings on remote command protocol + __set-machine__ Set machine + __set-membreakpoint__ Sets a memory breakpoint starting at desired address entry for type + __set-register__ Changes register value + __snapshot-load__ Loads a snapshot + __snapshot-save__ Saves a snapshot + __write-memory__ Writes a sequence of bytes starting at desired address on memory + __write-port__ Writes value at port diff --git a/bin/2048.com b/bin/2048.com deleted file mode 100644 index 0a05bf0..0000000 Binary files a/bin/2048.com and /dev/null differ diff --git a/bin/ANTIX.BAS b/bin/ANTIX.BAS deleted file mode 100644 index af415e9..0000000 --- a/bin/ANTIX.BAS +++ /dev/null @@ -1,27 +0,0 @@ -10 CLS 0:SCRN 4,3:COLOR 1:P=2:R=1:C=210:D=120:E=40:F=10:INPUT N -20 CURS 40,10:RECT 211,120:X=127:Y=120:COLOR 1:A=40:B=30:B1=20:A1=80:P1=2:R1=2 -30 CURS X,Y:PLOT X,Y -40 A$=INKEY$ -50 IF A=>C THEN P=-N -55 IF A1=>C THEN P1=-N -60 IF B=>D THEN R=-N -65 IF B1=>D THEN R1=-N -70 IF A<=E THEN P=N -75 IF A1<=E THEN P1=N -80 IF B<=F+N THEN R=N -85 IF B1<=F+N THEN R1=N -90 COLOR 1:CURS A,B:PLOT A,B:A=A+P:B=B+R:COLOR 3 -100 CURS A,B:PLOT A,B:COLOR 1:CURS A1,B1:PLOT A1,B1 -105 A1=A1+P1:B1=B1+R1:COLOR 3:CURS A1,B1:PLOT A1,B1 -110 CURS X,Y -120 IF A$=CHR$(48) THEN 160:REM *** Y *** -130 IF A$=CHR$(54) THEN 170:REM *** => *** -140 IF A$=CHR$(53) THEN 180:REM *** ^ *** -150 IF A$=CHR$(52) THEN 190 ELSE 40:REM *** <= *** -160 IF Y=F GOTO 210 ELSE Y=Y-N:GOTO 200 -170 IF X=C GOTO 40 ELSE X=X+N:GOTO 200 -180 IF Y=D GOTO 40 ELSE Y=Y+N:GOTO 200 -190 IF X=E GOTO 40 ELSE X=X-N -200 PLOT X,Y:GOTO 40 -210 IF C-X<=10 THEN 40 ELSE C=X-1:GOTO 200 - \ No newline at end of file diff --git a/bin/ASM.COM b/bin/ASM.COM deleted file mode 100644 index a63e5ae..0000000 Binary files a/bin/ASM.COM and /dev/null differ diff --git a/bin/DDT.COM b/bin/DDT.COM deleted file mode 100644 index 83f8603..0000000 Binary files a/bin/DDT.COM and /dev/null differ diff --git a/bin/DEMO.BAS b/bin/DEMO.BAS deleted file mode 100644 index eac7f73..0000000 --- a/bin/DEMO.BAS +++ /dev/null @@ -1,23 +0,0 @@ -10 CLS 0:SCRN 4,0:COLOR 2:CURS 255,120:PLOT 0,120 -20 COLOR 3:FOR I=0 TO 255:PLOT I,SIN(I/10)*100+120:NEXT -30 FOR I=255 TO 0 STEP -1:PLOT I,COS(I/10)*100+120:NEXT -40 COLOR 2:FOR I=0 TO 255:PLOT I,SIN(I/10)*100+120 -50 PLOT I,COS(I/10)*100+120:NEXT:A$=INPUT$(1) -60 CLS 8:SCRN 4,0:COLOR 2:CURS 255,120:PLOT 0,120 -70 COLOR 3:FOR I=0 TO 255:PLOT I,SIN(I/81)*100+120:NEXT -80 FOR I=0 TO 255:PLOT -I+255,COS(I/81)*100+120:NEXT -90 FOR I=0 TO 255:Y=TAN(I/81)*10+120:IF Y<0 THEN Y=0 -100 IF Y>255 THEN Y=255 -110 PLOT I,Y:NEXT:A$=INPUT$(1) -120 CLS 0:SCRN 4,0:COLOR 3 -130 CURS 50,50:PLOT 49,201:PLOT 201,201:PLOT 201,49:PLOT 49,49 -140 FOR I=50 TO 190 STEP 10:CURS 125,125:COLOR 0:PLOT 50,I -150 CURS 125,125:COLOR 1:PLOT 50,I+10:FOR J=0 TO 900:NEXT:NEXT -160 FOR I=50 TO 190 STEP 10:CURS 125,125:COLOR 0:PLOT I,200 -170 CURS 125,125:COLOR 1:PLOT I+10,200:FOR J=0 TO 900:NEXT:NEXT -180 FOR I=50 TO 190 STEP 10:CURS 125,125:COLOR 0:PLOT 200,-I+250 -190 CURS 125,125:COLOR 1:PLOT 200,-I+240:FOR J=0 TO 900:NEXT -200 NEXT -210 FOR I=50 TO 190 STEP 10:CURS 125,125:COLOR 0:PLOT -I+250,50 -220 CURS 125,125:COLOR 1:PLOT -I+240,50:FOR J=0 TO 900:NEXT:NEXT - \ No newline at end of file diff --git a/bin/DUMP.COM b/bin/DUMP.COM deleted file mode 100644 index 03a77c3..0000000 Binary files a/bin/DUMP.COM and /dev/null differ diff --git a/bin/ED.COM b/bin/ED.COM deleted file mode 100644 index c84657a..0000000 Binary files a/bin/ED.COM and /dev/null differ diff --git a/bin/ED1.COM b/bin/ED1.COM deleted file mode 100644 index a0f0f54..0000000 Binary files a/bin/ED1.COM and /dev/null differ diff --git a/bin/FORMAT.COM b/bin/FORMAT.COM deleted file mode 100644 index 3ba1b10..0000000 Binary files a/bin/FORMAT.COM and /dev/null differ diff --git a/bin/GONKI.BAS b/bin/GONKI.BAS deleted file mode 100644 index f91b427..0000000 --- a/bin/GONKI.BAS +++ /dev/null @@ -1,22 +0,0 @@ -10 CLS 4:SCRN 0,3:PRINT "tarakanxi bega":A=RND -20 INPUT "na kakogo tarakana wy stawite ";T:IF T>5 GOTO 20 -30 PRINT CHR$(31);"******* tarakanxi bega *******" -40 PRINT "-----------------------------------------" -50 FOR I=1 TO 5:N(I)=2:NEXT:GOSUB 100 -60 PRINT "-----------------------------------------" -70 FOR I=1 TO 5+T:N(I)=N(I)+RND(A):OUT 242,8:OUT 242,0:NEXT -80 PRINT CHR$(12):PRINT:GOSUB 100:PRINT:C=C+1 -85 IF C/2=INT(C/2) THEN PRINT "!dawaj wasq!" ELSE PRINT " " -86 FOR I=1 TO 5 -90 IF N(I)=>39 THEN 150 ELSE NEXT:RANDOMIZE A:GOTO 70 -100 PRINT "1";TAB(N(1))"O<";TAB(42)"f" -110 PRINT "2";TAB(N(2))"O<";TAB(42)"i" -120 PRINT "3";TAB(N(3))"*<";TAB(42)"n" -130 PRINT "4";TAB(N(4))"O<";TAB(42)"i" -140 PRINT "5";TAB(N(5))"O<";TAB(42)"{":RETURN -150 PRINT CHR$(7);CHR$(7):PRINT -160 PRINT "wyigral tarakan so startowym nomerom ";I -170 FOR J=1 TO 2000:NEXT:IF I=T GOTO 190 ELSE PRINT "ha-ha" -180 PRINT "e}e razok poprobuem":GOTO 20 -190 PRINT "wa{a wzqla":GOTO 180 - \ No newline at end of file diff --git a/bin/JACK.COM b/bin/JACK.COM deleted file mode 100644 index 1383f38..0000000 Binary files a/bin/JACK.COM and /dev/null differ diff --git a/bin/L80.COM b/bin/L80.COM deleted file mode 100644 index 82f5866..0000000 Binary files a/bin/L80.COM and /dev/null differ diff --git a/bin/LIB.COM b/bin/LIB.COM deleted file mode 100644 index 45d7fb2..0000000 Binary files a/bin/LIB.COM and /dev/null differ diff --git a/bin/LINK.COM b/bin/LINK.COM deleted file mode 100644 index e188fb9..0000000 Binary files a/bin/LINK.COM and /dev/null differ diff --git a/bin/LOAD.COM b/bin/LOAD.COM deleted file mode 100644 index 0da8627..0000000 Binary files a/bin/LOAD.COM and /dev/null differ diff --git a/bin/M80.COM b/bin/M80.COM deleted file mode 100644 index d64eebd..0000000 Binary files a/bin/M80.COM and /dev/null differ diff --git a/bin/MAC.COM b/bin/MAC.COM deleted file mode 100644 index f49e835..0000000 Binary files a/bin/MAC.COM and /dev/null differ diff --git a/bin/MB.COM b/bin/MB.COM deleted file mode 100644 index 0608982..0000000 Binary files a/bin/MB.COM and /dev/null differ diff --git a/bin/MOVCPM.COM b/bin/MOVCPM.COM deleted file mode 100644 index 30f3701..0000000 Binary files a/bin/MOVCPM.COM and /dev/null differ diff --git a/bin/MUZA.BAS b/bin/MUZA.BAS deleted file mode 100644 index 403acae..0000000 --- a/bin/MUZA.BAS +++ /dev/null @@ -1,41 +0,0 @@ -10 DIM A%(1000):CLS 0:SCRN 0,0:COLOR 1:RECT 100,10 -20 COLOR 3:N%=1:PRINT CHR$(12);" MYUZIK SINTEZATOR" -30 A$=INKEY$:IF A$="" THEN 70 -40 A=(ASC(A$)-47):IF A>9 THEN 90 ELSE A%(N%)=A+1 -50 ON A GOSUB 200,210,220,240,260,280,310,340,380,420 -60 N%=N%+1:GOTO 30 -70 CURS 0,0:RECT N%*.1,10:IF N%=1 THEN 30 -80 FOR I=0 TO 20:NEXT I:A%(N%)=0:N%=N%+1:GOTO 30 -90 COLOR 1:IF N%=1 THEN N%=N1% ELSE N1%=N% -100 FOR N=1 TO N%:A=A%(N)-1 -110 L=L+1:L=L+1:IF A<0 THEN 140 -120 ON A GOSUB 200,210,220,240,260,280,310,340,380,420 -140 CURS 0,0:RECT N*.1,10 -150 NEXT N:GOTO 20 -200 FOR I=0 TO 70:E=2:OUT 242,8:OUT 242,0:NEXT:RETURN -210 FOR I=0 TO 50:E=1:E=2:OUT 242,8:OUT 242,0:NEXT:RETURN -220 FOR I=0 TO 40:OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0 -230 NEXT:RETURN -240 FOR I=0 TO 35:OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0 -250 OUT 242,8:OUT 242,0:NEXT:RETURN -260 FOR I=0 TO 30:OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0 -270 OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0:NEXT:RETURN -280 FOR I=0 TO 19:OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0 -290 OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0:OUT 242,8 -300 OUT 242,0:NEXT:RETURN -310 FOR I=0 TO 16:OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0 -320 OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0:OUT 242,8 -330 OUT 242,0:OUT 242,8:OUT 242,0:NEXT:RETURN -340 FOR I=0 TO 13:OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0 -350 OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0:OUT 242,8 -360 OUT 242,0:OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0 -370 NEXT:RETURN -380 FOR I=0 TO 10:OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0 -390 OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0:OUT 242,8 -400 OUT 242,0:OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0 -410 OUT 242,8:OUT 242,0:NEXT:RETURN -420 FOR I=0 TO 10:OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0 -430 OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0:OUT 242,8 -440 OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0:OUT 242,8 -450 OUT 242,8:OUT 242,0:OUT 242,8:OUT 242,0:NEXT:RETURN - \ No newline at end of file diff --git a/bin/PIP.COM b/bin/PIP.COM deleted file mode 100644 index 4b2ce4b..0000000 Binary files a/bin/PIP.COM and /dev/null differ diff --git a/bin/PLOT.BAS b/bin/PLOT.BAS deleted file mode 100644 index 9254dd0..0000000 --- a/bin/PLOT.BAS +++ /dev/null @@ -1,22 +0,0 @@ -10 REM **** LEXA CORP. *** DEMO PLOT **** -20 CLS 0:SCRN 4,0:N=5:COLOR 2:RECT 255,255:GOSUB 50 -30 FOR I=0 TO 255 STEP 1:COLOR 0:CURS 0,I:PLOT 255,I:NEXT -40 GOSUB 50:N=5:GOSUB 110:GOTO 80 -50 OUT 3,128:OUT 1,1:FOR I=1 TO 3000:NEXT:OUT 1,0:RETURN -60 FOR I=A TO B STEP N:COLOR I:CURS H,Z:PLOT X,I:NEXT:RETURN -70 FOR I=A TO B STEP N:COLOR I:CURS H,Z:PLOT I,Y:NEXT:RETURN -80 COLOR 1:P=5:GOSUB 130:GOSUB 50:P=1:GOSUB 130:GOSUB 50 -90 FOR I=255 TO 0 STEP -1:COLOR I:CURS 0,I:PLOT 255,I -100 OUT 242,8:OUT 242,0:NEXT:N=1:GOSUB 50:GOSUB 110:GOTO 30 -110 H=128:Z=128:A=0:B=255:X=0:GOSUB 60:Y=255:GOSUB 70:A=255 -120 B=0:N=-N:X=255:GOSUB 60:B=2:Y=0:GOSUB 70:GOSUB 50:RETURN -130 A=64:B=192:X=128:Y=220:GOSUB 180:X=255:Y=255:GOSUB 180 -140 A=192:B=64:P=-P:X=0:GOSUB 180:A=64:B=192:P=-P:X=255:Y=120 -150 GOSUB 180:A=192:B=64:P=-P:X=0:Y=120:GOSUB 180 -160 GOSUB 50:SCRN 0,0:COLOR 3:CURS 64,0:RECT 192,10 -170 CURS 85,230:GPRINT "SUPPER STAR":RETURN -180 FOR I=A TO B STEP P:COLOR I:CURS X,Y:PLOT I,0:NEXT:RETURN -190 FOR I=0 TO 255:COLOR I:CURS I,0:PLOT I,255:NEXT -R":RETURN -180 FOR I=A TO B STEP P:COLOR I:CURS X,Y:PLOT I,0:NEXT:RETURN -190 FOR I=0 TO \ No newline at end of file diff --git a/bin/PW.COM b/bin/PW.COM deleted file mode 100644 index 9837455..0000000 Binary files a/bin/PW.COM and /dev/null differ diff --git a/bin/RD.BAS b/bin/RD.BAS deleted file mode 100644 index f7bbfbd..0000000 --- a/bin/RD.BAS +++ /dev/null @@ -1,20 +0,0 @@ -10 REM **** Program READ **** -20 CLS 2:SCRN 0,0:INPUT "READ: FILE-1 OR MEMORY-0";R -30 DIM A$(32),N(16):PRINT CHR$(31):IF R=0 GOTO 110 -40 INPUT "FILE";FIL$:OPEN "I",#1,FIL$ -45 REM ** READ FILE ** -50 FOR I=1 TO 16:A$=INPUT$(1,#1):B=B+1 -60 A=ASC(A$):IF A<16 THEN PRINT "0"; ELSE PRINT HEX$(A); -70 IF A$>CHR$(32) THEN 80 ELSE A$=" " -80 IF A$>CHR$(127) AND A$127 AND N(I)<160 THEN N(I)=0 -160 IF CHR$(N(I))<" " THEN PRINT " "; ELSE PRINT CHR$(N(I)); -170 NEXT I - \ No newline at end of file diff --git a/bin/RES.COM b/bin/RES.COM deleted file mode 100644 index 1df3617..0000000 Binary files a/bin/RES.COM and /dev/null differ diff --git a/bin/STAT.COM b/bin/STAT.COM deleted file mode 100644 index 60c5484..0000000 Binary files a/bin/STAT.COM and /dev/null differ diff --git a/bin/SUBMIT.COM b/bin/SUBMIT.COM deleted file mode 100644 index 6cc609b..0000000 Binary files a/bin/SUBMIT.COM and /dev/null differ diff --git a/bin/SYSGEN.COM b/bin/SYSGEN.COM deleted file mode 100644 index 8842e35..0000000 Binary files a/bin/SYSGEN.COM and /dev/null differ diff --git a/bin/TET.COM b/bin/TET.COM deleted file mode 100644 index 2a6d6cf..0000000 Binary files a/bin/TET.COM and /dev/null differ diff --git a/bin/TM.COM b/bin/TM.COM deleted file mode 100644 index bc86fc5..0000000 Binary files a/bin/TM.COM and /dev/null differ diff --git a/bin/TYPE.COM b/bin/TYPE.COM deleted file mode 100644 index 9af4a5f..0000000 Binary files a/bin/TYPE.COM and /dev/null differ diff --git a/bin/WM.COM b/bin/WM.COM deleted file mode 100644 index a2ba008..0000000 Binary files a/bin/WM.COM and /dev/null differ diff --git a/bin/XSUB.COM b/bin/XSUB.COM deleted file mode 100644 index 15e86ab..0000000 Binary files a/bin/XSUB.COM and /dev/null differ diff --git a/bin/catchum.com b/bin/catchum.com deleted file mode 100644 index 27010be..0000000 Binary files a/bin/catchum.com and /dev/null differ diff --git a/bin/catchum.dat b/bin/catchum.dat deleted file mode 100644 index ca43d58..0000000 Binary files a/bin/catchum.dat and /dev/null differ diff --git a/bin/main.com b/bin/main.com deleted file mode 100644 index da16925..0000000 Binary files a/bin/main.com and /dev/null differ diff --git a/bin/split.py b/bin/split.py deleted file mode 100755 index ebe55c4..0000000 --- a/bin/split.py +++ /dev/null @@ -1,21 +0,0 @@ -#! /usr/bin/python3 -file_path = 'Disketa.okd' -sector = 1 -try: - with open(file_path, 'rb') as fi: - # Read the entire content of the file - while True: - # Read 4 bytes at a time - byte_chunk = fi.read(128) - if not byte_chunk: - break - sn = str(sector).zfill(5) - with open("sector-" + sn +'.dat', 'wb') as fo: - fo.write(byte_chunk) - fo.close() - sector += 1 - fi.close() -except FileNotFoundError: - print(f"Error: The file '{file_path}' was not found.") -except Exception as e: - print(f"An error occurred: {e}") diff --git a/bin/zexall.com b/bin/zexall.com deleted file mode 100644 index fa0e6ff..0000000 Binary files a/bin/zexall.com and /dev/null differ diff --git a/bin/zexdoc.com b/bin/zexdoc.com deleted file mode 100644 index 5cfd531..0000000 Binary files a/bin/zexdoc.com and /dev/null differ diff --git a/debug/zrcp/zrcp.go b/debug/zrcp/zrcp.go deleted file mode 100644 index 33e0dd2..0000000 --- a/debug/zrcp/zrcp.go +++ /dev/null @@ -1,849 +0,0 @@ -package zrcp - -import ( - "bufio" - "errors" - "fmt" - "io" - "net" - "okemu/config" - "okemu/debug" - "okemu/debug/breakpoint" - "okemu/okean240" - "okemu/z80" - "okemu/z80/dis" - "os" - "strings" - //"okemu/logger" - "strconv" - - log "github.com/sirupsen/logrus" -) - -type ZRCP struct { - port string - config *config.OkEmuConfig - debugger *debug.Debugger - disassembler *dis.Disassembler - computer *okean240.ComputerType - conn net.Conn - reader *bufio.Reader - writer *bufio.Writer - params string - //cmd *Command -} - -func NewZRCP(config *config.OkEmuConfig, debug *debug.Debugger, disassm *dis.Disassembler, comp *okean240.ComputerType) *ZRCP { - return &ZRCP{ - port: config.Debugger.Host + ":" + strconv.Itoa(config.Debugger.Port), - debugger: debug, - disassembler: disassm, - computer: comp, - } -} - -// SetupTcpHandler Setup TCP listener, handle connections -func (p *ZRCP) SetupTcpHandler() { - l, err := net.Listen("tcp4", p.port) - if err != nil { - fmt.Println(err) - return - } - - defer func(l net.Listener) { - err := l.Close() - if err != nil { - log.Warnf("Error closing listener connection %v", err) - } - }(l) - log.Infof("Ready for debugger connections on %s", p.port) - for { - var err error - p.conn, err = l.Accept() - if err != nil { - log.Errorf("Accept connection: %v", err) - return - } - go p.handleConnection() - } - -} - -// Receive messages, split to strings and parse -func (p *ZRCP) handleConnection() { - p.reader = bufio.NewReader(p.conn) - p.writer = bufio.NewWriter(p.conn) - - if !p.writeWelcomeMessage() { - return - } - for { - str, err := p.reader.ReadString('\n') - if err != nil { - if err == io.EOF { - break - } else { - log.Errorf("TCP error: %v", err) - p.debugger.SetStepMode(false) - return - } - } - if !p.handleCommand(str) { - log.Debug("Closing connection") - p.writeResponseMessage(quitResponse) - break - } - //byteBuffer.WriteByte(b) - } - p.debugger.SetStepMode(false) - err := p.conn.Close() - if err != nil { - log.Warnf("Can not close socket: %v", err) - } -} - -//var activeWriter *bufio.Writer = nil - -func (p *ZRCP) writeWelcomeMessage() bool { - return p.writeResponseMessage(welcomeMessage) -} - -func (p *ZRCP) writeResponseMessage(message string) bool { - if message == "-" { - return true - } - prompt := emptyResponse - if p.debugger.StepMode() { - prompt = inCpuStepResponse - } - - _, err := p.writer.WriteString(message + prompt) - if err != nil { - log.Errorf("TCP write error: %v", err) - return false - } - err = p.writer.Flush() - if err != nil { - log.Errorf("TCP flush error: %v", err) - return false - } - return true -} - -func (p *ZRCP) writeMessage(message string) bool { - _, err := p.writer.WriteString(message) - if err != nil { - log.Errorf("TCP error: %v", err) - return false - } - err = p.writer.Flush() - if err != nil { - log.Errorf("TCP error: %v", err) - return false - } - return true -} - -// HandleCommand HandleLogLine Parse log line(s) and send it to redis -func (p *ZRCP) handleCommand(str string) bool { - str = strings.TrimSpace(str) - if str == "" { - return false - } - log.Debugf("Command: '%s'", str) - - pos := strings.Index(str, " ") - cmd := str - p.params = "" - - if pos > 1 { - cmd = str[:pos] - p.params = strings.TrimSpace(str[pos+1:]) - } - var err error - var resp string - - if cmd == "quit" { - return false - } - - handler, ok := commandHandlers[cmd] - if ok { - resp, err = handler(p) - if err != nil { - log.Errorf("%v", err) - p.writeResponseMessage(err.Error()) - } else { - p.writeResponseMessage(resp) - } - } else { - log.Debugf("Unhandled Command: %s", str) - p.writeResponseMessage("") - } - return true -} - -type CommandHandler func(zrcp *ZRCP) (string, error) - -var commandHandlers = map[string]CommandHandler{ - "about": (*ZRCP).handleAbout, - "clear-membreakpoints": (*ZRCP).handleClearMemBreakpoints, - "close-all-menus": (*ZRCP).handleEmptyHandler, - "cpu-code-coverage": (*ZRCP).handleCPUCodeCoverage, - "cpu-history": (*ZRCP).handleCPUHistory, - "cpu-step": (*ZRCP).handleCpuStep, - "disable-breakpoint": (*ZRCP).handleDisableBreakpoint, - "disable-breakpoints": (*ZRCP).handleDisableBreakpoints, - "disassemble": (*ZRCP).handleDisassemble, - "enable-breakpoint": (*ZRCP).handleEnableBreakpoint, - "enable-breakpoints": (*ZRCP).handleEnableBreakpoints, - "enter-cpu-step": (*ZRCP).handleEnterCPUStep, - "exit-cpu-step": (*ZRCP).handleExitCPUStep, - "extended-stack": (*ZRCP).handleExtendedStack, - "get-cpu-frequency": (*ZRCP).handleGetCPUFrequency, - "get-current-machine": (*ZRCP).handleGetCurrentMachine, - "get-registers": (*ZRCP).handleGetRegisters, - "get-tstates-partial": (*ZRCP).handleGetTStatesPartial, - "get-version": (*ZRCP).handleGetVersion, - "hard-reset-cpu": (*ZRCP).handleHardResetCPU, - "load-binary": (*ZRCP).handleLoadBinary, - "read-memory": (*ZRCP).handleReadMemory, - "reset-tstates-partial": (*ZRCP).handleResetTStatesPartial, - "run": (*ZRCP).handleRun, - "set-breakpoint": (*ZRCP).handleSetBreakpoint, - "set-breakpointaction": (*ZRCP).handleEmptyHandler, - "set-breakpointpasscount": (*ZRCP).handleSetBreakpointPassCount, - "set-debug-settings": (*ZRCP).handleEmptyHandler, - "set-membreakpoint": (*ZRCP).handleSetMemBreakpoint, - "set-register": (*ZRCP).handleSetRegister, - "snapshot-load": (*ZRCP).handleSnapshotLoad, - "snapshot-save": (*ZRCP).handleSnapshotSave, -} - -func (p *ZRCP) handleCpuStep() (string, error) { - p.debugger.SetDoStep(true) // computer.Do() - text := p.disassembler.Disassm(p.computer.CPUState().PC) - return registersResponse(p.computer.CPUState()) + " TSTATES: " + strconv.Itoa(int(p.computer.TStatesPartial())) + "\n" + text, nil -} - -func (p *ZRCP) handleRun() (string, error) { - p.writeMessage(runUntilBPMessage) - p.debugger.SetRunMode(true) - return "-", nil -} - -func (p *ZRCP) handleDisassemble() (string, error) { - return p.disassemble(p.params), nil -} - -func convertToUint16(s string) (uint16, error) { - v := strings.TrimSpace(strings.ToUpper(s)) - base := 0 - if strings.HasSuffix(v, "H") { - v = strings.TrimSuffix(v, "H") - base = 16 - } - a, e := strconv.ParseUint(v, base, 16) - return uint16(a), e -} - -func (p *ZRCP) SetMemBreakpoint(param string) string { - param = strings.TrimSpace(param) - params := strings.Split(param, " ") - if len(params) < 1 { - return "error, not enough parameters" - } - address, err := convertToUint16(params[0]) - if err != nil { - return "error, illegal address: '" + params[0] + "'" - } - t := uint16(3) - // if has type - if len(params) > 1 { - t, err = convertToUint16(params[1]) - if err != nil || t > 3 { - return "error, illegal access type: '" + params[1] + "'" - } - } - - s := uint16(1) - if len(params) > 2 { - s, err = convertToUint16(params[2]) - if err != nil { - return "error, illegal memory size: '" + params[2] + "'" - } - } - if p.debugger != nil { - p.debugger.SetMemBreakpoint(address, byte(t), s) - } - return "" -} - -func (p *ZRCP) handleCPUHistory() (string, error) { - params := strings.Split(p.params, " ") - if len(params) < 1 { - return "", errors.New("error, no parameters") - } - - cmd := params[0] - nspe := errors.New("error, no second parameter") - - switch cmd { - - case "enabled": - if len(params) < 2 { - return "", nspe - } - p.debugger.SetCpuHistoryEnabled(params[1] == "yes") - - case "clear": - p.debugger.CpuHistoryClear() - - case "started": - if len(params) < 2 { - return "", nspe - } - p.debugger.SetCpuHistoryStarted(params[1] == "yes") - case "set-max-size": - if len(params) != 2 { - return "", nspe - } - size, err := strconv.Atoi(params[1]) - if err != nil { - return "", errors.New("error, illegal number") - } - p.debugger.SetCpuHistoryMaxSize(size) - case "get": - if len(params) != 2 { - return "", nspe - } - index, err := strconv.Atoi(params[1]) - if err != nil { - return "", errors.New("error, illegal number") - } - history := p.debugger.CpuHistory(index) - if history != nil { - return p.stateResponse(history), nil - } - return "", errors.New("ERROR: index out of range") - case "ignrephalt": - // ignore - default: - return "", errors.New("error: unknown history command: " + cmd) - } - - return "", nil -} - -func (p *ZRCP) handleLoadBinary() (string, error) { - params := strings.Split(p.params, " ") - loadError := errors.New(respErrorLoading) - if len(params) < 2 { - return "", loadError - } - fn := strings.TrimSpace(params[0]) - if strings.HasPrefix(fn, "\"") { - fn = fn[1:] - } - if strings.HasSuffix(fn, "\"") && len(fn) > 1 { - fn = fn[:len(fn)-1] - } - offset, e := strconv.Atoi(params[1]) - length := 0 - if e != nil || offset < 0 || offset > 65535 || len(fn) == 0 { - return "", loadError - } - if len(params) > 2 { - l, e := strconv.ParseInt(params[2], 0, 32) - if e != nil { - length = 0 - } else { - length = int(l) - } - } - data, err := os.ReadFile(fn) - if err != nil { - return "", loadError - } - if length != 0 && len(data) != length { - log.Warnf("File size does not match the specified length. Expected %d bytes, got %d.", length, len(data)) - //return respErrorLoading - length = len(data) - } - if length == 0 { - length = len(data) - } - // Loaded Ok, move file to memory - for addr := uint16(0); addr < uint16(length); addr++ { - p.computer.MemWrite(addr+uint16(offset), data[addr]) - } - return "", nil -} - -func toW(hi, lo byte) uint16 { - return uint16(lo) | (uint16(hi) << 8) -} - -func iifStr(iif1, iif2 bool) string { - flags := []byte{'-', '-'} - if iif1 { - flags[0] = '1' - } - if iif2 { - flags[1] = '2' - } - return string(flags) -} - -// registersResponse Build string -// PC=%4x SP=%4x AF=%4x BC=%4x HL=%4x DE=%4x IX=%4x IY=%4x AF'=%4x BC'=%4x HL'=%4x DE'=%4x I=%2x -// R=%2x F=%s F'=%s MEMPTR=%4x IM0 IFF-- VPS: 0 MMU=00000000000000000000000000000000 -func registersResponse(state *z80.CPU) string { - resp := fmt.Sprintf(getRegistersResponse, - state.PC, - state.SP, - toW(state.A, state.Flags.GetFlags()), - toW(state.B, state.C), - toW(state.H, state.L), - toW(state.D, state.E), - state.IX, - state.IY, - toW(state.AAlt, state.FlagsAlt.GetFlags()), - toW(state.BAlt, state.CAlt), - toW(state.HAlt, state.LAlt), - toW(state.DAlt, state.EAlt), - state.I, - state.R, - state.Flags.GetFlagsStr(), - state.FlagsAlt.GetFlagsStr(), - state.MemPtr, - iifStr(state.Iff1, state.Iff2), - ) - log.Trace(resp) - return resp -} - -func (p *ZRCP) getNBytes(addr uint16, n uint16) string { - res := "" - for i := uint16(0); i < n; i++ { - b := p.computer.MemRead(addr + i) - res += fmt.Sprintf("%02X", b) - } - return res -} - -// stateResponse build string, represent history state -// PC=003a SP=ff46 AF=005c BC=174b HL=107f DE=0006 IX=ffff IY=5c3a AF'=0044 BC'=ffff HL'=ffff DE'=5cb9 I=3f R=78 -// IM0 IFF-- (PC)=2a785c23 (SP)=107f MMU=00000000000000000000000000000000 -func (p *ZRCP) stateResponse(state *z80.CPU) string { - resp := fmt.Sprintf(getStateResponse, - state.PC, - state.SP, - toW(state.A, state.Flags.GetFlags()), - toW(state.B, state.C), - toW(state.H, state.L), - toW(state.D, state.E), - state.IX, - state.IY, - toW(state.AAlt, state.FlagsAlt.GetFlags()), - toW(state.BAlt, state.CAlt), - toW(state.HAlt, state.LAlt), - toW(state.DAlt, state.EAlt), - state.I, - state.R, - iifStr(state.Iff1, state.Iff2), - p.getNBytes(state.PC, 4), - p.getNBytes(state.SP, 2), - ) - log.Trace(resp) - return resp -} - -func (p *ZRCP) handleSetRegister() (string, error) { - state := p.computer.CPUState() - params := strings.Split(p.params, "=") - if len(params) != 2 { - return "error", errors.New("invalid set register parameter") - } - val, e := strconv.Atoi(params[1]) - if e != nil { - return "error", errors.New("invalid set register value") - } - switch params[0] { - case "AF": - state.A = uint8(val >> 8) - state.Flags.SetFlags(uint8(val)) - case "BC": - state.B = uint8(val >> 8) - state.C = uint8(val) - case "DE": - state.D = uint8(val >> 8) - state.E = uint8(val) - case "HL": - state.H = uint8(val >> 8) - state.L = uint8(val) - // ------------------------------ - case "SP": - state.SP = uint16(val) - case "PC": - state.PC = uint16(val) - case "IX": - state.IX = uint16(val) - case "IY": - state.IY = uint16(val) - // ------------------------------ - case "AF'": - state.AAlt = uint8(val >> 8) - state.FlagsAlt.SetFlags(uint8(val)) - case "BC'": - state.BAlt = uint8(val >> 8) - state.CAlt = uint8(val) - case "DE'": - state.DAlt = uint8(val >> 8) - state.EAlt = uint8(val) - case "HL'": - state.HAlt = uint8(val >> 8) - state.LAlt = uint8(val) - - // ------------------------------ - case "A": - state.A = uint8(val) - case "F": - state.Flags.SetFlags(uint8(val)) - case "B": - state.B = uint8(val) - case "C": - state.C = uint8(val) - case "D": - state.D = uint8(val) - case "E": - state.E = uint8(val) - case "H": - state.H = uint8(val) - case "L": - state.L = uint8(val) - // ------------------------------ - case "A'": - state.AAlt = uint8(val) - case "F'": - state.FlagsAlt.SetFlags(uint8(val)) - case "B'": - state.BAlt = uint8(val) - case "C'": - state.CAlt = uint8(val) - case "D'": - state.DAlt = uint8(val) - case "E'": - state.EAlt = uint8(val) - case "H'": - state.HAlt = uint8(val) - case "L'": - state.LAlt = uint8(val) - // ------------------------------ - case "I": - state.I = uint8(val) - case "R": - state.R = uint8(val) - default: - log.Errorf("Unsupported set register parameter: %s", p.params) - } - p.computer.SetCPUState(state) - return registersResponse(p.computer.CPUState()), nil -} - -func (p *ZRCP) handleReadMemory() (string, error) { - params := strings.Split(p.params, " ") - if len(params) != 2 { - return "", errors.New("error, invalid read memory parameter") - } - offset, e := strconv.Atoi(params[0]) - if e != nil { - return "", errors.New("error, invalid number for address") - } - - size, e := strconv.Atoi(params[1]) - if e != nil { - return "", errors.New("error, invalid number for size") - } - resp := "" - for i := 0; i < size; i++ { - resp += fmt.Sprintf("%02X", p.computer.MemRead(uint16(offset)+uint16(i))) - } - log.Tracef("read memory 0x%04X, 0x%04X: %s", offset, size, resp) - return resp, nil -} - -func (p *ZRCP) getExtendedStack() (string, error) { - params := strings.Split(p.params, " ") - if len(params) < 2 { - return "", errors.New("error, will be 2 or 3 params") - } - size, err := strconv.Atoi(params[1]) - if err != nil || size < 0 || size > 65636 { - return "", errors.New("error, invalid size parameter") - } - - sp := p.computer.CPUState().SP - if len(params) == 3 { - psp, err := strconv.ParseUint(params[2], 10, 16) - if err != nil { - return "", errors.New("error, illegal number for SP") - } - sp = uint16(psp) - } - - resp := "" - spEnd := sp - uint16(size*2) - es, err := p.computer.ExtendedStack() - if err == nil { - for i := sp; i > spEnd; i -= 2 { - resp += fmt.Sprintf("%04XH %s\n", p.computer.MemRead(i), PushValueTypeName[es[i]]) - } - } - log.Tracef("extended-stack get: %s", resp) - return resp, err -} - -func (p *ZRCP) handleSetBreakpoint() (string, error) { - // 1 PC=0010Bh - params := strings.Split(p.params, " ") - if len(params) < 2 { - return "", errors.New("error, invalid parameters") - } - no, e := strconv.ParseUint(params[0], 0, 16) - if e != nil || no > breakpoint.MaxBreakpoints || no < 1 { - return "", errors.New("error, invalid breakpoint number") - } - - e = p.debugger.SetBreakpoint(uint16(no), p.params[len(params[0]):], 1) - if e != nil { - return "", errors.New("error, " + e.Error()) - } - return "", nil -} - -func typToString(typ uint8) string { - switch typ { - case 0: - return "D" - case 1: - return "R" - case 2: - return "W" - case 3: - return "R/W" - default: - return "x" - } -} - -func (p *ZRCP) BreakpointHit(number uint16, typ byte) { - if p.writer != nil { - pc := p.computer.CPUState().PC - res := p.disassembler.Disassm(pc) - msg := "" - if typ == 0 { - msg = p.debugger.BPExpression(number) - } else { - msg = fmt.Sprintf("MEM[%04X] %s", number, typToString(typ)) - } - rep := fmt.Sprintf("Breakpoint fired: %s\n%s", msg, res) - log.Debug(rep) - p.writeResponseMessage(rep) - } -} - -func (p *ZRCP) setBreakpointPassCount(param string) { - params := strings.Split(param, " ") - if len(params) != 2 { - log.Errorf("Set breakpoint passCount failed, expected 2 params, got %d", len(params)) - } - bpNo, err := strconv.Atoi(params[0]) - if err != nil || bpNo < 0 || bpNo > breakpoint.MaxBreakpoints { - log.Errorf("Invalid BP no.: %v", err) - } - passCount, err := strconv.Atoi(params[1]) - if err != nil || passCount < 0 || passCount > 65535 { - log.Errorf("Invalid BP passCount: %v", err) - } - p.debugger.SetBreakpointPassCount(uint16(bpNo), uint16(passCount)) -} - -func (p *ZRCP) disassemble(param string) string { - addr, e := strconv.ParseUint(param, 0, 16) - if e != nil { - log.Errorf("Invalid disassemble address: %s", param) - } - res := p.disassembler.Disassm(uint16(addr)) - log.Debug(res) - return res -} - -func (p *ZRCP) handleSnapshotSave() (string, error) { - e := p.computer.SaveSnapshot(strings.TrimSpace(p.params)) - if e != nil { - return "", errors.New("Error saving snapshot: " + e.Error()) - } - return "", nil -} - -func (p *ZRCP) handleSnapshotLoad() (string, error) { - e := p.computer.LoadSnapshot(strings.TrimSpace(p.params)) - if e != nil { - return "", errors.New("Error loading snapshot: " + e.Error()) - } - return "", nil -} - -func (p *ZRCP) handleGetTStatesPartial() (string, error) { - return strconv.FormatUint(p.computer.TStatesPartial(), 10), nil -} - -func (p *ZRCP) handleResetTStatesPartial() (string, error) { - p.computer.ResetTStatesPartial() - return "", nil -} - -func (p *ZRCP) handleEmptyHandler() (string, error) { - return "", nil -} - -func (p *ZRCP) handleAbout() (string, error) { - return aboutResponse, nil -} - -func (p *ZRCP) handleGetVersion() (string, error) { - return getVersionResponse, nil -} - -func (p *ZRCP) handleGetRegisters() (string, error) { - return registersResponse(p.computer.CPUState()), nil -} - -func (p *ZRCP) handleHardResetCPU() (string, error) { - p.computer.Reset() - return "", nil -} - -func (p *ZRCP) handleEnterCPUStep() (string, error) { - p.debugger.SetStepMode(true) - return "", nil -} - -func (p *ZRCP) handleExitCPUStep() (string, error) { - p.debugger.SetStepMode(false) - return "", nil -} - -func (p *ZRCP) handleGetCurrentMachine() (string, error) { - return getMachineResponse, nil -} - -func (p *ZRCP) handleClearMemBreakpoints() (string, error) { - p.debugger.ClearMemBreakpoints() - return "", nil -} - -func (p *ZRCP) handleSetMemBreakpoint() (string, error) { - resp := p.SetMemBreakpoint(p.params) - var err error - if len(resp) != 0 { - err = errors.New(resp) - } - return "", err -} - -func (p *ZRCP) handleEnableBreakpoints() (string, error) { - p.debugger.SetBreakpointsEnabled(true) - return "", nil -} - -func (p *ZRCP) handleDisableBreakpoints() (string, error) { - p.debugger.SetBreakpointsEnabled(false) - return "", nil -} - -func (p *ZRCP) setBreakpointState(enable bool) string { - no, e := strconv.Atoi(p.params) - if e != nil { - return fmt.Sprintf("Invalid breakpoint parameter: %s", p.params) - } - if enable && !p.debugger.BreakpointsEnabled() { - return "Error. You must enable breakpoints first" - } - p.debugger.SetBreakpointEnabled(uint16(no), enable) - return "" -} - -func (p *ZRCP) handleEnableBreakpoint() (string, error) { - resp := p.setBreakpointState(true) - var err error - if len(resp) != 0 { - err = errors.New(resp) - } - return "", err -} - -func (p *ZRCP) handleDisableBreakpoint() (string, error) { - resp := p.setBreakpointState(false) - var err error - if len(resp) != 0 { - err = errors.New(resp) - } - return "", err -} - -func (p *ZRCP) handleGetCPUFrequency() (string, error) { - return strconv.Itoa(int(p.computer.CPUFrequency())), nil -} - -func (p *ZRCP) handleSetBreakpointPassCount() (string, error) { - p.setBreakpointPassCount(p.params) - return "", nil -} - -func (p *ZRCP) handleExtendedStack() (string, error) { - params := strings.Split(p.params, " ") - if len(params) < 1 { - return "", errors.New("error, not enough params") - } - cmd := params[0] - if cmd == "get" { - return p.getExtendedStack() - } else if cmd == "enabled" { - if len(params) < 2 { - return "", errors.New("error, expected yes|no") - } - p.computer.SetExtendedStack(params[1] == "yes") - } else { - return "", errors.New("error, unknown sub-command: " + cmd) - } - return "", nil -} - -// handleCPUCodeCoverage Handle commands: -// cpu-code-coverage enabled yes -// cpu-code-coverage enabled no -// cpu-code-coverage clear -func (p *ZRCP) handleCPUCodeCoverage() (string, error) { - command := strings.Split(p.params, " ") - if len(command) < 1 { - return "", errors.New("error, not enough arguments") - } - cmd := command[0] - resp := "" - switch cmd { - case "enabled": - if len(command) < 2 { - return "", errors.New("error, not arguments for enabled [yas|no]") - } - p.computer.SetCodeCoverage(command[1] == "yes") - case "clear": - p.computer.ClearCodeCoverage() - case "get": - for addr, _ := range p.computer.CodeCoverage() { - resp += fmt.Sprintf("%04X ", addr) - } - } - return resp, nil -} diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..804c3c1 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,109 @@ +# Эмулятор персонального компьютера Океан-240.2 + +## Пример, кода для работы в среде VSCode. + +1. Установите VSCode +2. Установите плагин DeZog для возможности отладки исходного кода в эмуляторе okemu +3. Откройте в VSCode папку examples/hello +4. Запустите эмулятор okemu +5. Запустите отладку через меню Run -> Start debuging в VSCode. +6. Используйте инструменты отладки VSCode для выполнения кода, просмотра регистров процессора и состояния памяти и т.д. + +## Рекомендуемые плагины VSCode +- [mborik.z80-macroasm-vscode](https://github.com/mborik/z80-macroasm-vscode) - Раскраска синтаксиса ассемблера Z80, поддержка разных ассемблеров, переименование меток и т.п. +- [maziac.dezog](https://github.com/maziac/DeZog/) - Отладчик кода Z80 с помощью эмуляторов +- [maziac.hex-hover-converter](https://github.com/maziac/hex-hover-converter) - Перевод чисел в другие системы счисления при наведении курсора +- [maziac.z80-instruction-set](https://github.com/maziac/z80-instruction-set) - Подсказки по инструкциям Z80 при наведении курсора (коды, такты, влияние на флаги) + +## Пример файла .vscode/tasks.json +Конфигурация задачи для компиляции исходного кода ассемблером [sjasmplus](https://github.com/z00m128/sjasmplus) +```json +{ + "version": "2.0.0", + "tasks": [ + { + "label": "make (sjasmplus)", // так задача будет называться в меню Terminal -> Run task... VSCode + "type": "shell", + "command": "sjasmplus", + "args": [ + "--i8080", // используем только инструкции КР580ВМ80 + "--sld=main.sld", // генерируем файл с таблицей символов для отладчика + "--raw=main.obj", // сохраняем результат компиляции в двоичный файл + "--fullpath", + "main.asm" // основной файл исходного кода программы + ], + "problemMatcher": "$problem-matcher-sjasmplus", + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} +``` + +## Пример файла .vscode/launch.json +Конфигурация задачи для отладки исходного кода нашей программы с помощью эмулятора okemu. Эмулятор поддерживает подмножество протокола ZRCP (протокол отладки эмулятора [ZEsarUX](https://github.com/chernandezba/zesarux)). +Для отладки нужен плагин DeZog. Подробное описание настроек в [документации плагина](https://github.com/maziac/DeZog/blob/main/documentation/Usage.md#remote-types). + +```json +{ + "version": "0.2.0", + "configurations": [ + { + "type": "dezog", + "request": "launch", + "name": "Simulator", + "remoteType": "zrcp", // используем протокол ZRCP для соединения с okemu + "zrcp": { + "port": 10001, // порт, на котором, по умолчанию, отвечает отладчик okemu + // если эмулятор запущен на другом компьютере, нужно указать его имя или адрес в параметре "host" + }, + + "sjasmplus": [ + { + "path": "main.sld", // файл с символами для отладки, созданный при компиляции + }, + // ниже, исходники и файлы для отладки ОС и монитора Океана, если мы хотим видеть их исходный в VSCode в процессе отладки + // их можно убрать. Тогда при трассировке вызовов ОС и монитора мы будем видеть дизасм кода. + { + "path": "cpm/cpm.sld", + "srcDirs": [ + "cpm/" + ] + }, + { + "path": "mon/monitor.sld", + "srcDirs": [ + "mon/" + ] + } + ], + "smartDisassemblerArgs": { + "lowerCase": false + }, + "history": { + "reverseDebugInstructionCount": 20, // количество инструкций, которые можно шагнуть назад + "spotCount": 10, + "codeCoverageEnabled": true //true Если мы хотим видеть, какие участки кода нашего приложения выполнялись + }, + "startAutomatically": false, + "commandsAfterLaunch": [ + //"-rmv", // открыть окно с памятью, на которую указывают 16-разрядные регистры BC,DE,HL,IX,IY + "-mv 0x100 0x80" // открыть окно для просмотра памяти с адреса 100h размером 80h байт + ], + "rootFolder": "${workspaceFolder}", + "topOfStack": "stack", + "loadObjs": [ + { + "path": "main.obj", // Этот файл будет загружен в эмулятор + "start": "0x0100" // Файл будет загружен с адреса 100h + } + ], + "execAddress": "0x0100", // Загруженный код начнет выполняться с адреса 100h + "smallValuesMaximum": 513, + "tmpDir": ".tmp" + } + ] +} +``` diff --git a/examples/hello/.vscode/extensions.json b/examples/hello/.vscode/extensions.json new file mode 100644 index 0000000..1fdc4e8 --- /dev/null +++ b/examples/hello/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + "recommendations": [ + "maziac.asm-code-lens", + "maziac.dezog", + "maziac.hex-hover-converter", + "maziac.z80-instruction-set", + "maziac.sna-fileviewer" + ] +} diff --git a/examples/hello/.vscode/launch.json b/examples/hello/.vscode/launch.json new file mode 100644 index 0000000..fba2d05 --- /dev/null +++ b/examples/hello/.vscode/launch.json @@ -0,0 +1,60 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "dezog", + "request": "launch", + "name": "Simulator", + "remoteType": "zrcp", + "zrcp": { + "port": 10001, + }, + + "sjasmplus": [ + { + "path": "main.sld", + }, + + { + "path": "cpm/cpm.sld", + "srcDirs": [ + "cpm/" + ] + }, + { + "path": "mon/monitor.sld", + "srcDirs": [ + "mon/" + ] + } + ], + "smartDisassemblerArgs": { + "lowerCase": false + }, + // "disassemblerArgs": { + // "numberOfLines": 10 + // }, + "history": { + "reverseDebugInstructionCount": 20, + "spotCount": 10, + "codeCoverageEnabled": true + }, + "startAutomatically": false, + "commandsAfterLaunch": [ + //"-rmv", + "-mv 0x100 0x80" + ], + "rootFolder": "${workspaceFolder}", + "topOfStack": "stack", + "loadObjs": [ + { + "path": "main.obj", + "start": "0x0100" + } + ], + "execAddress": "0x0100", + "smallValuesMaximum": 513, + "tmpDir": ".tmp" + } + ] +} \ No newline at end of file diff --git a/examples/hello/.vscode/settings.json b/examples/hello/.vscode/settings.json new file mode 100644 index 0000000..6bc0b99 --- /dev/null +++ b/examples/hello/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "mcu-debug.debug-tracker-vscode.debugLevel": 1 +} \ No newline at end of file diff --git a/examples/hello/.vscode/tasks.json b/examples/hello/.vscode/tasks.json new file mode 100644 index 0000000..c0c2326 --- /dev/null +++ b/examples/hello/.vscode/tasks.json @@ -0,0 +1,23 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "make (sjasmplus)", + "type": "shell", + "command": "sjasmplus", + "args": [ + "--i8080", + "--sld=main.sld", + "--raw=main.obj", + "--fullpath", + "--lst", + "main.asm" + ], + "problemMatcher": "$problem-matcher-sjasmplus", + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} \ No newline at end of file diff --git a/examples/hello/README.md b/examples/hello/README.md new file mode 100644 index 0000000..4c2ec16 --- /dev/null +++ b/examples/hello/README.md @@ -0,0 +1,7 @@ +# Эмулятор персонального компьютера Океан-240.2 + +Простой пример программы для ОС CP/M. + +В папке .vscode прилагаются файлы, необходимые для настройки среды VSCode. + +Для компиляции используется [sjasmplus Z80 assembler](https://github.com/z00m128/sjasmplus). diff --git a/examples/hello/cpm/bdos.asm b/examples/hello/cpm/bdos.asm new file mode 100644 index 0000000..93232a2 --- /dev/null +++ b/examples/hello/cpm/bdos.asm @@ -0,0 +1,3042 @@ +; ======================================================= +; Ocean-240.2 +; CP/M BDOS at 0xC800:D5FF +; +; Disassembled by Romych 2025-09-09 +; ====================================================== + + INCLUDE "io.inc" + INCLUDE "equates.inc" + INCLUDE "ram.inc" + + IFNDEF BUILD_ROM + OUTPUT bdos.bin + ENDIF + + MODULE BDOS + + ORG 0xC800 + +bdos_start: + LD SP, HL + LD D, 0x00 + NOP + NOP + LD L, E + +; -------------------------------------------------- +; BDOS Entry point +; -------------------------------------------------- +bdos_enter: + JP bdos_entrance + +bdos_pere_addr: + DW bdos_persub ; permanent error +bdos_sele_addr: + DW bdos_selsub ; select error +bdos_rode_addr: + DW bdos_rodsub ; write to ro disk error +bdos_rofe_addr: + DW bdos_rofsub ; write to ro file error + +; ------------------------------------------------------- +; BDOS Handler +; Inp: C - func no +; DE or E - parameter +; Out: A or HL - result +; ------------------------------------------------------- +bdos_entrance: + ; store parameter DE + EX DE, HL + LD (CPM_VARS.bdos_info), HL + EX DE, HL + ; Store E + LD A, E + LD (CPM_VARS.bdos_linfo), A + ; value to return, default = 0 + LD HL, 0x00 + LD (CPM_VARS.bdos_aret), HL + + ; Save user's stack pointer, set to local stack + ADD HL, SP + LD (CPM_VARS.bdos_usersp), HL + + LD SP, CPM_VARS.bdos_stack ; local stack setup + XOR A + LD (CPM_VARS.bdos_fcbdsk), A ; fcbdsk,resel=false + LD (CPM_VARS.bdos_resel), A ; bdos_resel = FALSE + LD HL, bdos_goback + PUSH HL ; push goback address to return after jump + LD A, C + CP BDOS_NFUNCS + RET NC ; return in func no out of range + LD C, E ; store param E to C + ; calculate offset in functab + LD HL, functab ; DE=func_no, HL->functab + LD E, A + LD D, 0 + ADD HL, DE + ADD HL, DE + LD E, (HL) + INC HL + LD D, (HL) ; DE=functab(func) + LD HL, (CPM_VARS.bdos_info) ; restore input parameter + EX DE, HL + JP (HL) ; dispatch function + +; ------------------------------------------------------- +; BDOS function handlers address table +; ------------------------------------------------------- +functab: + DW BIOS.wboot_f ; fn0 + DW bdos_con_inp ; fn1 + DW bdos_outcon ; fn2 + DW bdos_aux_inp ; fn3 + DW BIOS.punch_f ; fn4 + DW BIOS.list_f ; fn5 + DW bdos_dir_con_io ; fn6 + DW bdos_get_io_byte ; fn7 + DW bdos_set_io_byte ; fn8 + DW bdos_print_str ; fn9 + DW bdos_read ; fn10 0x0a + DW bdos_get_con_st ; fn11 0x0b + DW bdos_get_version ; fn12 0x0c + DW bdos_reset_disks ; fn13 0x0d + DW bdos_select_disk ; fn14 0x0e + DW bdos_open_file ; fn15 0x0f + DW bdos_close_file ; fn16 0x10 + DW bdos_search_first ; fn17 0x11 + DW bdos_search_next ; fn18 0x12 + DW bdos_rm_file ; fn19 0x13 + DW bdos_read_file ; fn20 0x14 + DW bdos_write_file ; fn21 0x15 + DW bdos_make_file ; fn22 0x16 + DW bdos_ren_file ; fn23 0x17 + DW bdos_get_login_vec ; fn24 0x18 + DW bdos_get_cur_drive ; fn25 0x19 + DW bdos_set_dma_addr ; fn26 0x1a + DW bdos_get_alloc_addr ; fn27 0x1b + DW bdos_set_ro ; fn28 0x1c + DW bdos_get_wr_protect ; fn29 0x1d + DW bdos_set_attr ; fn30 0x1e + DW bdos_get_dpb ; fn31 0x1f + DW bdos_set_user ; fn32 0x20 + DW bdos_rand_read ; fn33 0x21 + DW bdos_rand_write ; fn34 0x22 + DW bdos_compute_fs ; fn35 0x23 + DW bdos_set_random ; fn36 0x24 + DW bdos_reset_drives ; fn37 0x25 + DW bdos_not_impl ; fn38 0x26 (Access Drive) + DW bdos_not_impl ; fn39 0x27 (Free Drive) + DW bdos_rand_write_z ; fn40 0x28 + +; ------------------------------------------------------- +; Report permanent error +; ------------------------------------------------------- +bdos_persub: + LD HL, permsg ; = 'B' + CALL bdos_print_err + CP CTRL_C + JP Z, warm_boot + RET + +; ------------------------------------------------------- +; Report select error +; ------------------------------------------------------- +bdos_selsub: + LD HL, selmsg ;= 'S' + JP bdos_wait_err + +; ------------------------------------------------------- +; Report write to read/only disk +; ------------------------------------------------------- +bdos_rodsub: + LD HL, rodmsg ;= 'R' + JP bdos_wait_err + +; ------------------------------------------------------- +; Report read/only file +; ------------------------------------------------------- +bdos_rofsub: + LD HL, rofmsg ;= 'F' + +; ------------------------------------------------------- +; Wait for response before boot +; ------------------------------------------------------- +bdos_wait_err: + CALL bdos_print_err + JP warm_boot + +; ------------------------------------------------------- +; Error messages +; ------------------------------------------------------- +dskmsg: + DB 'Bdos Err On ' +dskerr: + DB " : $" +permsg: + DB "Bad Sector$" +selmsg: + DB "Select$" +rofmsg: + DB "File " +rodmsg: + DB "R/O$" + +; ------------------------------------------------------- +; Print error to console, message address in HL +; ------------------------------------------------------- +bdos_print_err: + PUSH HL ; save second message pointer + CALL bdos_crlf + ; set drive letter to message + LD A, (CPM_VARS.bdos_curdsk) + ADD A, 'A' + LD (dskerr), A + + LD BC, dskmsg ; print first error message + CALL bdos_print + POP BC + CALL bdos_print ; print second message + +; ------------------------------------------------------- +; Console handlers +; Read console character to A +; ------------------------------------------------------- +bdos_conin: + LD HL, CPM_VARS.bdos_kbchar + LD A, (HL) + LD (HL), 0x00 + OR A + RET NZ + ;no previous keyboard character ready + JP BIOS.conin_f + +; ------------------------------------------------------- +; Read character from console with echo +; ------------------------------------------------------- +bdos_conech: + CALL bdos_conin + CALL bdos_chk_ctrl_char + RET C + PUSH AF + LD C, A + CALL bdos_outcon + POP AF + RET + +; ------------------------------------------------------- +; Check for control char +; Onp: A - character +; Out: ZF if cr, lf, tab, or backspace +; CF if code < 0x20 +; ------------------------------------------------------- +bdos_chk_ctrl_char: + CP ASCII_CR + RET Z + CP ASCII_LF + RET Z + CP ASCII_TAB + RET Z + CP ASCII_BS + RET Z + CP ' ' + RET + +; ------------------------------------------------------- +; check console during output for +; Ctrl-S and Ctrl-C +; ------------------------------------------------------- +bdos_conbrk: + LD A, (CPM_VARS.bdos_kbchar) + OR A + JP NZ, .if_key ; skip if key pressed + CALL BIOS.const_f + AND 0x1 + RET Z ; return if no char ready + CALL BIOS.conin_f + CP CTRL_S + JP NZ, .no_crtl_s + ; stop on crtl-s + CALL BIOS.conin_f + CP CTRL_C + ; reboot on crtl-c + JP Z, warm_boot + XOR A + RET +.no_crtl_s: + LD (CPM_VARS.bdos_kbchar), A ; character in A, save it +.if_key: + LD A, 0x1 ; return with true set in accumulator + RET + +; -------------------------------------------------- +; Out char C to screen (and printer) +; -------------------------------------------------- +bdos_conout: + LD A, (CPM_VARS.bdos_no_outflag) ; if set, skip output, only move cursor + OR A + JP NZ, .compout + ; check console break + PUSH BC + CALL bdos_conbrk + POP BC + ; output c + PUSH BC + CALL BIOS.conout_f + POP BC + + ; send to printer (list) device + PUSH BC + LD A, (CPM_VARS.bdos_prnflag) + OR A + CALL NZ, BIOS.list_f + POP BC + +; ------------------------------------------------------- +; Update cursor position +; ------------------------------------------------------- +.compout: + LD A, C + ; recall the character + ; and compute column position + LD HL, CPM_VARS.bdos_column + CP ASCII_DEL ; [DEL] key + RET Z ; 0x7F dont move cursor + INC (HL) ; inc column + CP ASCII_SP ; return for normal character > 0x20 + RET NC + + ; restore column position + DEC (HL) + LD A, (HL) + OR A + RET Z ; return if column=0 + + LD A, C + CP ASCII_BS + JP NZ, .not_backsp + ; backspace character + DEC (HL) ; BKSP -> column-1 + RET + +.not_backsp: + CP ASCII_LF + RET NZ + LD (HL), 0 ; LF -> column=0 + RET + +; ------------------------------------------------------- +; Send C character with possible preceding '^' char +; ------------------------------------------------------- +bdos_ctlout: + LD A, C + CALL bdos_chk_ctrl_char ; cy if not graphic (or special case) + JP NC, bdos_outcon ; normal output if non control char (tab, cr, lf) + + PUSH AF + LD C, CTRL ; '^' + CALL bdos_conout + POP AF + OR 0x40 ; convert to letter equivalent (^M, ^J and so on) + LD C, A ; + +bdos_outcon: + LD A, C + CP ASCII_TAB + JP NZ, bdos_conout + + ; Print spaces until tab stop position +.to_tabpos: + LD C, ' ' + CALL bdos_conout + LD A, (CPM_VARS.bdos_column) + AND 00000111b ; column mod 8 = 0 ? + JP NZ, .to_tabpos + RET + +; ------------------------------------------------------- +; Output backspace - erase previous character +; ------------------------------------------------------- +bdos_out_bksp: + CALL bdos_prn_bksp + LD C, ' ' + CALL BIOS.conout_f + +; ------------------------------------------------------- +; Send backspace to console +; ------------------------------------------------------- +bdos_prn_bksp: + LD C, ASCII_BS + JP BIOS.conout_f + +; ------------------------------------------------------- +; print #, cr, lf for ctlx, ctlu, ctlr functions +; then move to strtcol (starting column) +; ------------------------------------------------------- +bdos_newline: + LD C, '#' + CALL bdos_conout + CALL bdos_crlf + ; move the cursor to the starting position +.print_sp: + LD A, (CPM_VARS.bdos_column) ; a=column + LD HL, CPM_VARS.bdos_strtcol + CP (HL) + RET NC ; ret id startcol>column + LD C, ' ' ; print space + CALL bdos_conout + JP .print_sp + +; ------------------------------------------------------- +; Out carriage return line feed sequence +; ------------------------------------------------------- +bdos_crlf: + LD C, ASCII_CR + CALL bdos_conout + LD C, ASCII_LF + JP bdos_conout + +; ------------------------------------------------------- +; Print $-ended string +; Inp: BC -> str$ +; ------------------------------------------------------- +bdos_print: + LD A, (BC) + CP '$' + RET Z + INC BC + PUSH BC + LD C, A + CALL bdos_outcon + POP BC + JP bdos_print + +; ------------------------------------------------------- +; Buffered console input +; Reads characters from the keyboard into a memory buffer +; until RETURN is pressed. +; Inp: C=0Ah +; DE=address or zero +; ------------------------------------------------------- +bdos_read: + LD A, (CPM_VARS.bdos_column) + LD (CPM_VARS.bdos_strtcol), A + LD HL, (CPM_VARS.bdos_info) + LD C, (HL) + INC HL + PUSH HL + LD B, 0 + ; B = current buffer length, + ; C = maximum buffer length, + ; HL= next to fill - 1 +.readnx: + PUSH BC + PUSH HL +.readn1: + CALL bdos_conin + AND 0x7f ; strip 7th bit + POP HL + POP BC + ; end of line? + CP ASCII_CR + JP Z, .read_end + CP ASCII_LF + JP Z, .read_end + + ; backspace ? + CP ASCII_BS + JP NZ, .no_bksp + LD A, B + OR A + JP Z, .readnx ; ignore BKSP for column=0 + DEC B + LD A, (CPM_VARS.bdos_column) + LD (CPM_VARS.bdos_no_outflag), A + JP .linelen + + ; not a backspace +.no_bksp: + CP ASCII_DEL ; [DEL] Key + JP NZ, .no_del + LD A, B + OR A + JP Z, .readnx ; ignore DEL for column=0 + LD A, (HL) ; cur char + DEC B ; dec column + DEC HL ; point to previous char + JP .echo ; out previous char + +.no_del: + CP CTRL_E ; ^E - physical end of line + JP NZ, .no_ctrle + PUSH BC + PUSH HL + CALL bdos_crlf ; out CR+LF + XOR A + LD (CPM_VARS.bdos_strtcol), A ; reset start column to 0 + JP .readn1 + +.no_ctrle: + CP CTRL_P ; ^P + JP NZ, .no_ctrlp + PUSH HL + LD HL, CPM_VARS.bdos_prnflag + LD A, 0x1 + SUB (HL) ; flip printer output flag + LD (HL), A + POP HL + JP .readnx + +.no_ctrlp: + CP CTRL_X ; cancel current cmd line + JP NZ, .no_ctrlx + POP HL +.backx: + LD A, (CPM_VARS.bdos_strtcol) + LD HL, CPM_VARS.bdos_column + CP (HL) + JP NC, bdos_read + DEC (HL) + CALL bdos_out_bksp + JP .backx + +.no_ctrlx: + CP CTRL_U ; cancel current cmd line + JP NZ, .no_ctrlu + + CALL bdos_newline + POP HL + JP bdos_read + +.no_ctrlu: + CP CTRL_R ; repeats current cmd line + JP NZ, .stor_echo + + ; start new line and retype +.linelen: + PUSH BC + CALL bdos_newline + POP BC + POP HL + PUSH HL + PUSH BC +.next_char: + LD A, B + OR A + JP Z, .endof_cmd ; end of cmd line? + INC HL + LD C, (HL) + DEC B + PUSH BC + PUSH HL + CALL bdos_ctlout + POP HL + POP BC + JP .next_char +.endof_cmd: + PUSH HL + LD A, (CPM_VARS.bdos_no_outflag) + OR A + JP Z, .readn1 ; if no display, read next characters + ; update cursor pos + LD HL, CPM_VARS.bdos_column + SUB (HL) + LD (CPM_VARS.bdos_no_outflag), A + ; move back compcol-column spaces + +.backsp: + CALL bdos_out_bksp + LD HL, CPM_VARS.bdos_no_outflag + DEC (HL) + JP NZ, .backsp + JP .readn1 + +; Put and Echo normal character +.stor_echo: + INC HL + LD (HL), A + INC B +.echo: + PUSH BC + PUSH HL + LD C, A + CALL bdos_ctlout + POP HL + POP BC + + ; warm boot on ctrl+c only at start of line + LD A, (HL) + CP CTRL_C + LD A, B + JP NZ, .no_ctrlc + CP 1 + JP Z, warm_boot + +.no_ctrlc: + CP C ; buffer is full? + JP C, .readnx ; get next char in not full + + ; End of read operation, store length +.read_end: + POP HL + LD (HL), B + LD C, ASCII_CR + JP bdos_conout ; Our CR and return + +; ------------------------------------------------------- +; Console input with echo (C_READ) +; Out: A=L=character +; ------------------------------------------------------- +bdos_con_inp: + CALL bdos_conech + JP bdos_ret_a + +; ------------------------------------------------------- +; Console input chartacter +; Out: A=L=ASCII character +; ------------------------------------------------------- +bdos_aux_inp: + CALL BIOS.reader_f + JP bdos_ret_a + +; ------------------------------------------------------- +; Direct console I/O +; Inp: E=code. +; E=code. Returned values (in A) vary. +; 0xff Return a character without echoing if one is +; waiting; zero if none +; 0xfe Return console input status. Zero if no +; character is waiting +; Out: A +; ------------------------------------------------------- +bdos_dir_con_io: + LD A, C + INC A + JP Z, .dirinp + INC A + JP Z, BIOS.const_f + JP BIOS.conout_f +.dirinp: + CALL BIOS.const_f + OR A + JP Z, bdos_ret_mon + CALL BIOS.conin_f + JP bdos_ret_a + +; ------------------------------------------------------- +; Get I/O byte +; Out: A = I/O byte. +; ------------------------------------------------------- +bdos_get_io_byte: + LD A, (iobyte) + JP bdos_ret_a + +; ------------------------------------------------------- +; Set I/O byte +; Inp: C=I/O byte. +; TODO: Check, will be E ? +; ------------------------------------------------------- +bdos_set_io_byte: + LD HL, iobyte + LD (HL), C + RET + +; ------------------------------------------------------- +; Out $-ended string +; Inp: DE -> string$. +; ------------------------------------------------------- +bdos_print_str: + EX DE, HL + LD C, L + LD B, H + JP bdos_print + +; ------------------------------------------------------- +; Get console status +; Inp: A=L=status +; ------------------------------------------------------- +bdos_get_con_st: + CALL bdos_conbrk +bdos_ret_a: + LD (CPM_VARS.bdos_aret), A +bdos_not_impl: + RET + +; ------------------------------------------------------- +; Set IO Error status = 1 +; ------------------------------------------------------- +set_ioerr_1: + LD A, 1 + JP bdos_ret_a + +; ------------------------------------------------------- +; Report select error +; ------------------------------------------------------- +bdos_sel_error: + LD HL, bdos_sele_addr + +; indirect Jump to [HL] +bdos_jump_hl: + LD E, (HL) + INC HL + LD D, (HL) ; ->bdos_sele_addr+1 + EX DE, HL + JP (HL) ; ->bdos_selsub + +; ------------------------------------------------------- +; Move C bytes from [DE] to [HL] +; ------------------------------------------------------- +bdos_move_dehl: + INC C +.move_next: + DEC C + RET Z + LD A, (DE) + LD (HL), A + INC DE + INC HL + JP .move_next + +; ------------------------------------------------------- +; Select the disk drive given by curdsk, and fill +; the base addresses curtrka - alloca, then fill +; the values of the disk parameter block +; Out: ZF - for big disk +; ------------------------------------------------------- +bdos_sel_dsk: + LD A, (CPM_VARS.bdos_curdsk) + LD C, A + CALL BIOS.seldsk_f ; HL filled by call + ; HL = 0000 if error, otherwise -> DPH + LD A, H + OR L + RET Z ; return if not valid drive + + LD E, (HL) + INC HL + LD D, (HL) + ; DE -> disk header + + ; save pointers + INC HL + LD (CPM_VARS.bdos_cdrmax), HL + INC HL + INC HL + LD (CPM_VARS.bdos_curtrk), HL + INC HL + INC HL + LD (CPM_VARS.bdos_currec), HL + INC HL + INC HL + ; save translation vector (table) addr + EX DE, HL + LD (CPM_VARS.bdos_tranv), HL ; tran vector + LD HL, CPM_VARS.bdos_buffa ; DE=source for move, HL=dest + LD C, 8 + CALL bdos_move_dehl + + ; Fill the disk parameter block + LD HL, (CPM_VARS.bdos_dpbaddr) + EX DE, HL + LD HL, CPM_VARS.bdos_sectpt + LD C, 15 + CALL bdos_move_dehl + + ; Set single/double map mode + LD HL, (CPM_VARS.bdos_maxall) ; largest allocation number + LD A, H ; a=h>0 for large disks (>255 blocks) + LD HL, CPM_VARS.bdos_small_disk + LD (HL), TRUE ; small + OR A + JP Z, .is_small + LD (HL), FALSE ; big disk > 255 sec +.is_small: + LD A, 0xff + OR A + RET + +; ------------------------------------------------------- +; Move to home position, +; then reset pointers for track and sector +; ------------------------------------------------------- +bdos_home: + CALL BIOS.home_f ; home head + XOR A + ; set track pointer to 0x0000 + LD HL, (CPM_VARS.bdos_curtrk) + LD (HL), A + INC HL + LD (HL), A + + ; set current record pointer to 0x0000 + LD HL, (CPM_VARS.bdos_currec) + LD (HL), A + INC HL + LD (HL), A + + RET + +; ------------------------------------------------------- +; Read buffer and check condition +; ------------------------------------------------------- +bdos_rdbuff: + CALL BIOS.read_f + JP diocomp ; check for i/o errors + +; ------------------------------------------------------- +; Write buffer and check condition +; Inp: C - write type +; 0 - normal write operation +; 1 - directory write operation +; 2 - start of new block +; ------------------------------------------------------- +bdos_wrbuff: + CALL BIOS.write_f + +; ------------------------------------------------------- +; Check for disk errors +; ------------------------------------------------------- +diocomp: + OR A + RET Z + LD HL, bdos_pere_addr ; = C899h + JP bdos_jump_hl + +; ------------------------------------------------------- +; Seek the record containing the current dir entry +; ------------------------------------------------------- +bdos_seekdir: + LD HL, (CPM_VARS.bdos_dcnt) + LD C, DSK_SHF + CALL bdos_hlrotr + LD (CPM_VARS.bdos_arecord), HL + LD (CPM_VARS.bdos_drec), HL + +; ------------------------------------------------------- +; Seek the track given by arecord (actual record) +; local equates for registers +; ------------------------------------------------------- +bdos_seek: + LD HL, CPM_VARS.bdos_arecord + LD C, (HL) + INC HL + LD B, (HL) + ; BC = sector number + + LD HL, (CPM_VARS.bdos_currec) + LD E, (HL) + INC HL + LD D, (HL) + ; DE = current sector number + + LD HL, (CPM_VARS.bdos_curtrk) + LD A, (HL) + INC HL + LD H, (HL) + LD L, A + ; HL = current track + +.sec_less_cur: + ; check specified sector before current + LD A, C + SUB E + LD A, B + SBC A, D + JP NC, .sec_ge_cur + ; yes, decrement current sectors for one track + PUSH HL + LD HL, (CPM_VARS.bdos_sectpt) ; sectors per track + LD A, E + SUB L + LD E, A + LD A, D + SBC A, H + LD D, A + ; current track-1 + POP HL + DEC HL + JP .sec_less_cur + ; specified sector >= current +.sec_ge_cur: + PUSH HL + LD HL, (CPM_VARS.bdos_sectpt) + ADD HL, DE ; current sector+track + JP C, .track_found ; jump if after current + ; sector before current + LD A, C + SUB L + LD A, B + SBC A, H + JP C, .track_found + EX DE, HL + POP HL + ; increment track + INC HL + JP .sec_ge_cur + ; determined track number with specified sector +.track_found: + POP HL + PUSH BC + PUSH DE + PUSH HL + ; Stack contains (lowest) BC=arecord, DE=currec, HL=curtrk + EX DE, HL + LD HL, (CPM_VARS.bdos_offset) ; adjust if have reserved tracks + ADD HL, DE + LD B, H + LD C, L + CALL BIOS.settrk_f ; select track + + ; save current track + POP DE ; curtrk + LD HL, (CPM_VARS.bdos_curtrk) + LD (HL), E + INC HL + LD (HL), D + + ; save current record + POP DE + LD HL, (CPM_VARS.bdos_currec) + LD (HL), E + INC HL + LD (HL), D + + ; calc relative offset between arecord and currec + POP BC + LD A, C + SUB E + LD C, A + LD A, B + SBC A, D + LD B, A + + LD HL, (CPM_VARS.bdos_tranv) ; HL -> translation table + EX DE, HL + ; translate via BIOS call + CALL BIOS.sectran_f + ; select translated sector and return + LD C, L + LD B, H + JP BIOS.setsec_f + +; ------------------------------------------------------- +; Compute block number from record number and extent +; number +; ------------------------------------------------------- +bdos_dm_position: + LD HL, CPM_VARS.bdos_blkshf + LD C, (HL) + LD A, (CPM_VARS.bdos_vrecord) ; record number + ; a = a / 2^blkshf + +dmpos_l0: + OR A + RRA + DEC C + JP NZ, dmpos_l0 + ; A = shr(vrecord, blkshf) = vrecord/2^(sect/block) + LD B, A + LD A, 8 + SUB (HL) + ; c = 8 - blkshf + LD C, A + LD A, (CPM_VARS.bdos_extval) + ; a = extval * 2^(8-blkshf) +dmpos_l1: + DEC C + JP Z, dmpos_l2 + OR A + RLA + JP dmpos_l1 +dmpos_l2: + ADD A, B + RET ; with dm_position in A + +; ------------------------------------------------------- +; Return disk map value from position given by BC +; ------------------------------------------------------- +bdos_getdm: + LD HL, (CPM_VARS.bdos_info) + LD DE, DSK_MAP + ADD HL, DE + ADD HL, BC + LD A, (CPM_VARS.bdos_small_disk) + OR A + JP Z,getdmd + LD L, (HL) + LD H, 0x00 + RET + +getdmd: + ADD HL, BC + LD E, (HL) + INC HL + LD D, (HL) + EX DE, HL + RET + +; ------------------------------------------------------- +; Compute disk block number from current FCB +; ------------------------------------------------------- +bdos_index: + CALL bdos_dm_position + LD C, A + LD B, 0 + CALL bdos_getdm + LD (CPM_VARS.bdos_arecord), HL + RET + +; ------------------------------------------------------- +; Called following index to see if block allocated +; Out: ZF if not allocated +; ------------------------------------------------------- +bdos_allocated: + LD HL, (CPM_VARS.bdos_arecord) + LD A, L + OR H + RET + +; ------------------------------------------------------- +; Compute actual record address, assuming index called +; ------------------------------------------------------- +bdos_atran: + LD A, (CPM_VARS.bdos_blkshf) + LD HL, (CPM_VARS.bdos_arecord) +bdatarn_l0: + ADD HL, HL + DEC A + JP NZ, bdatarn_l0 + LD (CPM_VARS.bdos_arecord1), HL + LD A, (CPM_VARS.bdos_blmsk) + LD C, A + LD A, (CPM_VARS.bdos_vrecord) + AND C + OR L + LD L, A + LD (CPM_VARS.bdos_arecord), HL + RET + +; ------------------------------------------------------- +; Get current extent field address to A +; ------------------------------------------------------- +bdos_getexta: + LD HL, (CPM_VARS.bdos_info) + LD DE, FCB_EXT + ADD HL, DE ; HL -> .fcb(extnum) + RET + +; ------------------------------------------------------- +; Compute reccnt and nxtrec addresses for get/setfcb +; Out: HL -> record count byte in fcb +; DE -> next record number byte in fcb +; ------------------------------------------------------- +bdos_fcb_rcnr: + LD HL, (CPM_VARS.bdos_info) + LD DE, FCB_RC + ADD HL, DE + EX DE, HL + LD HL, 17 ; (nxtrec-reccnt) + ADD HL, DE + RET + +; ------------------------------------------------------- +; Set variables from currently addressed fcb +; ------------------------------------------------------- +bdos_stor_fcb_var: + CALL bdos_fcb_rcnr + LD A, (HL) + LD (CPM_VARS.bdos_vrecord), A + EX DE, HL + LD A, (HL) + LD (CPM_VARS.bdos_rcount), A + CALL bdos_getexta + LD A, (CPM_VARS.bdos_extmsk) + AND (HL) + LD (CPM_VARS.bdos_extval), A + RET + +; ------------------------------------------------------- +; Set the next record to access. +; Inp: HL -> fcb next record byte +; ------------------------------------------------------- +bdos_set_nxt_rec: + CALL bdos_fcb_rcnr + LD A, (CPM_VARS.bdos_seqio) ; sequential mode flag (=1) + CP 2 + JP NZ, bsfcb_l0 + XOR A ; if 2 - no adder needed +bsfcb_l0: + LD C, A + LD A, (CPM_VARS.bdos_vrecord) ; last record number + ADD A, C + LD (HL), A + EX DE, HL + LD A, (CPM_VARS.bdos_rcount) ; next record byte + LD (HL), A + RET + +; ------------------------------------------------------- +; Rotate HL right by C bits +; ------------------------------------------------------- +bdos_hlrotr: + INC C +bhlr_nxt: + DEC C + RET Z + LD A, H + OR A + RRA + LD H, A + LD A,L + RRA + LD L, A + JP bhlr_nxt + +; ------------------------------------------------------- +; Compute checksum for current directory buffer +; Out: A - checksum +; ------------------------------------------------------- +bdos_compute_cs: + LD C, DIR_BUFF_SIZE ; size of directory buffer + LD HL, (CPM_VARS.bdos_buffa) + XOR A +bcompcs_add_nxt: + ADD A, (HL) + INC HL + DEC C + JP NZ, bcompcs_add_nxt + RET + +; ------------------------------------------------------- +; Rotate HL left by C bits +; ------------------------------------------------------- +bdos_hlrotl: + INC C +.nxt: + DEC C + RET Z + ADD HL, HL + JP .nxt + +; ------------------------------------------------------- +; Set a "1" value in curdsk position +; Inp: BC - vector +; Out: HL - vector with bit set +; ------------------------------------------------------- +bdos_set_dsk_bit: + PUSH BC + LD A, (CPM_VARS.bdos_curdsk) + LD C, A + LD HL, 0x0001 + CALL bdos_hlrotl + POP BC + LD A, C + OR L + LD L, A + LD A, B + OR H + LD H, A + RET + +; ------------------------------------------------------- +; Get write protect status +; ------------------------------------------------------- +bdos_nowrite: + LD HL, (CPM_VARS.bdos_rodsk) + LD A, (CPM_VARS.bdos_curdsk) + LD C, A + CALL bdos_hlrotr + LD A, L + AND 0x1 + RET + +; ------------------------------------------------------- +; Temporarily set current drive to be read-only; +; attempts to write to it will fail +; ------------------------------------------------------- +bdos_set_ro: + LD HL, CPM_VARS.bdos_rodsk + LD C, (HL) + INC HL + LD B, (HL) + + CALL bdos_set_dsk_bit + LD (CPM_VARS.bdos_rodsk), HL + ; high water mark in directory goes to max + LD HL, (CPM_VARS.bdos_dirmax) + INC HL + EX DE, HL + LD HL, (CPM_VARS.bdos_cdrmax) + LD (HL), E + INC HL + LD (HL), D + RET + +; ------------------------------------------------------- +; Check current directory element for read/only status +; ------------------------------------------------------- +bdos_check_rodir: + CALL bdos_getdptra + +; ------------------------------------------------------- +; Check current buff(dptr) or fcb(0) for r/o status +; ------------------------------------------------------- +bdos_check_rofile: + LD DE, RO_FILE + ADD HL, DE + LD A, (HL) + RLA + RET NC + LD HL, bdos_rofe_addr ; = C8B1h + JP bdos_jump_hl + +; ------------------------------------------------------- +; Check for write protected disk +; ------------------------------------------------------- +bdos_check_write: + CALL bdos_nowrite + RET Z + LD HL, bdos_rode_addr ; = C8ABh + JP bdos_jump_hl + +; ------------------------------------------------------- +; Compute the address of a directory element at +; positon dptr in the buffer +; ------------------------------------------------------- +bdos_getdptra: + LD HL, (CPM_VARS.bdos_buffa) + LD A, (CPM_VARS.bdos_dptr) + +; ------------------------------------------------------- +; HL = HL + A +; ------------------------------------------------------- +bdos_hl_add_a: + ADD A,L + LD L, A + RET NC + INC H + RET + +; ------------------------------------------------------- +; Compute the address of the s2 from fcb +; Out: A - module number +; HL -> module number +; ------------------------------------------------------- +bdos_get_s2: + LD HL, (CPM_VARS.bdos_info) + LD DE, FCB_S2 + ADD HL, DE + LD A, (HL) + RET + +; ------------------------------------------------------- +; Clear the module number field for user open/make +; ------------------------------------------------------- +bdos_clear_s2: + CALL bdos_get_s2 + LD (HL), 0 + RET + +; ------------------------------------------------------- +; Set FWF (File Write Flag) +; ------------------------------------------------------- +bdos_set_fwf: + CALL bdos_get_s2 + OR FWF_MASK + LD (HL), A + RET + +; ------------------------------------------------------- +; Check for free entries in directory +; Out: CF is set - directory have more file entries +; CF is reset - directory is full +; ------------------------------------------------------- +bdos_dir_is_free: + LD HL, (CPM_VARS.bdos_dcnt) + EX DE, HL ; DE = directory counter + LD HL, (CPM_VARS.bdos_cdrmax) ; HL = cdrmax + LD A, E + SUB (HL) + INC HL + LD A, D + SBC A, (HL) + ; Condition dcnt - cdrmax produces cy if cdrmax>dcnt + RET + +; ------------------------------------------------------- +; If not (cdrmax > dcnt) then cdrmax = dcnt+1 +; ------------------------------------------------------- +bdos_setcdr: + CALL bdos_dir_is_free + RET C + INC DE + LD (HL), D + DEC HL + LD (HL), E + RET + +; ------------------------------------------------------- +; HL = DE - HL +; ------------------------------------------------------- +bdos_de_sub_hl: + LD A, E + SUB L + LD L, A + LD A, D + SBC A, H + LD H, A + RET + +; Set directory checksubm byte +bdos_newchecksum: + LD C, 0xff + + +; ------------------------------------------------------- +bdos_checksum: + LD HL, (CPM_VARS.bdos_drec) + EX DE, HL + LD HL, (CPM_VARS.bdos_alloc1) + CALL bdos_de_sub_hl + RET NC + PUSH BC + CALL bdos_compute_cs ; Compute checksum to A for current dir buffer + LD HL, (CPM_VARS.bdos_cksum) + EX DE, HL + LD HL, (CPM_VARS.bdos_drec) + ADD HL, DE + POP BC + INC C + JP Z, initial_cs + CP (HL) + RET Z + CALL bdos_dir_is_free + RET NC + CALL bdos_set_ro + RET +initial_cs: + LD (HL), A + RET + +; ------------------------------------------------------- +; Write the current directory entry, set checksum +; ------------------------------------------------------- +bdos_wrdir: + CALL bdos_newchecksum + CALL bdos_setdir + LD C, 0x1 + CALL bdos_wrbuff + JP bdos_setdata + +; ------------------------------------------------------- +; Read a directory entry into the directory buffer +; ------------------------------------------------------- +bdos_rd_dir: + CALL bdos_setdir + CALL bdos_rdbuff + +; ------------------------------------------------------- +; Set data dma address +; ------------------------------------------------------- +bdos_setdata: + LD HL, CPM_VARS.bdos_dmaad + JP bdos_set_dma + +; ------------------------------------------------------- +; Set directory dma address +; ------------------------------------------------------- +bdos_setdir: + LD HL, CPM_VARS.bdos_buffa + +; ------------------------------------------------------- +; HL -> dma address to set (i.e., buffa or dmaad) +; ------------------------------------------------------- +bdos_set_dma: + LD C, (HL) + INC HL + LD B, (HL) + JP BIOS.setdma_f + +; ------------------------------------------------------- +; Copy the directory entry to the user buffer +; after call to search or searchn by user code +; ------------------------------------------------------- +bdos_dir_to_user: + LD HL, (CPM_VARS.bdos_buffa) + EX DE, HL + LD HL, (CPM_VARS.bdos_dmaad) + LD C, DIR_BUFF_SIZE + JP bdos_move_dehl + +; ------------------------------------------------------- +; return zero flag if at end of directory, non zero +; if not at end (end of dir if dcnt = 0ffffh) +; ------------------------------------------------------- +bdos_end_of_dir: + LD HL, CPM_VARS.bdos_dcnt + LD A, (HL) + INC HL + CP (HL) + RET NZ + INC A + RET + +; ------------------------------------------------------- +; Set dcnt to the end of the directory +; ------------------------------------------------------- +bdos_set_end_dir: + LD HL, ENDDIR + LD (CPM_VARS.bdos_dcnt), HL + RET + +; ------------------------------------------------------- +; Read next directory entry, with C=true if initializing +; ------------------------------------------------------- +bdos_read_dir: + LD HL, (CPM_VARS.bdos_dirmax) + EX DE, HL + LD HL, (CPM_VARS.bdos_dcnt) + INC HL + LD (CPM_VARS.bdos_dcnt), HL + CALL bdos_de_sub_hl + JP NC, bdrd_l0 + JP bdos_set_end_dir +bdrd_l0: + LD A, (CPM_VARS.bdos_dcnt) + AND DSK_MSK + LD B, FCB_SHF +bdrd_l1: + ADD A, A + DEC B + JP NZ, bdrd_l1 + LD (CPM_VARS.bdos_dptr), A + OR A + RET NZ + PUSH BC + CALL bdos_seekdir + CALL bdos_rd_dir + POP BC + JP bdos_checksum + +; ------------------------------------------------------- +; Given allocation vector position BC, return with byte +; containing BC shifted so that the least significant +; bit is in the low order accumulator position. HL is +; the address of the byte for possible replacement in +; memory upon return, and D contains the number of shifts +; required to place the returned value back into position +; ------------------------------------------------------- +bdos_getallocbit: + LD A, C + AND 00000111b + INC A + LD E, A + LD D, A + LD A, C + RRCA + RRCA + RRCA + AND 00011111b + LD C, A + LD A, B + ADD A, A + ADD A, A + ADD A, A + ADD A, A + ADD A, A + OR C + LD C, A + LD A, B + RRCA + RRCA + RRCA + AND 00011111b + LD B, A + LD HL, (CPM_VARS.bdos_alloca) ; Base address of allocation vector + ADD HL, BC + LD A, (HL) +ga_rotl: + RLCA + DEC E + JP NZ, ga_rotl + RET + +; ------------------------------------------------------- +; BC is the bit position of ALLOC to set or reset. The +; value of the bit is in register E. +; ------------------------------------------------------- +bdos_setallocbit: + PUSH DE + CALL bdos_getallocbit + AND 11111110b + POP BC + OR C + +; ------------------------------------------------------- +; Rotate and replace +; Inp: A - Byte value from ALLOC +; D - bit position (1..8) +; HL - target ALLOC position +; ------------------------------------------------------- +bdos_sab_rotr: + RRCA + DEC D + JP NZ, bdos_sab_rotr + LD (HL), A + RET + +; ------------------------------------------------------- +; Set or clear space used bits in allocation map +; Inp: C=0 - clear, C=1 - set +; ------------------------------------------------------- +bdos_scandm: + CALL bdos_getdptra + ; HL addresses the beginning of the directory entry + LD DE, DSK_MAP + ADD HL, DE ; HL -> block number byte + PUSH BC + LD C, 17 ; fcblen-dskmap+1 + ; scan all 17 bytes +.scan_next: + POP DE + DEC C + RET Z ; return if done + + PUSH DE + ; small or bug disk? + LD A, (CPM_VARS.bdos_small_disk) + OR A + JP Z, .scan_big + PUSH BC + PUSH HL + ; small, one byte + LD C, (HL) + LD B, 0 + JP .scan_cmn +.scan_big: + ; big, two byte + DEC C + PUSH BC + LD C, (HL) + INC HL + LD B, (HL) + PUSH HL + +.scan_cmn: + ; this block used? + LD A, C + OR B + JP Z, .not_used + ; have free space on disk? + LD HL, (CPM_VARS.bdos_maxall) + LD A, L + SUB C + LD A, H + SBC A, B + CALL NC, bdos_setallocbit ; enough space, set bit + +.not_used: + POP HL ; HL -> next block in fcb + INC HL + POP BC + JP .scan_next + +; ------------------------------------------------------- +; Initialize the current disk +; lret = false, set to true if $ file exists +; compute the length of the allocation vector - 2 +; ------------------------------------------------------- +bdos_initialize: + ; compute size of alloc table + LD HL, (CPM_VARS.bdos_maxall) + LD C, 3 + CALL bdos_hlrotr ; HL = disk size / 8 + 1 + INC HL + LD B, H + LD C, L ; BC = alloc table size + LD HL, (CPM_VARS.bdos_alloca) ; address of allocation table + ; fill with zeroes +.alt_fill_0: + LD (HL), 0 + INC HL + DEC BC + LD A, B + OR C + JP NZ, .alt_fill_0 + + LD HL, (CPM_VARS.bdos_dirblk) ; DE = initial space, used by directory + EX DE, HL + LD HL, (CPM_VARS.bdos_alloca) ; HL -> allocation map + LD (HL), E + INC HL + LD (HL), D ; [HL] = DE + CALL bdos_home ; home drive, set initial head, track, sector + + LD HL, (CPM_VARS.bdos_cdrmax) + LD (HL), 3 ; next dir read + INC HL + LD (HL), 0 + CALL bdos_set_end_dir ; mark end of dir + +.rd_next_f: + ; read next file name + LD C, 0xff + CALL bdos_read_dir + CALL bdos_end_of_dir ; is have another file? + RET Z + ; get params of file, and check deleted + CALL bdos_getdptra + LD A, FILE_DELETED + CP (HL) + JP Z, .rd_next_f + ; check user code + LD A, (CPM_VARS.bdos_userno) + CP (HL) + JP NZ, .set_as_used + INC HL + LD A, (HL) + SUB '$' ; check for $name file + JP NZ, .set_as_used + ; dollar file found, mark in lret + DEC A + LD (CPM_VARS.bdos_aret), A + +.set_as_used: + LD C, 1 + CALL bdos_scandm + CALL bdos_setcdr + JP .rd_next_f + +; ------------------------------------------------------- +; Return directory location as lret +; used in delete, rename, ... +; ------------------------------------------------------- +bdos_ret_dirloc: + LD A, (CPM_VARS.bdos_dirloc) + JP bdos_ret_a + +; ------------------------------------------------------- +; Compare extent# in A with that in C, return nonzero +; if they do not match +; ------------------------------------------------------- +bdos_compext: + PUSH BC + PUSH AF + LD A, (CPM_VARS.bdos_extmsk) + CPL + LD B, A + LD A, C + AND B + LD C, A + POP AF + AND B + SUB C + AND MAX_EXT ; check only bits [4:0] (MAX_EXT) + POP BC + RET + +; ------------------------------------------------------- +; Search for directory element of length C at info +; ------------------------------------------------------- +bdos_search: + LD A, 0xff + LD (CPM_VARS.bdos_dirloc), A + LD HL, CPM_VARS.bdos_searchl ; length in bytes to match + LD (HL), C + LD HL, (CPM_VARS.bdos_info) ; address filename to match + LD (CPM_VARS.bdos_searcha), HL + CALL bdos_set_end_dir + CALL bdos_home + +; ------------------------------------------------------- +; Search for the next directory element, assuming +; a previous call on search which sets searcha and +; searchl +; ------------------------------------------------------- +bdos_search_nxt: + LD C, 0 + CALL bdos_read_dir ; get next filename entry + CALL bdos_end_of_dir ; at end? pos=0xffff + JP Z, .not_found ; jump at end + + LD HL, (CPM_VARS.bdos_searcha) + EX DE, HL + ; skip if file deleted + LD A, (DE) + CP FILE_DELETED + JP Z, .search_next + + PUSH DE + CALL bdos_dir_is_free + POP DE + JP NC, .not_found ; Is full, no more file entries + +.search_next: + CALL bdos_getdptra ; get address of FCB + LD A, (CPM_VARS.bdos_searchl) ; BC=length to compare + LD C, A + LD B, 0 + + ; compare loop +.search_loop: + LD A, C + OR A + JP Z, .search_end ; search completed? + ; check byte + LD A, (DE) + CP '?' + JP Z, .search_ok ; match if wildcard + LD A, B + CP 13 ; ignore 13th byte + JP Z, .search_ok + CP FCB_EXT ; extent byte + LD A, (DE) + JP Z, .search_ext + SUB (HL) ; compare bytes + AND 0x7f ; mask 7th bit + JP NZ, bdos_search_nxt ; if not match, check next file entry + JP .search_ok + + ; compare ext +.search_ext: + PUSH BC + LD C, (HL) + CALL bdos_compext + POP BC + JP NZ, bdos_search_nxt ; if not match, check next file entry + + ; current bytes matches, increment pointers, decrement counter +.search_ok: + INC DE + INC HL + INC B + DEC C + JP .search_loop ; compare next byte + + ; entiry name matches, return dir position +.search_end: + LD A, (CPM_VARS.bdos_dcnt) + AND 0x3 + LD (CPM_VARS.bdos_aret), A + LD HL, CPM_VARS.bdos_dirloc + LD A, (HL) + RLA + RET NC + XOR A + LD (HL), A + RET + + ; end of directory, or empty name +.not_found: + CALL bdos_set_end_dir + LD A, 0xff + JP bdos_ret_a + +; ------------------------------------------------------- +; Delete the currently addressed file +; ------------------------------------------------------- +bdos_era_file: + CALL bdos_check_write ; check write rotection + LD C, 12 ; length of filename + CALL bdos_search ; search file in directory (with wildcards) +.del_next: + CALL bdos_end_of_dir + RET Z ; no more dir entries - exit + CALL bdos_check_rodir ; check file RO + CALL bdos_getdptra ; get file info + LD (HL), FILE_DELETED ; set deleted marker at first symbol + LD C, 0 + CALL bdos_scandm ; clear space at map + CALL bdos_wrdir ; write directory to disk + CALL bdos_search_nxt ; find next file + JP .del_next + +; ------------------------------------------------------- +; Given allocation vector position BC, find the zero bit +; closest to this position by searching left and right. +; if found, set the bit to one and return the bit position +; in hl. if not found (i.e., we pass 0 on the left, or +; maxall on the right), return 0000 in hl +; ------------------------------------------------------- +bdos_get_block: + LD D, B + LD E, C +.prev_test: + LD A, C + OR B + JP Z, .next_test ; jump if block 0 specified + ; check previous block + DEC BC + PUSH DE + PUSH BC + CALL bdos_getallocbit + RRA + JP NC, .ret_block ; block is empty, use it + + ; not empty, check more + POP BC + POP DE + + ; look at next block +.next_test: + ; check for free space on disk + LD HL, (CPM_VARS.bdos_maxall) + LD A, E + SUB L + LD A, D + SBC A, H + JP NC, .ret_no_block + ; have space, move to next block + INC DE + PUSH BC + PUSH DE + LD B, D + LD C, E + CALL bdos_getallocbit + RRA + JP NC, .ret_block ; block is empty, use it + POP DE + POP BC + JP .prev_test + + ; mark block as used and return in HL +.ret_block: + RLA + INC A + CALL bdos_sab_rotr + POP HL + POP DE + RET + + ; no free blocks found +.ret_no_block: + LD A, C + OR B + JP NZ, .prev_test ; if BC != 0 try to find before + LD HL, 0x00 ; not found + RET + +; ------------------------------------------------------- +; Copy the entire file control block +; ------------------------------------------------------- +bdos_copy_fcb: + LD C, 0x00 + LD E, FCB_LEN +; ------------------------------------------------------- +; copy fcb information starting at C for E bytes +; into the currently addressed directory entry +; ------------------------------------------------------- +dbos_copy_dir: + PUSH DE + LD B, 0x00 + LD HL, (CPM_VARS.bdos_info) + ADD HL, BC + EX DE, HL + CALL bdos_getdptra + POP BC + CALL bdos_move_dehl + +; ------------------------------------------------------- +; Enter from close to seek and copy current element +; ------------------------------------------------------- +bdos_seek_copy: + CALL bdos_seekdir + JP bdos_wrdir + +; ------------------------------------------------------- +; Rename the file described by the first half of +; the currently addressed FCB to new name, contained in +; the last half of the currently addressed FCB. +; ------------------------------------------------------- +bdos_rename: + CALL bdos_check_write ; check for RO disk + LD C, 12 ; use 12 symbols of name to compare + CALL bdos_search ; find first file + LD HL, (CPM_VARS.bdos_info) ; file info + LD A, (HL) ; user number + LD DE, 16 ; shift to place second file info + ADD HL, DE + LD (HL), A ; set same user no + +.ren_next: + CALL bdos_end_of_dir + RET Z ; return if end of directory + + CALL bdos_check_rodir ; check file RO flag + LD C, 16 ; start from 16th byte + LD E, FN_LEN ; and copy 12 byte + CALL dbos_copy_dir + CALL bdos_search_nxt ; search next file + JP .ren_next + +; ------------------------------------------------------- +; Update file attributes for current fcb +; ------------------------------------------------------- +bdos_update_attrs: + LD C, FN_LEN + CALL bdos_search ; search file by 12 bytes of name +.set_next: + CALL bdos_end_of_dir + RET Z ; return if not found + + LD C, 0 + LD E, FN_LEN + CALL dbos_copy_dir ; copy name to FCB and save dir + CALL bdos_search_nxt + JP .set_next ; ; do it for next file + +; -------------------------------------------------- +; Open file, name specified in FCB +; ------------------------------------------------------- +open: + LD C, FCB_INFO_LEN + CALL bdos_search ; search file + CALL bdos_end_of_dir + RET Z ; return if not found + +bdos_open_copy: + CALL bdos_getexta + LD A, (HL) ; get extent byte + PUSH AF ; save ext + PUSH HL ; and it's address + CALL bdos_getdptra + EX DE, HL + ; move to user space + LD HL, (CPM_VARS.bdos_info) + LD C, 32 + PUSH DE + CALL bdos_move_dehl + CALL bdos_set_fwf ; set 7th bit s2 "unmodified" flag + + POP DE + LD HL, FCB_EXT + ADD HL, DE + LD C, (HL) ; C = extent byte + + LD HL, FCB_RC + ADD HL, DE + LD B, (HL) ; B = record count + + POP HL + POP AF + LD (HL), A + LD A, C + CP (HL) ; cmp extent bytes + LD A, B + JP Z, .set_rec_cnt + ; user specified extent is not same, reset record count to 0 + LD A, 0 + JP C, .set_rec_cnt + ; set to maximum + LD A, 128 + +.set_rec_cnt: + ; set record count in user FCB to A + LD HL, (CPM_VARS.bdos_info) + LD DE, FCB_RC + ADD HL, DE + LD (HL), A + RET + +; -------------------------------------------------- +; HL = .fcb1(i), DE = .fcb2(i), +; if fcb1(i) = 0 then fcb1(i) := fcb2(i) +; -------------------------------------------------- +bdos_mergezero: + LD A, (HL) + INC HL + OR (HL) + DEC HL + RET NZ + LD A, (DE) + LD (HL), A + INC DE + INC HL + LD A, (DE) + LD (HL), A + DEC DE + DEC HL + RET + +; -------------------------------------------------- +; Close file specified by FCB +; -------------------------------------------------- +bdos_close: + XOR A + ; clear status and file position bytes + LD (CPM_VARS.bdos_aret), A + LD (CPM_VARS.bdos_dcnt), A + LD (CPM_VARS.bdos_dcnt+1), A + CALL bdos_nowrite ; get write protection + RET NZ ; return if set + + CALL bdos_get_s2 + AND FWF_MASK + RET NZ ; return if not modified flag set + ; search file + LD C, FCB_INFO_LEN + CALL bdos_search + CALL bdos_end_of_dir + RET Z ; return if not found + + LD BC, DSK_MAP ; offset of records used + CALL bdos_getdptra + ADD HL, BC + EX DE, HL + + LD HL, (CPM_VARS.bdos_info) ; same for user FCB + ADD HL, BC + LD C, 16 ; bytes in extent + +bdos_merge0: + LD A, (CPM_VARS.bdos_small_disk) ; small/big disk flag + OR A + JP Z, bdos_merge ; jump if big (16 bit) + ; small disk (8 bit) + LD A, (HL) ; from user FCB + OR A + LD A, (DE) ; from DIR FCB + JP NZ, bdm_fcbnzero + LD (HL), A ; user is 0, set from directory fcb + +bdm_fcbnzero: + OR A + JP NZ, bdm_buffnzero + ; dir is 0, set from user fcb + LD A, (HL) + LD (DE), A + +bdm_buffnzero: + CP (HL) + JP NZ, bdm_mergerr ; if both non zero, close error + JP bdm_dmset ; merged ok, go to next fcb byte + +bdos_merge: + CALL bdos_mergezero ; update user fcb if it is zero + EX DE, HL + CALL bdos_mergezero ; update dir fcb if it is zero + EX DE, HL + LD A, (DE) + CP (HL) + JP NZ, bdm_mergerr ; if both is same, close error + + ; next byte + INC DE + INC HL + LD A, (DE) + CP (HL) + JP NZ, bdm_mergerr ; if both is same, close error + DEC C + +bdm_dmset: + ; next + INC DE + INC HL + DEC C + JP NZ, bdos_merge0 ; merge next if C>0 + + LD BC, 0xffec ; -(fcblen-extnum) (-20) + ADD HL, BC + EX DE, HL + ADD HL, BC + LD A, (DE) + CP (HL) + JP C, bdm_endmerge ; directory extent > user extent -> end + ; update record count in dir FCB + LD (HL), A + LD BC, 0x3 ; (reccnt-extnum) + ADD HL, BC + EX DE, HL + ADD HL, BC + LD A, (HL) ; get from user FCB + LD (DE), A ; set to directory FCB + +bdm_endmerge: + LD A, 0xff + LD (CPM_VARS.bdos_fcb_closed), A ; set was open and closed flag + JP bdos_seek_copy ; update directory + + ; set return status and return +bdm_mergerr: + LD HL, CPM_VARS.bdos_aret + DEC (HL) + RET + +; ------------------------------------------------------- +; Create a new file by creating a directory entry +; then opening the file +; ------------------------------------------------------- +bdos_make: + CALL bdos_check_write ; check Write Protection + LD HL, (CPM_VARS.bdos_info) ; save user FCB + PUSH HL ; on stack + LD HL, CPM_VARS.bdos_efcb ; empty FCB + ; Save FCB address, look for 0xE5 + LD (CPM_VARS.bdos_info), HL ; set empty FCB + ; search firs empty slot in directory + LD C, 0x1 ; compare one byte 0xE5 + CALL bdos_search + CALL bdos_end_of_dir ; found flag + POP HL + LD (CPM_VARS.bdos_info), HL ; restore user FCB address + RET Z ; return if not found (no space in dir) + EX DE, HL + LD HL, FCB_RC ; number or record for this file + ADD HL, DE + + ; clear FCB tail + LD C, 17 ; fcblen-namlen + XOR A +.fcb_set_0: + LD (HL), A + INC HL + DEC C + JP NZ, .fcb_set_0 + + LD HL, FCB_S1 + ADD HL, DE + LD (HL), A ; Current record within extent? + CALL bdos_setcdr + CALL bdos_copy_fcb + JP bdos_set_fwf + +; ------------------------------------------------------- +; Close the current extent, and open the next one to read +; if possible. RMF is true if in read mod +; ------------------------------------------------------- +bdos_open_reel: + XOR A + LD (CPM_VARS.bdos_fcb_closed), A ; clear close flag + CALL bdos_close ; close extent + CALL bdos_end_of_dir ; check space + RET Z ; ret if no more space + ; get extent byte from user FCB + LD HL, (CPM_VARS.bdos_info) + LD BC, FCB_EXT + ADD HL, BC + LD A, (HL) + ; and increment it, mask to 0..31 and store + INC A + AND MAX_EXT + LD (HL), A + JP Z, .overflow + ; mask extent byte + LD B, A + LD A, (CPM_VARS.bdos_extmsk) + AND B + LD HL, CPM_VARS.bdos_fcb_closed + AND (HL) + JP Z, .read_nxt_extent ; read netx extent + JP .extent_in_mem + +.overflow: + LD BC, 0x2 ; S2 + ADD HL, BC + INC (HL) + LD A, (HL) + AND MAX_MOD + JP Z, .error + +.read_nxt_extent: + LD C, FCB_INFO_LEN + CALL bdos_search + CALL bdos_end_of_dir + JP NZ, .extent_in_mem ; jump if success + ; not extent found + LD A, (CPM_VARS.bdos_rfm) + INC A + JP Z, .error ; can not get extent + CALL bdos_make ; make new empty dir entry for extent + CALL bdos_end_of_dir ; chk no space + JP Z, .error ; jmp to error if no space in directory + JP .almost_done +.extent_in_mem: + ; open extent + CALL bdos_open_copy +.almost_done: + CALL bdos_stor_fcb_var ; move updated data to new extent + XOR A ; clear error flag + JP bdos_ret_a +.error: + CALL set_ioerr_1 + JP bdos_set_fwf ; clear bit 7 in s2 + +; ------------------------------------------------------- +; Sequential disk read operation +; ------------------------------------------------------- +bdos_seq_disk_read: + LD A, 0x1 + LD (CPM_VARS.bdos_seqio), A + ; drop through to diskread + +bdos_disk_read: + LD A, TRUE + LD (CPM_VARS.bdos_rfm), A ; dont allow read unwritten data + CALL bdos_stor_fcb_var + LD A, (CPM_VARS.bdos_vrecord) ; next record to read + LD HL, CPM_VARS.bdos_rcount ; number of records in extent + ; in this extent? + CP (HL) + JP C, .recordok + ; no, in next extent, check this exctent fully used + CP 128 + JP NZ, .error_opn + ;open next extent + CALL bdos_open_reel + XOR A + ; reset record number to read + LD (CPM_VARS.bdos_vrecord), A + ; check open status + LD A, (CPM_VARS.bdos_aret) + OR A + JP NZ, .error_opn +.recordok: + ; compute block number to read + CALL bdos_index + ; check if it in bounds + CALL bdos_allocated + JP Z, .error_opn + + CALL bdos_atran ; convert to logical sector + CALL bdos_seek ; seec track and sector + CALL bdos_rdbuff ; read sector + JP bdos_set_nxt_rec + +.error_opn: + JP set_ioerr_1 + +; ------------------------------------------------------- +; Sequential write disk +; ------------------------------------------------------- +bdos_seq_disk_write: + LD A, 0x1 + LD (CPM_VARS.bdos_seqio), A +bdos_disk_write: + LD A, FALSE + LD (CPM_VARS.bdos_rfm), A ; allow open new extent + CALL bdos_check_write ; check write protection + LD HL, (CPM_VARS.bdos_info) ; HL -> FCB + CALL bdos_check_rofile ; check RO file + CALL bdos_stor_fcb_var + LD A, (CPM_VARS.bdos_vrecord) ; get record number to write to + CP 128 ; lstrec+1 + JP NC, set_ioerr_1 ; not in range - error + CALL bdos_index ; compute block number + CALL bdos_allocated ; check number + LD C, 0 + JP NZ, .disk_wr1 + CALL bdos_dm_position ; get next block number within FCB + LD (CPM_VARS.bdos_dminx), A ; and store it + LD BC, 0x00 ; start looking for space from start + OR A + JP Z, .nop_block ; zero - not allocated + ; extract previous blk from fcb + LD C, A + DEC BC + CALL bdos_getdm + LD B, H + LD C, L +.nop_block: + CALL bdos_get_block ; get next free nearest block + LD A, L + OR H + JP NZ, .block_ok + ; error, no more space + LD A, 2 + JP bdos_ret_a +.block_ok: + LD (CPM_VARS.bdos_arecord), HL ; set record to access + EX DE, HL ; to DE + LD HL, (CPM_VARS.bdos_info) ; + LD BC, FCB_AL ; 16 + ADD HL, BC + ; small/big disk + LD A, (CPM_VARS.bdos_small_disk) + OR A + LD A, (CPM_VARS.bdos_dminx) ; rel block + JP Z, .alloc_big ; jump for 16bit + CALL bdos_hl_add_a ; HL = HL + A + LD (HL), E ; save record to access + JP .disk_wru + +.alloc_big: + ; save record to acces 16bit + LD C, A + LD B, 0 + ADD HL, BC + ADD HL, BC + LD (HL), E + INC HL + LD (HL), D + + ; Disk write to previously unallocated block +.disk_wru: + LD C, 2 ; C=2 - write to unused disk space +.disk_wr1: + LD A, (CPM_VARS.bdos_aret) ; check status + OR A + RET NZ ; return on error + + PUSH BC ; store C write flag for BIOS + CALL bdos_atran ; convert block number to logical sector + LD A, (CPM_VARS.bdos_seqio) ; get access mode (0=random, 1=sequential, 2=special) + DEC A + DEC A + JP NZ, .normal_wr + ; special + POP BC + PUSH BC + LD A, C ; A = write status flag (2=write unused space) + DEC A + DEC A + JP NZ, .normal_wr + ; fill buffer with zeroes + PUSH HL + LD HL, (CPM_VARS.bdos_buffa) + LD D, A +.fill0: + LD (HL), A + INC HL + INC D + JP P, .fill0 + CALL bdos_setdir ; Tell BIOS buffer address to directory access + LD HL, (CPM_VARS.bdos_arecord1) ; get sector that starts current block + LD C, 2 ; write status flag (2=write unused space) +.fill1: + LD (CPM_VARS.bdos_arecord), HL ; set sector to write + PUSH BC + CALL bdos_seek ; seek track and sector number + POP BC + CALL bdos_wrbuff ; write zeroes + LD HL, (CPM_VARS.bdos_arecord) ; get sector number + LD C, 0 ; normal write flag + LD A, (CPM_VARS.bdos_blmsk) ; block mask + ; write entire block? + LD B, A + AND L + CP B + INC HL + JP NZ, .fill1 ; continue until (BLKMSK+1) sectors written + ; reset sector number + POP HL + LD (CPM_VARS.bdos_arecord), HL + CALL bdos_setdata ; reset DMA address + + ; Normal write. +.normal_wr: + CALL bdos_seek ; Set track and sector + POP BC ; restore C - write status flag + PUSH BC + CALL bdos_wrbuff ; write + POP BC + LD A, (CPM_VARS.bdos_vrecord) ; last file record + LD HL, CPM_VARS.bdos_rcount ; last written record + CP (HL) + JP C, .disk_wr2 + ; update record count + LD (HL), A + INC (HL) + LD C, 2 +.disk_wr2: + DEC C ; patch: NOP + DEC C ; patch: NOP + JP NZ, .no_update ; patch: LD HL,0 + PUSH AF + CALL bdos_get_s2 ; set 'extent written to' flag + AND 0x7f ; clear 7th bit + LD (HL), A + POP AF ; record count + +.no_update: + ; it is full + CP 127 + JP NZ, .set_nxt_rec + ; sequential mode? + LD A, (CPM_VARS.bdos_seqio) + CP 1 + JP NZ, .set_nxt_rec + + CALL bdos_set_nxt_rec ; set next record + CALL bdos_open_reel ; get space in dir + LD HL, CPM_VARS.bdos_aret ; check status + LD A, (HL) + OR A + JP NZ, .no_space ; no more space + + DEC A + LD (CPM_VARS.bdos_vrecord), A ; -1 + +.no_space: + LD (HL), 0x00 ; clear status + +.set_nxt_rec: + JP bdos_set_nxt_rec + +; ------------------------------------------------------- +; Random access seek operation, C=0ffh if read mode +; FCB is assumed to address an active file control block +; (modnum has been set to 1100$0000b if previous bad seek) +; ------------------------------------------------------- +bdos_rseek: + XOR A + LD (CPM_VARS.bdos_seqio), A ; set random mode + +bdos_rseek1: + PUSH BC + LD HL, (CPM_VARS.bdos_info) + EX DE, HL + LD HL, FCB_RN ; Random access record number + ADD HL, DE + LD A, (HL) + AND 7Fh ; [6:0] bits record number to access + PUSH AF + ; get bit 7 + LD A, (HL) + RLA + INC HL + ; get high byte [3:0] bits + LD A, (HL) + RLA + AND 00011111b + ; get extent byte + LD C, A + LD A, (HL) + RRA + RRA + RRA + RRA + AND 0x0f + LD B, A + POP AF + INC HL + ; get next byte + LD L, (HL) + ; check overflow + INC L + DEC L + LD L, 6 + JP NZ, .seek_err ; error 6 if overflow + + ; save current record in FCB + LD HL, FCB_CR + ADD HL, DE + LD (HL), A + + ; check extent byte + LD HL, FCB_EXT + ADD HL, DE + LD A, C + SUB (HL) + JP NZ, .close ; not same as previous + ; check extra s2 byte + LD HL, FCB_S2 + ADD HL, DE + LD A, B + SUB (HL) + AND 0x7f + JP Z, .seek_ok ; same, is ok + +.close: + PUSH BC + PUSH DE + CALL bdos_close ; close current extent + POP DE + POP BC + LD L, 3 ; Cannot close error #3 + LD A, (CPM_VARS.bdos_aret) ; check status + INC A + JP Z, .bad_seek ; status != 0 - error + ; set extent byte to FCB + LD HL, FCB_EXT + ADD HL, DE + LD (HL), C + ; set S2 - extra extent byte + LD HL, FCB_S2 + ADD HL, DE + LD (HL), B + + CALL open + LD A, (CPM_VARS.bdos_aret) + INC A + JP NZ, .seek_ok + POP BC + PUSH BC + LD L, 0x4 ; Seek to unwritten extent #4 + INC C + JP Z, .bad_seek + CALL bdos_make + LD L, 0x5 ; Cannot create new extent #5 + LD A, (CPM_VARS.bdos_aret) + INC A + JP Z, .bad_seek +.seek_ok: + POP BC + XOR A + JP bdos_ret_a +.bad_seek: + PUSH HL + CALL bdos_get_s2 + LD (HL), 11000000b + POP HL +.seek_err: + POP BC + LD A,L + LD (CPM_VARS.bdos_aret), A + JP bdos_set_fwf + +; ------------------------------------------------------- +; Random disk read operation +; ------------------------------------------------------- +bdos_rand_disk_read: + LD C, 0xff ; mode + CALL bdos_rseek ; positioning + CALL Z, bdos_disk_read ; read if ok + RET + +; ------------------------------------------------------- +; Random disk write operation +; ------------------------------------------------------- +bdos_rand_disk_write: + LD C, 0 ; mode + CALL bdos_rseek ; positioning + CALL Z, bdos_disk_write ; read if ok + RET + +; ------------------------------------------------------- +; Compute random record position +; Inp: HL -> FCB +; DE - relative location of record number +; Out: C - r0 byte +; B - r1 byte +; A - r2 byte +; ZF set - Ok, reset - overflow +; ------------------------------------------------------- +bdos_compute_rr: + EX DE, HL ; DE -> FCB + ADD HL, DE ; HL = FCB+DE + LD C, (HL) ; get record number + LD B, 0 ; in BC + LD HL, FCB_EXT + ADD HL, DE + LD A, (HL) ; A = extent + ; calculate BC = recnum + extent*128 + RRCA ; A[0] -> A[7] + AND 0x80 ; ignore other bits + ADD A, C ; add to record number + LD C, A ; C=r0 + LD A, 0 + ADC A, B + LD B, A ; B=r1 + ; + LD A, (HL) ; A = extent + RRCA + AND 0x0f ; A = EXT[4:1] + ADD A, B ; add to r1 byte + LD B, A + + LD HL, FCB_S2 + ADD HL, DE + LD A, (HL) ; A = extra extent bits + ADD A, A ; *2 + ADD A, A ; *4 + ADD A, A ; *8 + ADD A, A ; *16 + PUSH AF ; save flags (need only CF) + ADD A, B ; add to r1 + LD B, A + PUSH AF ; save flags + POP HL ; flags on L + LD A, L ; A bit 0 - CF + POP HL + OR L ; merge both carry flags + AND 0x1 ; mask only CF + RET + +; ------------------------------------------------------- +; Compute logical file size for current FCB. +; Setup r0, r1, r2 bytes - maximum record number +; ------------------------------------------------------- +bdos_get_file_size: + LD C, FN_LEN + CALL bdos_search ; get first dir record (first extent) + LD HL, (CPM_VARS.bdos_info) ; HL -> FCB + ; zeroing r0, r1, r2 + LD DE, FCB_RN ; D=0 + ADD HL, DE + PUSH HL + LD (HL), D + INC HL + LD (HL), D + INC HL + LD (HL), D + ; +.get_extent: + CALL bdos_end_of_dir + JP Z, .done ; if not more extents found, return + CALL bdos_getdptra ; HL -> FCB + LD DE, FCB_RC + CALL bdos_compute_rr ; compute random access parameters + POP HL + PUSH HL + ; Now let's compare these values ​​with those indicated + LD E, A + LD A, C + SUB (HL) + INC HL + LD A, B + SBC A, (HL) + INC HL + LD A, E + SBC A, (HL) + JP C, .less_size + ; found larger extent (size), save it to fcb + LD (HL), E + DEC HL + LD (HL), B + DEC HL + LD (HL), C +.less_size: + CALL bdos_search_nxt + JP .get_extent +.done: + POP HL + RET + +; ------------------------------------------------------- +; (F_RANDREC) - Update random access pointer +; Set the random record count bytes of the FCB to the number +; of the last record read/written by the sequential I/O calls. +; ------------------------------------------------------- +bdos_set_random: + LD HL, (CPM_VARS.bdos_info) ; HL -> FCB + LD DE, FCB_CR ; Current record within extent + CALL bdos_compute_rr ; Compute random access parameters + LD HL, FCB_RN + ADD HL, DE ; HL -> Random access record number + ; set r0, r1, r2 + LD (HL), C + INC HL + LD (HL), B + INC HL + LD (HL), A + RET + +; ------------------------------------------------------- +; Select disk to bdos_curdsk for subsequent input or +; output ops +; ------------------------------------------------------- +bdos_select: + LD HL, (CPM_VARS.bdos_dlog) ; login vector + LD A, (CPM_VARS.bdos_curdsk) ; current drive + LD C, A + CALL bdos_hlrotr ; shift active bit for this drive + PUSH HL + EX DE, HL + CALL bdos_sel_dsk ; select drive + POP HL + CALL Z, bdos_sel_error ; check for error drive + ; new active drive? + LD A, L + RRA + RET C ; no, return + ; yes, update login vector + LD HL, (CPM_VARS.bdos_dlog) + LD C, L + LD B, H + CALL bdos_set_dsk_bit ; set bits in vector + LD (CPM_VARS.bdos_dlog), HL ; store new vector + + JP bdos_initialize + +; ------------------------------------------------------- +; Select disc +; Inp: C=0x0E +; E=drive number 0-A, 1-B .. 15-P +; Out: L=A=0 - ok or 0xFF - error +; ------------------------------------------------------- +bdos_select_disk: + ; check disk change + LD A, (CPM_VARS.bdos_linfo) + LD HL, CPM_VARS.bdos_curdsk + CP (HL) + RET Z ; is same, return + ; login new disk + LD (HL), A + JP bdos_select + +; ------------------------------------------------------- +; Auto select disk by FCB_DR +; ------------------------------------------------------- +bdos_reselect: + LD A, TRUE + LD (CPM_VARS.bdos_resel), A ; set flag + LD HL, (CPM_VARS.bdos_info) ; HL -> FCB + LD A, (HL) ; get specified disk + AND 0x1f ; A = A[4:0] + DEC A ; adjust for 0-A, 1-B and so on + LD (CPM_VARS.bdos_linfo), A ; set as parameter + CP 0x1e ; no change? + JP NC, .no_select + ; change, but save current to old + LD A, (CPM_VARS.bdos_curdsk) + LD (CPM_VARS.bdos_olddsk), A + ; save FCB_DR byte + LD A, (HL) + LD (CPM_VARS.bdos_fcbdsk), A + ; clear FCB_DR[4:0] bits - user code + AND 11100000b + LD (HL), A + CALL bdos_select_disk + +.no_select: + ; set user to FCB_DR low bits + LD A, (CPM_VARS.bdos_userno) + LD HL, (CPM_VARS.bdos_info) + OR (HL) + LD (HL), A + RET + +; ------------------------------------------------------- +; Return version number +; ------------------------------------------------------- +bdos_get_version: + LD A, CPM_VERSION ; 0x22 - v2.2 + JP bdos_ret_a + +; ------------------------------------------------------- +; Reset disk system - initialize to disk 0 +; ------------------------------------------------------- +bdos_reset_disks: + LD HL, 0x00 + LD (CPM_VARS.bdos_rodsk), HL ; clear ro flags + LD (CPM_VARS.bdos_dlog), HL ; clear login vector + XOR A ; disk 0 + LD (CPM_VARS.bdos_curdsk), A ; set disk 'A' as current + LD HL, dma_buffer ; set 'DMA' buffer address to default + LD (CPM_VARS.bdos_dmaad), HL + CALL bdos_setdata + JP bdos_select ; select drive 'A' + +; ------------------------------------------------------- +; Open file +; Inp: DE -> FCB +; Out: BA and HL - error. +; ------------------------------------------------------- +bdos_open_file: + CALL bdos_clear_s2 + CALL bdos_reselect + JP open + +; ------------------------------------------------------- +; Close file +; Inp: DE -> FCB +; Out: BA and HL - error. +; ------------------------------------------------------- +bdos_close_file: + CALL bdos_reselect + JP bdos_close + +; ------------------------------------------------------- +; Search for first occurrence of a file in directory +; Inp: DE -> FCB +; Out: BA and HL - error. +; ------------------------------------------------------- +bdos_search_first: + LD C, 0x00 ; special search + EX DE, HL + LD A, (HL) + CP '?' ; '?' is first byte? + JP Z, .qselect ; return first matched entry + + CALL bdos_getexta ; get extent byte from FCB + LD A, (HL) + CP '?' ; it is '?' + CALL NZ, bdos_clear_s2 ; set S2 to 0 if not + CALL bdos_reselect ; select disk by FCB + LD C, FCB_INFO_LEN ; match 1first 15 bytes +.qselect: + CALL bdos_search ; search first entry + JP bdos_dir_to_user ; move entry to user space + +; ------------------------------------------------------- +; Search for next occurrence of a file name +; Out: BA and HL - error. +; ------------------------------------------------------- +bdos_search_next: + LD HL, (CPM_VARS.bdos_searcha) ; restore FCB address + LD (CPM_VARS.bdos_info), HL ; set as parameter + CALL bdos_reselect ; select drive by FCB + CALL bdos_search_nxt ; search next + JP bdos_dir_to_user ; move entry to user space + +; ------------------------------------------------------- +; Remove directory +; Inp: DE -> FCB +; Out: BA and HL - error. +; ------------------------------------------------------- +bdos_rm_file: + CALL bdos_reselect ; Select drive by FCB + CALL bdos_era_file ; Delete file + JP bdos_ret_dirloc ; Return directory location in A + +; ------------------------------------------------------- +; Read next 128b record +; Inp: DE -> FCB +; Out: BA and HL - error. +; A=0 - Ok, +; 1 - end of file, +; 9 - invalid FCB, +; 10 - media changed, +; 0FFh - hardware error. +; ------------------------------------------------------- +bdos_read_file: + CALL bdos_reselect ; select drive + JP bdos_seq_disk_read ; and read + +; ------------------------------------------------------- +; Write next 128b record +; Inp: DE -> FCB +; Out: BA and HL - error. +; A=0 - Ok, +; 1 - directory full, +; 2 - disc full, +; 9 - invalid FCB, +; 10 - media changed, +; 0FFh - hardware error. +; ------------------------------------------------------- +bdos_write_file: + CALL bdos_reselect ; select drive + JP bdos_seq_disk_write ; and write + +; ------------------------------------------------------- +; Create file +; Inp: DE -> FCB. +; Out: Error in BA and HL +; A=0 - Ok, +; 0FFh - directory is full. +; ------------------------------------------------------- +bdos_make_file: + CALL bdos_clear_s2 ; clear S2 byte + CALL bdos_reselect ; select drive + JP bdos_make ; and make file + +; ------------------------------------------------------- +; Rename file. New name, stored at FCB+16 +; Inp: DE -> FCB. +; Out: Error in BA and HL +; A=0-3 if successful; +; A=0FFh if error. +; ------------------------------------------------------- +bdos_ren_file: + CALL bdos_reselect ; select drive + CALL bdos_rename ; rename file + JP bdos_ret_dirloc ; Return directory location in A + +; ------------------------------------------------------- +; Return bitmap of logged-in drives +; Out: bitmap in HL. +; ------------------------------------------------------- +bdos_get_login_vec: + LD HL, (CPM_VARS.bdos_dlog) + JP sthl_ret + +; ------------------------------------------------------- +; Return current drive +; Out: A - currently selected drive. 0 => A:, 1 => B: etc. +; ------------------------------------------------------- +bdos_get_cur_drive: + LD A, (CPM_VARS.bdos_curdsk) + JP bdos_ret_a + +; ------------------------------------------------------- +; Set DMA address +; Inp: DE - address of DMA buffer +; ------------------------------------------------------- +bdos_set_dma_addr: + EX DE, HL + LD (CPM_VARS.bdos_dmaad), HL + JP bdos_setdata + +; ------------------------------------------------------- +; fn27: Return the address of cur disk allocation map +; Out: HL - address +; ------------------------------------------------------- +bdos_get_alloc_addr: + LD HL, (CPM_VARS.bdos_alloca) + JP sthl_ret + +; ------------------------------------------------------- +; Get write protection status +; ------------------------------------------------------- +bdos_get_wr_protect: + LD HL, (CPM_VARS.bdos_rodsk) + JP sthl_ret + +; ------------------------------------------------------- +; Set file attributes (ro, system) +; ------------------------------------------------------- +bdos_set_attr: + CALL bdos_reselect + CALL bdos_update_attrs + JP bdos_ret_dirloc + +; ------------------------------------------------------- +; Return address of disk parameter block of the +; current drive +; ------------------------------------------------------- +bdos_get_dpb: + LD HL, (CPM_VARS.bdos_dpbaddr) + +; ------------------------------------------------------- +; Common code to return Value from BDOS functions +; ------------------------------------------------------- +sthl_ret: + LD (CPM_VARS.bdos_aret), HL + RET + +; ------------------------------------------------------- +; Get/set user number +; Inp: E - 0..15 - set user. 0xFF - get user +; Out: A - returns user number +; ------------------------------------------------------- +bdos_set_user: + LD A, (CPM_VARS.bdos_linfo) + CP 0xff + JP NZ, .set_user + LD A, (CPM_VARS.bdos_userno) + JP bdos_ret_a +.set_user: + AND 0x1f ; mask for 0..31 but will be < 16 + LD (CPM_VARS.bdos_userno), A + RET + +; ------------------------------------------------------- +; Random read. Record specified in the random record +; count area of the FCB, at the DMA address +; Inp: DE -> FCB +; Out: Error codes in BA and HL. +; ------------------------------------------------------- +bdos_rand_read: + CALL bdos_reselect ; select drive by FCB + JP bdos_rand_disk_read ; and read + +; ------------------------------------------------------- +; Random access write record. +; Record specified in the random record count area of the FCB, at the DMA address +; Inp: DE -> FCB +; Out: Error codes in BA and HL. +; ------------------------------------------------------- +bdos_rand_write: + CALL bdos_reselect ; select drive by FCB + JP bdos_rand_disk_write ; and write + +; ------------------------------------------------------- +; Compute file size. +; Set the random record count bytes of the FCB to the +; number of 128-byte records in the file. +; ------------------------------------------------------- +bdos_compute_fs: + CALL bdos_reselect ; select drive by FCB + JP bdos_get_file_size ; and get file size + +; ------------------------------------------------------- +; Selectively logoff (reset) disc drives +; Out: A=0 - Ok, 0xff if error +; ------------------------------------------------------- +bdos_reset_drives: + LD HL, (CPM_VARS.bdos_info) ; HL - drives to logoff map + LD A, L + CPL + LD E, A + LD A, H + CPL + LD HL, (CPM_VARS.bdos_dlog) ; get vector + AND H ; reset in hi byte + LD D, A ; and store in D + LD A, L ; reset low byte + AND E + LD E, A ; and store in E + LD HL, (CPM_VARS.bdos_rodsk) ; HL - disk RO map + EX DE, HL + LD (CPM_VARS.bdos_dlog), HL ; store new login vector + ; reset RO flags + LD A, L + AND E + LD L, A + LD A, H + AND D + LD H, A + ; and store new value + LD (CPM_VARS.bdos_rodsk), HL + RET + +; ------------------------------------------------------- +; Reach this point at the end of processing +; to return the data to the user. +; ------------------------------------------------------- +bdos_goback: + LD A, (CPM_VARS.bdos_resel) ; check for selection drive by user FCB + OR A + JP Z, bdos_ret_mon ; return if not selected + + LD HL, (CPM_VARS.bdos_info) ; HL -> FCB_DR + LD (HL), 0 + LD A, (CPM_VARS.bdos_fcbdsk) + OR A ; restore drive + JP Z, bdos_ret_mon ; return if default + LD (HL), A ; restore + LD A, (CPM_VARS.bdos_olddsk) ; previous drive + LD (CPM_VARS.bdos_linfo), A ; set parameter + CALL bdos_select_disk ; select previous drive + +; ------------------------------------------------------- +; Return from the disk monitor +; ------------------------------------------------------- +bdos_ret_mon: + LD HL, (CPM_VARS.bdos_usersp) ; return user stack + LD SP, HL + LD HL, (CPM_VARS.bdos_aret) ; get return value + LD A, L ; ver 1.4 CP/M compatibility + LD B, H + RET + +; ------------------------------------------------------- +; Random disk write with zero fill of +; unallocated block +; ------------------------------------------------------- +bdos_rand_write_z: + CALL bdos_reselect ; select drive + LD A, 2 ; special write mode + LD (CPM_VARS.bdos_seqio), A + LD C, FALSE ; write indicator + CALL bdos_rseek1 ; seek position in a file + CALL Z, bdos_disk_write ; write if no errors + RET + +; ------------------------------------------------------- +; Unuser initialized data +; ------------------------------------------------------- +filler: + DB 0xF1, 0xE1 ; POP AF, POP HL + +; ------------------------------------------------------- +; Filler to align blocks in ROM +; ------------------------------------------------------- +LAST EQU $ +CODE_SIZE EQU LAST-0xC800 +FILL_SIZE EQU 0xE00-CODE_SIZE + + DISPLAY "| BDOS\t| ",/H,bdos_start," | ",/H,CODE_SIZE," | ",/H,FILL_SIZE," |" + + ASSERT bdos_rand_write_z = 0xd55e + + +FILLER + DS FILL_SIZE, 0xFF + + ENDMODULE + + IFNDEF BUILD_ROM + OUTEND + ENDIF diff --git a/examples/hello/cpm/bios.asm b/examples/hello/cpm/bios.asm new file mode 100644 index 0000000..d18e2e9 --- /dev/null +++ b/examples/hello/cpm/bios.asm @@ -0,0 +1,832 @@ +; ======================================================= +; Ocean-240.2 +; +; CP/M BIOS +; +; Disassembled by Romych 2025-09-09 +; ======================================================= + + INCLUDE "equates.inc" + INCLUDE "ram.inc" + INCLUDE "mon_entries.inc" + + DEFINE CHECK_INTEGRITY + + IFNDEF BUILD_ROM + OUTPUT bios.bin + ENDIF + + MODULE BIOS + + ORG 0xD600 + +; ------------------------------------------------------- +; BIOS JUMP TABLE +; ------------------------------------------------------- +boot_f: + JP bios_boot +wboot_f: + JP bios_wboot + +; ------------------------------------------------------- +; console status to reg-a +; ------------------------------------------------------- +const_f: + JP MON.non_con_status + +; ------------------------------------------------------- +; console character to reg-a +; ------------------------------------------------------- +conin_f: + JP MON.mon_con_in + +; ------------------------------------------------------- +; console character from c to console out +; ------------------------------------------------------- +conout_f: + JP MON.mon_con_out + +; ------------------------------------------------------- +; list device out +; ------------------------------------------------------- +list_f: + JP MON.mon_char_print + +; ------------------------------------------------------- +; punch device out +; ------------------------------------------------------- +punch_f: + JP MON.mon_serial_out + +; ------------------------------------------------------- +; reader character in to reg-a +; ------------------------------------------------------- +reader_f: + JP MON.mon_serial_in + +; ------------------------------------------------------- +; move to home position, treat as track 00 seek +; ------------------------------------------------------- +home_f: + JP home + +; ------------------------------------------------------- +; select disk given by register c +; ------------------------------------------------------- +seldsk_f: + JP sel_disk +settrk_f: + JP set_trk +setsec_f: + JP set_sec + +; ------------------------------------------------------- +; Set DMA address from BC +; ------------------------------------------------------- +setdma_f: + JP set_dma +read_f: + JP read +write_f: + JP write +listst_f: + JP list_st +sectran_f: + JP sec_tran + +; ------------------------------------------------------- +; Reserved +; ------------------------------------------------------- + JP warm_boot + JP warm_boot + +; ------------------------------------------------------- +; Tape read +; ------------------------------------------------------- +tape_read_f: + JP MON.mon_tape_read + +; ------------------------------------------------------- +; Tape write +; ------------------------------------------------------- +tape_write_f: + JP MON.mon_tape_write + +; ------------------------------------------------------- +; Tape wait block +; ------------------------------------------------------- +tape_wait_f: + JP MON.mon_tape_wait + + JP warm_boot ; r8 + +disk_a_size DW 192 ; 192k disk A size +disk_b_size DW 720 ; 720 disk B size +disk_c_size DW 720 ; 720 disk C size +disk_b_tracks DB 80 +disk_c_tracks DB 80 + +; ------------------------------------------------------- +; cold start +; ------------------------------------------------------- +bios_boot: + LD HL, (bdos_ent_addr) ; 0xba06 + LD DE, 0x10000-CCP_RAM.bdos_enter_jump ; 0x45fa + ADD HL, DE ; 0xba06+0x45fa=10000 + LD A, H + OR L + JP Z, bios_signon + + ; >> r8 + LD HL, (bios_var0) ; if bios_var0 = 0xaaaa (initialized) + LD DE, 0x5556 + ADD HL, DE ; 0xaaaa+0x5556=0x10000 if initialized + LD A, H + OR L + JP Z, bios_signon ; if initialized, go to logon, skip init + ; << + + ; Init DMA buffer + LD HL, dma_buffer ; 0x8000 + LD B, DMA_BUFF_SIZE ; 0x80 +.init_dma_buff: + LD (HL), FILE_DELETED ; 0xE5 + INC HL + DEC B + JP NZ, .init_dma_buff + + ; Init RAM disk + LD HL, dma_buffer + LD DE, 0x0000 + LD B, 8 + +.init_ram_dsk: + PUSH BC + CALL MON.ram_disk_write + POP BC + INC DE + DEC B + JP NZ, .init_ram_dsk + + ; Init user to 0 and drive to 0 + XOR A + LD (cur_user_drv), A + + ; init bios variables + CALL bios_init_ilv ; r8 + +bios_signon: + LD SP, bios_stack + ; Print CP/M hello message + LD HL, msg_hello + CALL print_strz + JP bios_wboot + +;bios_wboot: +; LD SP, bios_stack + +; r8 >> +bios_init_ilv: + LD HL, bios_var0 + LD DE, bios_ini_vals + LD C, 13 + CALL mov_dlhe_c + LD A, (disk_c_tracks) ; 0x50 + LD (disk_c_tracks), A + RET +; << + +; ------------------------------------------------------- +; BIOS Warm start entry +; ------------------------------------------------------- +bios_wboot: ; r8 + + LD HL, (bios_var0) + LD DE, 0x5556 ; 0xaaaa + 0x5556 = 0x10000 + ADD HL, DE + LD A, H + OR L + CALL NZ, bios_init_ilv ; init if not initialized before + LD SP, bios_stack + + ; Move CPP from 0xC000 to 0xB200 + LD HL, CCP_DST_ADDR + LD DE, CCP_SRC_ADDR + LD BC, CCP_SIZE +.move_ccp: + LD A, (DE) + LD (HL), A + INC DE + INC HL + DEC BC + LD A, B + OR C + JP NZ, .move_ccp + + ; Init variables with zeroes + LD HL, CPM_VARS.cpm_vars_start + LD BC, CPM_VARS.ccp_vars_size ; 213 + +.clr_cpm_vars: + LD (HL), 0x0 + INC HL + DEC BC + LD A, B + OR C + JP NZ, .clr_cpm_vars + + LD A, FILE_DELETED + LD (CPM_VARS.bdos_efcb), A ; mark empty FCB + LD A, low dma_buffer ; 0x80 + LD (CPM_VARS.bdos_dmaad), A ; 0x0080 + + ; Move DPH + DPB to RAM + LD HL, CPM_VARS.DPH_RAM + LD DE, dph_disk_a + LD BC, DPB_END-dph_disk_a ; 0x39 -> 57d + +.move_dph: + LD A, (DE) + LD (HL), A + INC HL + INC DE + DEC BC + LD A, B + OR C + JP NZ, .move_dph + + LD BC, dma_buffer ; DMA default buffer addr + CALL setdma_f + + ; Setup JP to Warm boot after CPU reset + LD A, JP_OPCODE + LD (warm_boot), A + LD HL, wboot_f + LD (warm_boot_addr), HL + + ; Setup JP to BDOS entrance + LD (jp_bdos_enter), A + LD HL, CCP_RAM.bdos_enter_jump + LD (bdos_ent_addr), HL + + ; Disk A + LD HL, CPM_VARS.DPB_A_RAM + LD C, 0xf + LD DE, dpb_ram + LD A, (disk_a_size+1) + OR A + JP Z, .drv_a_192 + LD DE, dpb_empty +.drv_a_192: + CALL mov_dlhe_c + + ; Disk B + LD HL, CPM_VARS.DPB_B_RAM + LD C, 0xf + LD DE, dpb_flop_360k + LD A, (disk_b_size+1) + CP 0x1 + JP Z, .drv_b_360 + LD DE, dpb_flop_720k +.drv_b_360: + CALL mov_dlhe_c + + ; Disk C + LD HL, CPM_VARS.DPB_C_RAM + LD C, 0xf + LD A, (disk_c_size+1) + CP 0x2 ; 720? + JP Z, .drv_c_720 + LD DE, dpb_flop_360k + ; bios_var3 != 0 -> move DPB 360k + LD A, (disk_sw_trk) + OR A + JP NZ, .drv_c_mov + ; bios_var3 == 0 -> move DPB 720k + LD DE, dpb_flop_720k + JP .drv_c_mov +.drv_c_720: + LD DE, dpb_flop_720k + ; bios_var3 != 0 -> move DPB 720k + LD A, (disk_sw_trk) + OR A + JP NZ, .drv_c_mov + ; bios_var3 == 1 -> move DPB 360k + LD DE, dpb_flop_360k +.drv_c_mov: + CALL mov_dlhe_c + XOR A + LD (CPM_VARS.slicer_has_data),A + LD (CPM_VARS.slicer_uninited_count),A + LD A,(cur_user_drv) + LD C,A + ; go to CCP + JP CCP_DST_ADDR + +; ------------------------------------------------------- +; Move C bytes from [DE] to [HL] +; ------------------------------------------------------- +mov_dlhe_c: + LD A,(DE) ; [DE]->[HL] + LD (HL),A + INC HL + INC DE + DEC C + JP NZ, mov_dlhe_c + RET + +list_st: + XOR A + RET + +; ------------------------------------------------------- +; Select disk +; Inp: C - disk, +; E - active drive flag +; Out: HL -> DPH +; ------------------------------------------------------- +sel_disk: + LD HL, 0x00 + LD A, C + CP CTRL_C + RET NC + + LD (CPM_VARS.cur_disk), A + OR A + JP Z, .get_dph_addr ; skip next for disk 0 - RAM disk + LD A, E ; selected disk map + AND 0x1 ; bit 0 is set if disk already selected + JP NZ, .get_dph_addr + ; Reset disk + LD (CPM_VARS.slicer_has_data), A + LD (CPM_VARS.slicer_uninited_count), A + ; calc DPH address of new drive +.get_dph_addr: + LD L, C + LD H, 0x0 + ADD HL, HL ; *2 + ADD HL, HL ; *4 + ADD HL, HL ; *8 + ADD HL, HL ; *16 (size of DBH) + LD DE, CPM_VARS.DPH_RAM + ADD HL, DE + RET + +; ------------------------------------------------------- +; move to track 00 +; ------------------------------------------------------- +home: + LD A, (CPM_VARS.cur_disk) + OR A + JP Z, .is_default + LD A, (CPM_VARS.slicer_need_save) + OR A + JP NZ, .is_default + LD (CPM_VARS.slicer_has_data), A ; set to 0, no data + +.is_default: + LD C, 0 ; set track to 0 + +; ------------------------------------------------------- +; set track address (0..76) for subsequent read/write +; ------------------------------------------------------- +set_trk: + LD HL, CPM_VARS.curr_track + LD (HL), C + RET + +; ------------------------------------------------------- +; set sector address (1,..., 26) for subsequent read/write +; ------------------------------------------------------- +set_sec: + LD HL, CPM_VARS.curr_sec + LD (HL), C + RET + +; ------------------------------------------------------- +; set subsequent dma address (initially 80h) +; ------------------------------------------------------- +set_dma: + LD L, C + LD H, B + LD (CPM_VARS.dma_addr), HL + RET + +sec_tran: + LD L, C + LD H, B + RET + +; ------------------------------------------------------- +; read track/sector to preset dma address +; ------------------------------------------------------- +read: + LD A, (CPM_VARS.cur_disk) + OR A + JP NZ, read_phys ; for physical disk use special routine + CALL ram_disk_calc_addr + CALL MON.ram_disk_read + XOR A + RET + +; ------------------------------------------------------- +; write track/sector from preset dma address +; ------------------------------------------------------- +write: + LD A, (CPM_VARS.cur_disk) + OR A + JP NZ,write_phys + CALL ram_disk_calc_addr + CALL MON.ram_disk_write + XOR A + RET + +; ------------------------------------------------------- +; Calculate address for current sector and track +; ------------------------------------------------------- +ram_disk_calc_addr: + LD HL, CPM_VARS.curr_track + ; HL = cur_track * 16 + LD L, (HL) + LD H, 0x0 + ADD HL, HL + ADD HL, HL + ADD HL, HL + ADD HL, HL + ; DE = HL + cur_sec + EX DE, HL + LD HL, CPM_VARS.curr_sec + LD L, (HL) + LD H, 0x0 + ADD HL, DE + EX DE, HL + ; store address + LD HL, (CPM_VARS.dma_addr) + RET + +read_phys: + CALL read_phys_op + RET + +write_phys: + CALL write_phys_op + RET + +read_phys_op: + XOR A + ; reset counter + LD (CPM_VARS.slicer_uninited_count), A + LD A, 0x1 + LD (CPM_VARS.tmp_slicer_operation), A ; 0 - write; 1 - read + LD (CPM_VARS.tmp_slicer_can_read), A ; enable read fron disk + LD A, 0x2 + LD (CPM_VARS.tmp_slicer_flush), A ; disable flush data to disk + JP base_read_write + +write_phys_op: + XOR A + LD (CPM_VARS.tmp_slicer_operation), A + LD A, C + LD (CPM_VARS.tmp_slicer_flush), A + CP 0x2 + JP NZ, .mode_ne_2 + LD A, 0x10 ; 2048/128 + LD (CPM_VARS.slicer_uninited_count), A + LD A, (CPM_VARS.cur_disk) + LD (CPM_VARS.slicer_uninited_disk), A + LD A, (CPM_VARS.curr_track) + LD (CPM_VARS.slicer_uninited_track), A + LD A, (CPM_VARS.curr_sec) + LD (CPM_VARS.slicer_uninited_sector_128), A +.mode_ne_2: + LD A, (CPM_VARS.slicer_uninited_count) + OR A + JP Z, slicer_read_write + DEC A + LD (CPM_VARS.slicer_uninited_count), A + LD A, (CPM_VARS.cur_disk) + LD HL, CPM_VARS.slicer_uninited_disk + CP (HL) + JP NZ, slicer_read_write + LD A, (CPM_VARS.curr_track) + LD HL, CPM_VARS.slicer_uninited_track + CP (HL) + JP NZ, slicer_read_write + LD A, (CPM_VARS.curr_sec) + LD HL, CPM_VARS.slicer_uninited_sector_128 + CP (HL) + JP NZ, slicer_read_write + INC (HL) + LD A, (HL) + CP 36 ; Sectors per track + JP C, .no_inc_track + LD (HL), 0x0 + LD A, (CPM_VARS.slicer_uninited_track) + INC A + LD (CPM_VARS.slicer_uninited_track), A + +.no_inc_track: + XOR A + LD (CPM_VARS.tmp_slicer_can_read), A + JP base_read_write + +; -------------------------------------------------- +slicer_read_write: + XOR A + LD (CPM_VARS.slicer_uninited_count), A + INC A + LD (CPM_VARS.tmp_slicer_can_read), A + +; -------------------------------------------------- +base_read_write: + XOR A + LD (CPM_VARS.tmp_slicer_result), A + LD A, (CPM_VARS.curr_sec) + OR A + RRA + OR A + RRA + LD (CPM_VARS.tmp_slicer_real_sector), A + LD HL, CPM_VARS.slicer_has_data + LD A, (HL) + LD (HL), 0x1 + OR A + JP Z, .no_data + LD A, (CPM_VARS.cur_disk) + LD HL, CPM_VARS.slicer_disk + CP (HL) + JP NZ, .pos_diff + LD A, (CPM_VARS.curr_track) + LD HL, CPM_VARS.slicer_track + CP (HL) + JP NZ, .pos_diff + LD A, (CPM_VARS.tmp_slicer_real_sector) + LD HL, CPM_VARS.slicer_real_sector + CP (HL) + JP Z,calc_sec_addr_in_bfr +.pos_diff: + LD A, (CPM_VARS.slicer_need_save) + OR A + CALL NZ, slicer_save_buffer ; save buffer if needed +.no_data: + LD A, (CPM_VARS.cur_disk) + LD (CPM_VARS.slicer_disk), A + LD A, (CPM_VARS.curr_track) + LD (CPM_VARS.slicer_track), A + LD A, (CPM_VARS.tmp_slicer_real_sector) + LD (CPM_VARS.slicer_real_sector), A + LD A, (CPM_VARS.tmp_slicer_can_read) + OR A + CALL NZ,slicer_read_buffer + XOR A + LD (CPM_VARS.slicer_need_save), A + +; -------------------------------------------------- +calc_sec_addr_in_bfr: + LD A, (CPM_VARS.curr_sec) + AND 0x3 + LD L, A + LD H, 0 + ADD HL, HL + ADD HL, HL + ADD HL, HL + ADD HL, HL + ADD HL, HL + ADD HL, HL + ADD HL, HL ; *128 + LD DE, CPM_VARS.slicer_buffer + ADD HL, DE + EX DE, HL + LD HL, (CPM_VARS.dma_addr) + LD C, 0x80 + LD A, (CPM_VARS.tmp_slicer_operation) + OR A + JP NZ, .no_save + LD A, 0x1 + LD (CPM_VARS.slicer_need_save), A + EX DE, HL +.no_save: + LD A, (DE) + INC DE + LD (HL), A + INC HL + DEC C + JP NZ, .no_save + LD A, (CPM_VARS.tmp_slicer_flush) + CP 0x1 + LD A, (CPM_VARS.tmp_slicer_result) + RET NZ + OR A + RET NZ + XOR A + LD (CPM_VARS.slicer_need_save), A + CALL slicer_save_buffer + LD A, (CPM_VARS.tmp_slicer_result) + RET + +; -------------------------------------------------- +slicer_save_buffer: + CALL slicer_get_floppy_args + LD C, 0xA6 ; VG93 CMD + CALL MON.write_floppy + LD (CPM_VARS.tmp_slicer_result), A + RET + +; -------------------------------------------------- +slicer_read_buffer: + CALL slicer_get_floppy_args + LD C, 0x86 ; VG93 CMD + CALL MON.read_floppy + LD (CPM_VARS.tmp_slicer_result), A + RET + +; -------------------------------------------------- +slicer_get_floppy_args: + LD HL, CPM_VARS.tmp_buff9 + LD A, (CPM_VARS.slicer_disk) + DEC A + JP Z, .non_interleave + LD HL, interleave_0 +.non_interleave: + LD A, (CPM_VARS.slicer_real_sector) + ADD A, L + LD L, A + LD E, (HL) + LD A, (CPM_VARS.slicer_track) + LD D, A + LD HL, CPM_VARS.slicer_buffer + LD A, (CPM_VARS.slicer_disk) + RET + + +; ------------------------------------------------------- +; Print zerro ended string +; Inp: HL -> string +; ------------------------------------------------------- +print_strz: + LD A, (HL) + OR A + RET Z + LD C, A + PUSH HL + CALL conout_f + POP HL + INC HL + JP print_strz + +msg_hello: + DB ASCII_ESC, "6", "0" ; 40x25 cursor on + DB ASCII_ESC, "8", "3" ; set palette + DB ASCII_ESC, "5", 33, 37 ; set cursor r,c + DB ASCII_ESC, "4", "1" ; set color + DB ASCII_ESC, "1", 22, 226, 226, 252, 1 ; draw fill rect x1,y1,x2,y2,m + DB ASCII_ESC, "4", "0" ; set color + DB ASCII_ESC, "1", 30, 230, 219, 248, 1 ; draw fill rect x1,y1,x2,y2,m + DB ASCII_ESC, "4", "3" ; set color + DB "OKEAH-240 CP/M (V2.2) REL.8'\r\n\n" + DB ASCII_ESC, "4", "2", 0 ; set color + + +; -------------------------------------------------- +; Disk parameters blocks in ROM (DPBs) +; Tables of memory that describe the characteristics +; of discs on our system. There is one DPB for each +; disc type + +; ---------------------------------------- +; Block size | No of sectors | BSH | BLM | +; ---------------------------------------- +; 1K | 8 | 3 | 7 | +; 2K | 16 | 4 | 15 | +; 4K | 32 | 5 | 31 | +; 8K | 64 | 6 | 63 | +; 16K | 128 | 7 | 127 | +; ---------------------------------------- + +; ------------------------------------- +; Block size| Extent mask (EXM) | +; | Small disk | Large disk | +; ------------------------------------- +; 2K | 1 | 0 | +; 4K | 3 | 1 | +; 8K | 7 | 3 | +; 16K | 15 | 7 | +; ------------------------------------- +; CKS - number of dir sectors to check before write, 0 for HDD + +; For RAM-Disk 192k +dpb_ram: + DW 16 ; SPT Sector (128b) per track (16d) + DB 3 ; BSH 1k + DB 7 ; BLM 1k; Allocation block size = (BLM + 1) * 128 = 1k + DB 0 ; EXM extent mask + DW 191 ; DSM Disk size blocks - 1 + DW 31 ; DRM Dir elements - 1 + DB 10000000b ; AL0 Dir map byte 1 + DB 00000000b ; AL1 Dir map byte 2 + DW 0x0008 ; CKS checksum vector size (8 sectors=1k) + DW 0x0000 ; OFF (tracks reserved for system) + +dpb_empty: + DS 15, 0xff + +; For FLOPPY 720k +dpb_flop_720k: + DW 36 ; SPT Sector (128b) per track 36 * 128 = 18KB + DB 4 ; BSH 2k + DB 15 ; BLM 2k; Allocation block size = (BLM + 1) * 128 = 2k + DB 0 ; EXM extent mask + DW 359 ; DSM Disk size blocks - 1 (359d) + DW 127 ; DRM Directory entries - 1 (127d) + DB 11000000b ; AL0 Dir map byte 1 (2 dir blk) + DB 00000000b ; AL1 Dir map byte 2 + DW 32 ; CKS checksum vector size (32 sectors = 2k) + DW 0x0000 ; OFF (No of tracks reserved for system) + +; For FLOPPY 360k +dpb_flop_360k: + DW 36 ; SPT Sector (128b) per track 36 * 128 = 18KB + DB 4 ; BSH 2k + DB 15 ; BLM 2k; Allocation block size = (BLM + 1) * 128 = 2k + DB 1 ; EXM extent mask + DW 179 ; DSM Disk size blocks - 1 (179d) + DW 127 ; DRM Directory entries - 1 (127d) + DB 11000000b ; AL0 Dir map byte 1 (2 dir blk) + DB 00000000b ; AL1 Dir map byte 2 + DW 32 ; CKS checksum vector size (32 sectors = 2k) + DW 0x0000 ; OFF (No of tracks reserved for system) + +bios_ini_vals: + DB 0xaa, 0xaa, 0, 0xff, 1, 8, 6, 4, 2, 9, 7, 5, 3 + +; -------------------------------------------------- +; Disk parameters headers in ROM +; -------------------------------------------------- +; Disk A RAM +dph_disk_a: + DW 0 ; Sector translate table pointer + DW 0, 0, 0 ; Scratchpad area + DW CPM_VARS.dir_buffer ; Directory buffer pointer + DW CPM_VARS.DPB_A_RAM ; DPB Pointer + DW CPM_VARS.CHK_VEC_A ; Check Vector pointer + DW CPM_VARS.AL_MAP_A ; Allocation map pointer + +; Disk B Floppy +dph_disk_b: + DW 0 ; Sector translate table pointer + DW 0, 0, 0 ; Scratchpad area + DW CPM_VARS.dir_buffer ; Directory buffer pointer + DW CPM_VARS.DPB_B_RAM ; DPB Pointer + DW CPM_VARS.CHK_VEC_B ; Check Vector pointer + DW CPM_VARS.AL_MAP_B ; Allocation map pointer + +; Disk C Floppy +dph_disk_c: + DW 0 ; Sector translate table pointer + DW 0, 0, 0 ; Scratchpad area + DW CPM_VARS.dir_buffer ; Directory buffer pointer + DW CPM_VARS.DPB_C_RAM ; DPB Pointer + DW CPM_VARS.CHK_VEC_C ; Check Vector pointer + DW CPM_VARS.AL_MAP_C ; Allocation map pointer + +res_data: ; offset 0xda28 + DB 1, 8, 6, 4, 2, 9, 7, 5, 3 + +DPB_END EQU $ + DB 0x0e, 3 + + +; ------------------------------------------------------- +; Filler to align blocks in ROM +; ------------------------------------------------------- +LAST EQU $ +CODE_SIZE EQU LAST-0xD600 +FILL_SIZE EQU 0x500-CODE_SIZE + + DISPLAY "| BIOS\t| ",/H,boot_f," | ",/H,CODE_SIZE," | ",/H,FILL_SIZE," |" + + IFDEF CHECK_INTEGRITY + ; Check integrity + ASSERT bios_wboot = 0xd6a8 + ASSERT sel_disk = 0xd781 + ASSERT home = 0xd7a7 + ASSERT ram_disk_calc_addr = 0xd7eb + ASSERT write_phys_op = 0xd81e + ASSERT base_read_write = 0xd88a + ASSERT calc_sec_addr_in_bfr = 0xd8e4 + ASSERT slicer_save_buffer = 0xd928 + ASSERT print_strz = 0xd95e + ASSERT msg_hello = 0xd96b + ASSERT dpb_ram = 0xd9af + ASSERT dph_disk_a = 0xd9f8 + ASSERT res_data = 0xda28 + ENDIF + +FILLER: + DS FILL_SIZE, 0xff + + ENDMODULE + + IFNDEF BUILD_ROM + OUTEND + ENDIF diff --git a/examples/hello/cpm/ccp_ram.asm b/examples/hello/cpm/ccp_ram.asm new file mode 100644 index 0000000..1d24e8b --- /dev/null +++ b/examples/hello/cpm/ccp_ram.asm @@ -0,0 +1,1529 @@ +; ====================================================== +; Ocean-240.2 +; CP/M V2.2 R8. +; CCP (Console Command Processor) Resident part +; ORG C000 at RPM, moved to B200-BA09 +; +; Disassembled by Romych 2026-02-01 +; ====================================================== + + INCLUDE "ram.inc" + + IFNDEF BUILD_ROM + OUTPUT ccp_ram.bin + ENDIF + + MODULE CCP_RAM + + ORG 0xB200 + +ccp_ram_ent: + JP ccp_ent + JP ccp_clear_buff + +ccp_inbuff: + DB 0x7F, 0x00 + +ccp_inp_line: +hex_length: + DB ASCII_SP, ASCII_SP + +msg_copyright: +hex_sectors: + DB " " +hex_buff: + + DB " COPYRIGHT (C) 1979, DIGITAL RESEARCH ", 0x00 + DS 73, 0x0 + +ccp_inp_line_addr: + DW ccp_inp_line + +cur_name_ptr: + DW 0h + +; --------------------------------------------------- +; Call BDOS function 2 (C_WRITE) - Console output +; Inp: A - char to output +; --------------------------------------------------- +ccp_print: + LD E, A + LD C, C_WRITE + JP jp_bdos_enter + +; --------------------------------------------------- +; Put char to console +; Inp: A - char +; --------------------------------------------------- +ccp_putc: + PUSH BC + CALL ccp_print + POP BC + RET + +ccp_out_crlf: + LD A, ASCII_CR + CALL ccp_putc + LD A, ASCII_LF + JP ccp_putc +ccp_out_space: + LD A,' ' + JP ccp_putc + +; --------------------------------------------------- +; Out message from new line +; Inp: BC -> Message +; --------------------------------------------------- +ccp_out_crlf_msg: + PUSH BC + CALL ccp_out_crlf + POP HL + +; --------------------------------------------------- +; Out asciiz message +; Inp: HL -> Message +; --------------------------------------------------- +ccp_out_msg: + LD A, (HL) ;= "READ ERROR" + OR A + RET Z + INC HL + PUSH HL + CALL ccp_print + POP HL + JP ccp_out_msg + +; --------------------------------------------------- +; Call BDOS function 13 (DRV_ALLRESET) - Reset discs +; --------------------------------------------------- +ccp_bdos_drv_allreset: + LD C, DRV_ALLRESET + JP jp_bdos_enter + +; --------------------------------------------------- +; Call BDOS function 14 (DRV_SET) - Select disc +; Inp: A - disk +; --------------------------------------------------- +ccp_bdos_drv_set: + LD E, A + LD C, DRV_SET + JP jp_bdos_enter + +; --------------------------------------------------- +; Call BDOS fn and return result +; Inp: C - fn no +; Out: A - error + 1 +; --------------------------------------------------- +ccp_call_bdos: + CALL jp_bdos_enter + LD (ccp_bdos_result_code), A + INC A + RET + +; --------------------------------------------------- +; BDOS function 15 (F_OPEN) - Open file /Dir +; Inp: DE -> FCB +; Out: A=0 for error, or 1-4 for success +; --------------------------------------------------- +ccp_bdos_open_f: + LD C, 15 + JP ccp_call_bdos + +; --------------------------------------------------- +; Open file by current FCB +; --------------------------------------------------- +ccp_open_cur_fcb: + XOR A + LD (ccp_current_fcb_cr), A ; clear current record counter + LD DE, ccp_current_fcb + JP ccp_bdos_open_f + +; --------------------------------------------------- +; BDOS function 16 (F_CLOSE) - Close file +; --------------------------------------------------- +ccp_bdos_close_f: + LD C, 16 + JP ccp_call_bdos + +; --------------------------------------------------- +; Call BDOS function 17 (F_SFIRST) - search for first +; Out: A = 0 in error, 1-4 if success +; --------------------------------------------------- +ccp_bdos_find_first: + LD C, 17 + JP ccp_call_bdos + +; --------------------------------------------------- +; Call BDOS function 18 (F_SNEXT) - search for next +; Out: A = 0 in error, 1-4 if success +; --------------------------------------------------- +ccp_bdos_find_next: + LD C, 18 + JP ccp_call_bdos ; BDOS 18 (F_SNEXT) - search for next ? + +; --------------------------------------------------- +; Call BDOS F_FIRST with current FCB +; --------------------------------------------------- +ccp_find_first: + LD DE, ccp_current_fcb + JP ccp_bdos_find_first + +; --------------------------------------------------- +; Call BDOS function 19 (F_DELETE) - delete file +; --------------------------------------------------- +ccp_bdos_era_file: + LD C, F_DELETE + JP jp_bdos_enter + +; --------------------------------------------------- +; Call BDOS and set ZF by result +; --------------------------------------------------- +ccp_bdos_enter_zf: + CALL jp_bdos_enter + OR A + RET + +; --------------------------------------------------- +; Read next 128 bytes of file +; Inp: DE -> FCB +; Out: a = 0 - ok; +; 1 - EOF; +; 9 - invalid FCB; +; 10 - Media changed; +; 0xFF - HW error. +; --------------------------------------------------- +ccp_bdos_read_f: + LD C, F_READ + JP ccp_bdos_enter_zf + +; --------------------------------------------------- +; Read file by current FCB +; --------------------------------------------------- +ccp_read_f_fcb: + LD DE, ccp_current_fcb + JP ccp_bdos_read_f + +; --------------------------------------------------- +; Call BDOS function 21 (F_WRITE) - write next record +; --------------------------------------------------- +ccp_bdos_f_write: + LD C, F_WRITE + JP ccp_bdos_enter_zf + +; --------------------------------------------------- +; Call BDOS function 22 (F_MAKE) - create file +; --------------------------------------------------- +ccp_bdos_make_f: + LD C, F_MAKE + JP ccp_call_bdos + +; --------------------------------------------------- +; Call BDOS function 23 (F_RENAME) - Rename file +; --------------------------------------------------- +ccp_bdos_rename_f: + LD C, F_RENAME + JP jp_bdos_enter + +; --------------------------------------------------- +; Call BDOS function 32 (F_USERNUM) for get user number +; Out: A - user no +; --------------------------------------------------- +ccp_bdos_get_user: + LD E, 0xff + +; --------------------------------------------------- +; Call BDOS function 32 (F_USERNUM) set user number +; Inp: E - user no 0-15, or 0xFF for get user +; Out: A - user no +; --------------------------------------------------- +ccp_bdos_set_user: + LD C, F_USERNUM + JP jp_bdos_enter + +; --------------------------------------------------- +; Get user no and store in upper nibble of sys var +; --------------------------------------------------- +ccp_set_cur_drv: + CALL ccp_bdos_get_user + ADD A, A + ADD A, A + ADD A, A + ADD A, A ; user no at upper nibble + LD HL, ccp_cur_drive + OR (HL) + LD (cur_user_drv), A + RET + +; --------------------------------------------------- +; Replace new drive in lower nibble of sys var +; reset user no +; Out: A - drive no +; --------------------------------------------------- +ccp_reset_cur_drv: + LD A, (ccp_cur_drive) + LD (cur_user_drv), A + RET + +; --------------------------------------------------- +; Uppercase character a..z +; Inp: A - character +; Out: A - character in upper case +; --------------------------------------------------- +char_to_upper: + CP 'a' + RET C + CP '{' + RET NC + ; character in a..z range + AND 0x5f + RET + +; --------------------------------------------------- +; Get user input from console or from batch +; file $$$.SUB +; --------------------------------------------------- +ccp_get_inp: + LD A, (ccp_batch) + OR A + JP Z, ccp_gin_no_batch + + ; select drive A for $$$.SUB + LD A, (ccp_cur_drive) + OR A + LD A, 0x0 + CALL NZ, ccp_bdos_drv_set + + ; open batch file + LD DE, ccp_batch_fcb + CALL ccp_bdos_open_f + JP Z, ccp_gin_no_batch ; go to con inp if file not found + + ; read last record + LD A, (ccp_batch_fcb_rc) + DEC A + LD (ccp_batch_fcb_cr), A + LD DE, ccp_batch_fcb + CALL ccp_bdos_read_f + JP NZ, ccp_gin_no_batch ; stop on EOF + + ; move data from file to buffer + LD DE, ccp_inbuff+1 + LD HL, dma_buffer + LD B, DMA_BUFF_SIZE ; 0x80 + CALL ccp_mv_hlde_b + LD HL, ccp_batch_fcb_s2 + LD (HL), 0x0 + INC HL + DEC (HL) ; decriment record count + ; close batch file + LD DE, ccp_batch_fcb + CALL ccp_bdos_close_f + JP Z, ccp_gin_no_batch + ; reselect old drive if not 0 + LD A, (ccp_cur_drive) + OR A + CALL NZ, ccp_bdos_drv_set + ; print command line + LD HL, ccp_inp_line ; ccp_inbuff+2 + CALL ccp_out_msg + CALL ccp_getkey_no_wait + JP Z, ccp_gin_nokey + ; terminate batch processing on any key + CALL ccp_del_batch + JP ccp_get_command + + ; get user input from keyboard +ccp_gin_no_batch: + CALL ccp_del_batch + CALL ccp_set_cur_drv + + LD C, C_READSTR + LD DE, ccp_inbuff + ; Call BDOS C_READSTR DE -> inp buffer + CALL jp_bdos_enter + + CALL ccp_reset_cur_drv + +ccp_gin_nokey: + LD HL, ccp_inbuff+1 + LD B, (HL) + +ccp_gin_uppr: + INC HL + LD A, B + OR A + JP Z, ccp_gin_uppr_end + LD A, (HL) ;= 2020h + CALL char_to_upper + LD (HL), A ;= 2020h + DEC B + JP ccp_gin_uppr + +ccp_gin_uppr_end: + LD (HL), A ; set last character to 0 + LD HL, ccp_inp_line ; + LD (ccp_inp_line_addr), HL ; + RET + +; --------------------------------------------------- +; Check keyboard +; Out: A - pressed key code +; ZF set if no key pressed +; --------------------------------------------------- +ccp_getkey_no_wait: + LD C, C_STAT + ; Call BDOS (C_STAT) - Console status + CALL jp_bdos_enter + OR A + RET Z ; ret if no character waiting + LD C, C_READ + ; Call BDOS (C_READ) - Console input + CALL jp_bdos_enter + OR A + RET + +; --------------------------------------------------- +; Call BDOS function 25 (DRV_GET) - Return current drive +; Out: A - drive 0-A, 1-B... +; --------------------------------------------------- +ccp_bdos_drv_get: + LD C, DRV_GET + JP jp_bdos_enter + +; --------------------------------------------------- +; Set disk buffer address to default buffer +; --------------------------------------------------- +cpp_set_disk_buff_addr: + LD DE, dma_buffer + +; --------------------------------------------------- +; Call BDOS function 26 (F_DMAOFF) - Set DMA address +; Inp: DE - address +; --------------------------------------------------- +ccp_bdos_dma_set: + LD C, F_DMAOFF + JP jp_bdos_enter + +; --------------------------------------------------- +; Delete batch file created by submit +; --------------------------------------------------- +ccp_del_batch: + LD HL, ccp_batch + LD A, (HL) + OR A + RET Z ; return if no active batch file + LD (HL), 0x0 ; mark as inactive + XOR A + CALL ccp_bdos_drv_set ; select drive 0 + LD DE, ccp_batch_fcb + CALL ccp_bdos_era_file + LD A, (ccp_cur_drive) + JP ccp_bdos_drv_set + +; -------------------------------------------------- +; Check "serial number" of CP/M +; -------------------------------------------------- +ccp_verify_pattern: + LD DE, cpm_pattern ; = F9h + LD HL, 0x0000 + LD B, 6 + +ccp_chk_patt_nex: + LD A, (DE) + CP (HL) + NOP ; JP NZ HALT was here + NOP + NOP + INC DE + INC HL + DEC B + JP NZ, ccp_chk_patt_nex + RET + +; -------------------------------------------------- +; Print syntax error indicator +; -------------------------------------------------- +print_syn_err: + CALL ccp_out_crlf + LD HL, (cur_name_ptr) +pse_next: + LD A, (HL) + CP ASCII_SP + JP Z, pse_end + OR A + JP Z, pse_end + PUSH HL + + CALL ccp_print + POP HL + INC HL + JP pse_next +pse_end: + LD A, '?' + CALL ccp_print + CALL ccp_out_crlf + CALL ccp_del_batch + JP ccp_get_command + +; -------------------------------------------------- +; Check user input characters for legal range +; Inp: [DE] - pointer to character +; -------------------------------------------------- +cpp_valid_inp: + LD A, (DE) + OR A + RET Z + CP ASCII_SP ; >= Space + JP C, print_syn_err + RET Z + CP '=' + RET Z + CP '_' + RET Z + CP '.' + RET Z + CP ':' + RET Z + CP ';' + RET Z + CP '<' + RET Z + CP '>' + RET Z + RET + +; --------------------------------------------------- +; Find non space character until end +; Inp: DE -> current character +; Out: DE -> non space +; A - character +; ZF set on EOL +; --------------------------------------------------- +ccp_find_no_space: + LD A, (DE) + OR A + RET Z + CP ASCII_SP + RET NZ + INC DE + JP ccp_find_no_space + +; --------------------------------------------------- +; HL=HL+A +; --------------------------------------------------- +sum_hl_a: + ADD A, L + LD L, A + RET NC + INC H ; inc H if CF is set + RET + +; --------------------------------------------------- +; Convert first name to fcb +; --------------------------------------------------- +ccp_cv_first_to_fcb: + LD A, 0x0 + +; Convert filename from cmd to fcb +; replace '*' to '?' +; Inp: A - offset in fcb filename +; Out: A - count of '?' in file name +; ZF is set for fegular file name +ccp_cv_fcb_filename: + LD HL, ccp_current_fcb + CALL sum_hl_a + PUSH HL + PUSH HL + XOR A + LD (ccp_chg_drive), A + LD HL, (ccp_inp_line_addr) ; HL -> input line + EX DE, HL + CALL ccp_find_no_space ; get next non blank char + EX DE, HL + LD (cur_name_ptr), HL ; save name ptr + EX DE, HL + POP HL + LD A, (DE) ; load first name char + OR A + JP Z, cur_cvf_n_end + SBC A, 'A'-1 ; 0x40 for drive letter + LD B, A + INC DE + LD A, (DE) + CP ':' ; is ':' after drive letter? + JP Z, cur_cvf_drv_ltr + DEC DE ; no, step back + +cur_cvf_n_end: + LD A, (ccp_cur_drive) + LD (HL), A + JP cur_cvf_basic_fn + +cur_cvf_drv_ltr: + LD A, B + LD (ccp_chg_drive), A ; set change drive flag + LD (HL), B + INC DE + +cur_cvf_basic_fn: + LD B, 8 ; file name length + +cur_cvf_chr_nxt: + CALL cpp_valid_inp + JP Z, cur_cvf_sp_remains + INC HL + CP '*' + JP NZ, cur_cvf_no_star + LD (HL), '?' + JP cur_cvf_nxt1 + +cur_cvf_no_star: + LD (HL), A + INC DE + +cur_cvf_nxt1: + DEC B + JP NZ, cur_cvf_chr_nxt + +cur_cvf_nxt_delim: + CALL cpp_valid_inp + JP Z, cur_cvf_ext + INC DE + JP cur_cvf_nxt_delim + + ; fill remains with spaces +cur_cvf_sp_remains: + INC HL + LD (HL), ASCII_SP + DEC B + JP NZ, cur_cvf_sp_remains + + ; file name extension +cur_cvf_ext: + LD B, 3 + CP '.' + JP NZ, cur_cvf_ext_fill_sp + INC DE + ; handle current ext char +cur_cvf_ext_nxt: + CALL cpp_valid_inp + JP Z, cur_cvf_ext_fill_sp + INC HL + ; change * to ? + CP '*' + JP NZ, cur_cvf_no_star2 + LD (HL), '?' + JP cur_cvf_nxt2 +cur_cvf_no_star2: + LD (HL), A + INC DE +cur_cvf_nxt2: + DEC B + JP NZ, cur_cvf_ext_nxt + +cur_cvf_ext_skip: + CALL cpp_valid_inp + JP Z, cur_cvf_rst_attrs + INC DE + JP cur_cvf_ext_skip + + ; skip remains ext pos with dpaces +cur_cvf_ext_fill_sp: + INC HL + LD (HL), ASCII_SP + DEC B + JP NZ, cur_cvf_ext_fill_sp + + ; set fcb extent, res1, res2 to 0 +cur_cvf_rst_attrs: + LD B, 3 + +cur_cvf_attrs_nxt: + INC HL + LD (HL), 0x0 + DEC B + JP NZ, cur_cvf_attrs_nxt + + EX DE, HL + LD (ccp_inp_line_addr), HL ; save input line pointer + + ; Check for ambigeous file name + POP HL ; -> file name in fcb + LD BC, 0x000b ; b=0, c=11 +cur_cvf_ambig: + INC HL + LD A, (HL) + CP '?' + JP NZ, cur_cvf_ambig_nxt1 + INC B +cur_cvf_ambig_nxt1: + DEC C + JP NZ, cur_cvf_ambig + LD A, B ; a = count of '?' + OR A ; set ZF if regular filename + RET + +; --------------------------------------------------- +; CP/M command table +; --------------------------------------------------- +cpm_cmd_tab: + DB "DIR " + DB "ERA " + DB "TYPE" + DB "SAVE" + DB "REN " + DB "USER" + +cpm_pattern: + DB 0xF9, 0x16, 0, 0, 0, 0x6B ; CP/M serial number? + ;LD SP, HL + ;LD D, 0x00 + ;NOP + ;NOP + ;LD L,E + +; --------------------------------------------------- +; Search for CP/M command +; Out: A - command number +; --------------------------------------------------- +ccp_search_cmd: + LD HL, cpm_cmd_tab + LD C, 0x0 + +ccp_sc_cmd_nxt: + LD A, C + CP CCP_COMMAND_CNT ; 6 + RET NC + LD DE, ccp_current_fcb_fn ; fcb filename + LD B, CCP_COMMAND_LEN ; max cmd len +ccp_sc_chr_nxt: + LD A, (DE) + CP (HL) ; compate fcb fn and command table + JP NZ, ccp_sc_no_match ; cmd not match + INC DE + INC HL + DEC B + JP NZ, ccp_sc_chr_nxt + ; last can be space for 3-letter commands + LD A, (DE) + CP ASCII_SP + JP NZ, ccp_sc_skip_cmd + LD A, C ; return command number in A + RET + + ; skip remains +ccp_sc_no_match: + INC HL + DEC B + JP NZ, ccp_sc_no_match + ; go to next cmd +ccp_sc_skip_cmd: + INC C + JP ccp_sc_cmd_nxt + +; -------------------------------------------------- +; Clear command buffer and go to command processor +; -------------------------------------------------- +ccp_clear_buff: + XOR A + LD (ccp_inbuff+1), A ; actual buffer len = 0 + +; -------------------------------------------------- +; Entrance to CCP +; Inp: C - current user * 16 +; -------------------------------------------------- +@ccp_ent: + LD SP, ccp_stack + PUSH BC ; + LD A, C + ; / 16 + RRA + RRA + RRA + RRA + ; cur user no in low nibble + AND 0x0f ; user 0..15 + LD E, A + CALL ccp_bdos_set_user + CALL ccp_bdos_drv_allreset + LD (ccp_batch), A + POP BC + LD A, C ; a = user*16 + AND 0xf ; low nibble - drive + LD (ccp_cur_drive), A + CALL ccp_bdos_drv_set + LD A, (ccp_inbuff+1) + OR A + JP NZ, ccp_process_cmd + +; -------------------------------------------------- +; Out prompt and get user command from console +; -------------------------------------------------- +ccp_get_command: + LD SP, ccp_stack ; reset stack pointer + CALL ccp_out_crlf ; from new line + CALL ccp_bdos_drv_get + ADD A, 65 ; convert drive no to character + CALL ccp_print ; print current drive letter + LD A, '>' ; and prompt + CALL ccp_print + CALL ccp_get_inp ; and wait string + +; -------------------------------------------------- +; Process command +; -------------------------------------------------- +ccp_process_cmd: + LD DE, dma_buffer + CALL ccp_bdos_dma_set ; setup buffer + CALL ccp_bdos_drv_get + LD (ccp_cur_drive), A ; store cur drive + CALL ccp_cv_first_to_fcb ; convert first command parameter to fcb + CALL NZ, print_syn_err ; if wildcard, out error message + LD A, (ccp_chg_drive) ; check drive change flag + OR A + JP NZ, ccp_unk_cmd ; if drive changed, handle as unknown command + CALL ccp_search_cmd ; ret A = command number + LD HL, ccp_cmd_addr + ; DE = command number + LD E, A + LD D, 0x0 + ADD HL, DE + ADD HL, DE ; HL = HL + 2*command_number + LD A, (HL) + INC HL + LD H, (HL) + LD L, A + JP (HL) ; jump to command handler + +ccp_cmd_addr: + DW cmd_dir + DW cmd_erase + DW cmd_type + DW cmd_save + DW cmd_ren + DW cmd_user + DW ccp_entry + +; --------------------------------------------------- +; di+halt if serial number validation failed +; --------------------------------------------------- +cpp_halt: + LD HL, 0x76f3 + LD (ccp_ram_ent), HL + LD HL, ccp_ram_ent + JP (HL) + +ccp_type_rd_err: + LD BC, .msg_read_error ; BC -> "READ ERROR" + JP ccp_out_crlf_msg + +.msg_read_error: + DB "READ ERROR", 0 + +; --------------------------------------------------- +; Out message 'NO FILE' +; --------------------------------------------------- +ccp_out_no_file: + LD BC, .msg_no_file ; BC -> "NO FILE" + JP ccp_out_crlf_msg +.msg_no_file: + DB "NO FILE", 0 + +; --------------------------------------------------- +; Decode a command in form: "A>filename number" +; Out: A - number +; --------------------------------------------------- +ccp_decode_num: + CALL ccp_cv_first_to_fcb + LD A, (ccp_chg_drive) + OR A + JP NZ, print_syn_err ; error if drive letter specified + LD HL, ccp_current_fcb_fn + LD BC, 11 ; b=0, c=11 (filename len) + + ; decode number +ccp_dff_nxt_num: + LD A, (HL) + CP ASCII_SP + JP Z, ccp_dff_num_fin ; space - end of number + ; check for digit + INC HL + SUB '0' + CP 10 + JP NC, print_syn_err ; not a digit + LD D, A ; d = number + LD A, B + AND 0xe0 ; check B (sum) overflow + JP NZ, print_syn_err + ; A=B*10 + LD A, B + RLCA + RLCA + RLCA ; *8 + ADD A, B ; *9 + JP C, print_syn_err ; error if overflow + ADD A, B ; * 10 + JP C, print_syn_err ; error if overflow + ; B = B + B*10 + ADD A, D + JP C, print_syn_err ; error if overflow + LD B, A + ; to next number + DEC C + JP NZ, ccp_dff_nxt_num + RET + +ccp_dff_num_fin: + LD A, (HL) + CP ASCII_SP + JP NZ, print_syn_err ; will be space after number + INC HL + DEC C + JP NZ, ccp_dff_num_fin + LD A, B + RET + +; -------------------------------------------------- +; Move 3 bytes from [HL] to [DE] +; (Used only to move file extension) +; -------------------------------------------------- +ccp_mv_hlde_3: + LD B, 3 + +; -------------------------------------------------- +; Move B bytes from [HL] to [DE] +; -------------------------------------------------- +ccp_mv_hlde_b: + LD A, (HL) + LD (DE), A + INC HL + INC DE + DEC B + JP NZ, ccp_mv_hlde_b + RET + +; -------------------------------------------------- +; Return byte from address dma_buffer[A+C] +; Out: A - byte at dma_buffer[A+C] +; HL - dma_buffer+A+C +; -------------------------------------------------- +get_std_buff_ac: + LD HL, dma_buffer + ADD A, C + CALL sum_hl_a + LD A, (HL) + RET + +; -------------------------------------------------- +; Check drive change and select if needed +; Reset drive byte in fcb to 0 (use default) +; -------------------------------------------------- +ccp_drive_sel: + XOR A + LD (ccp_current_fcb), A + LD A, (ccp_chg_drive) + OR A + RET Z ; no need to change cur drive + DEC A + LD HL, ccp_cur_drive + CP (HL) + RET Z ; current and new drive is same + JP ccp_bdos_drv_set ; change + +; -------------------------------------------------- +; Restore previous drive if changed during operation +; -------------------------------------------------- +ccp_restor_drv: + LD A, (ccp_chg_drive) + OR A + RET Z ; not changed + DEC A + LD HL, ccp_cur_drive ; chk cur drive + CP (HL) + RET Z ; new and previous drive is same + LD A, (ccp_cur_drive) + JP ccp_bdos_drv_set ; restore to previous drive + +; -------------------------------------------------- +; Handle user DIR command +; -------------------------------------------------- +cmd_dir: + CALL ccp_cv_first_to_fcb + CALL ccp_drive_sel + ; check filemask specified + LD HL, ccp_current_fcb_fn + LD A, (HL) + CP ASCII_SP + JP NZ, .dir_fmask ; yes specified + + ; fill with wildcard symbol + LD B, 11 +.fill_wc: + LD (HL), '?' + INC HL + DEC B + JP NZ, .fill_wc + +.dir_fmask: + LD E, 0x0 ; cursor at 0 + PUSH DE + ; find first file + CALL ccp_find_first + CALL Z, ccp_out_no_file ; no file found + +.dir_f_next: + JP Z, .dir_f_no_more + LD A, (ccp_bdos_result_code) + ; find filename pos in direntry + ; a = a * 32 + RRCA + RRCA + RRCA + AND 0x60 + + LD C, A + LD A, 0x0a + + ; get std_buff[10+pos*8] + CALL get_std_buff_ac + RLA ; CF<-[7:0]<-CF + JP C, .dir_dont_lst ; don't display sys files + POP DE + LD A, E ; a = cursor + INC E + PUSH DE ; cursor++ + AND 0x3 + PUSH AF + JP NZ, .dir_no_eol + ; eol, print new line + CALL ccp_out_crlf + ; print A: + PUSH BC + CALL ccp_bdos_drv_get + POP BC + ADD A, 'A' + CALL ccp_putc + LD A, ':' + CALL ccp_putc + JP .dir_out_sp +.dir_no_eol: + ; add space between filenames + CALL ccp_out_space + LD A, ':' + CALL ccp_putc +.dir_out_sp: + CALL ccp_out_space + LD B, 0x1 +.dir_get_one: + LD A, B + CALL get_std_buff_ac + AND 0x7f ; mask status bit + CP ASCII_SP ; name end? + JP NZ, .no_name_end + ; at end of file name + POP AF + PUSH AF + CP 0x3 + JP NZ, .dir_end_ext + LD A, 0x9 + CALL get_std_buff_ac ; chk ext + AND 0x7f ; 7bit + CP ASCII_SP + JP Z, .dir_skp_sp ; do not print space +.dir_end_ext: + LD A, ASCII_SP +.no_name_end: + CALL ccp_putc + INC B + LD A, B + CP 12 + JP NC, .dir_skp_sp ; print until end of file ext + CP 9 + JP NZ, .dir_get_one ; start of file ext? + CALL ccp_out_space ; print sep space + JP .dir_get_one +.dir_skp_sp: + POP AF +.dir_dont_lst: + ; stop if key pressed + CALL ccp_getkey_no_wait + JP NZ, .dir_f_no_more + + ; find next directory entry + CALL ccp_bdos_find_next + JP .dir_f_next + + ; no more to print +.dir_f_no_more: + POP DE + JP ccp_cmdline_back + +; -------------------------------------------------- +; Handle user ERA command +; -------------------------------------------------- +cmd_erase: + CALL ccp_cv_first_to_fcb + ; check for *.* + CP 11 + JP NZ, .era_no_wc + ; confirm erase all + LD BC, msg_all_yn ;= "ALL (Y/N)?" + CALL ccp_out_crlf_msg + CALL ccp_get_inp + LD HL, ccp_inbuff+1 + ; check user input + DEC (HL) + JP NZ, ccp_get_command + INC HL + LD A, (HL) ; user input, first letter + CP 'Y' + JP NZ, ccp_get_command ; return in not exactly 'Y' + INC HL + LD (ccp_inp_line_addr), HL + +.era_no_wc: + CALL ccp_drive_sel ; select drive + LD DE, ccp_current_fcb ; specify current fcb + CALL ccp_bdos_era_file ; and delete file + INC A + CALL Z, ccp_out_no_file + JP ccp_cmdline_back ; go back to command line + +msg_all_yn: + DB "ALL (Y/N)?", 0 + +; -------------------------------------------------- +; Handle user TYPE command +; -------------------------------------------------- +cmd_type: + CALL ccp_cv_first_to_fcb + JP NZ, print_syn_err ; error if wildcard + ; select drive and open + CALL ccp_drive_sel + CALL ccp_open_cur_fcb + JP Z, .not_found ; cant open file + CALL ccp_out_crlf + LD HL, ccp_bytes_ctr + LD (HL), 0xff ; 255>128 for read first sector + +.cont_or_read: + LD HL, ccp_bytes_ctr + LD A, (HL) + CP 128 + JP C, .out_next_char + + ; read 128 bytes + PUSH HL + CALL ccp_read_f_fcb + POP HL + JP NZ, .read_no_ok + ; clear counter + XOR A + LD (HL), A + +.out_next_char: + ; get next byte from buffer + INC (HL) + LD HL, dma_buffer + ; calc offset + CALL sum_hl_a + LD A, (HL) + CP ASCII_SUB ; Ctrl+Z end of text file + JP Z, ccp_cmdline_back ; yes, back to cmd line + CALL ccp_print ; print char to output device + ; interrupt if key pressed + CALL ccp_getkey_no_wait + JP NZ, ccp_cmdline_back + ; + JP .cont_or_read + + ; non zero result from f_read +.read_no_ok: + DEC A + JP Z, ccp_cmdline_back ; A=1 - EOF, return to cmd line + CALL ccp_type_rd_err ; else read error + +.not_found: + CALL ccp_restor_drv + JP print_syn_err + +; -------------------------------------------------- +; Handle user SAVE command +; -------------------------------------------------- +cmd_save: + CALL ccp_decode_num ; get num of pages + PUSH AF ; and store + CALL ccp_cv_first_to_fcb ; conv filename to fcb + JP NZ, print_syn_err ; error if wildcard + ; delete specified file + CALL ccp_drive_sel + LD DE, ccp_current_fcb + PUSH DE + CALL ccp_bdos_era_file + POP DE + ; create specified file + CALL ccp_bdos_make_f + JP Z, ccp_no_space ; 0xff+1 if error + XOR A + LD (ccp_current_fcb_cr), A ; curr record = 0 + POP AF ; a = num pages + LD L, A + LD H, 0 + ADD HL, HL ; HL = A * 2 - number of sectors + LD DE, tpa_start + +.write_next: + ; all sectors written? + LD A, H + OR L + JP Z, ccp_close_f_cur ; no more sectors to write + DEC HL + PUSH HL + ; set buffer address to memory to write + LD HL, 128 + ADD HL, DE + PUSH HL + CALL ccp_bdos_dma_set + ; and write sector + LD DE, ccp_current_fcb + CALL ccp_bdos_f_write + POP DE + POP HL + JP NZ, ccp_no_space ; check for no space left + JP .write_next + +; Close current file +ccp_close_f_cur: + LD DE, ccp_current_fcb + CALL ccp_bdos_close_f + INC A + JP NZ, rest_buf_ret_cmd + +; -------------------------------------------------- +; Out error message about no space left +; -------------------------------------------------- +ccp_no_space: + LD BC, msg_no_space ; BC -> "NO SPACE" + CALL ccp_out_crlf_msg + +rest_buf_ret_cmd: + CALL cpp_set_disk_buff_addr + JP ccp_cmdline_back + +msg_no_space: + DB "NO SPACE", 0 + +; -------------------------------------------------- +; Handle user REN command +; -------------------------------------------------- +cmd_ren: + CALL ccp_cv_first_to_fcb ; get first file name + JP NZ, print_syn_err ; error if wildcard + LD A, (ccp_chg_drive) ; remember drive change flag + PUSH AF + ; check file already exists + CALL ccp_drive_sel + CALL ccp_find_first + JP NZ, .file_exists + ; move filename to "second slot" + LD HL, ccp_current_fcb + LD DE, ccp_current_fcb_fn+15 + LD B, 16 + CALL ccp_mv_hlde_b + ; + LD HL, (ccp_inp_line_addr) ; restore cmd line pointer + EX DE, HL + CALL ccp_find_no_space ; skip spaces between parameters + CP '=' + JP Z, .do_rename + CP '_' + JP NZ, .rename_err + +.do_rename: + EX DE, HL + INC HL ; skip sep + LD (ccp_inp_line_addr), HL ; -> second param + CALL ccp_cv_first_to_fcb ; get second name + JP NZ, .rename_err ; error if wildcard + ; if drive specified it will be same as previous + POP AF + LD B, A + LD HL, ccp_chg_drive + LD A, (HL) + OR A + JP Z, .same_drive ; ok, it is same + CP B + LD (HL), B ; restore first drive + JP NZ, .rename_err + +.same_drive: + LD (HL), B + ; check for seacond file not exists + XOR A + LD (ccp_current_fcb), A + CALL ccp_find_first + JP Z, .second_exists + ; calll bdos to rename + LD DE, ccp_current_fcb + CALL ccp_bdos_rename_f + JP ccp_cmdline_back + +.second_exists: + CALL ccp_out_no_file + JP ccp_cmdline_back + +.rename_err: + CALL ccp_restor_drv + JP print_syn_err + +.file_exists: + LD BC, .msg_file_exists ; BC -> "FILE EXISTS" + CALL ccp_out_crlf_msg + JP ccp_cmdline_back + +.msg_file_exists: + DB "FILE EXISTS", 0 + +; -------------------------------------------------- +; Handle user USER command +; -------------------------------------------------- +cmd_user: + CALL ccp_decode_num ; get user number + ; user will be 0..15 + CP 16 + JP NC, print_syn_err ; >15 - error + LD E, A ; save in E + ; check for other parameters + LD A, (ccp_current_fcb_fn) + CP ASCII_SP + JP Z, print_syn_err ; error if other parameters specified + ; call bdos to set current user + CALL ccp_bdos_set_user + JP ccp_cmdline_back1 + +ccp_unk_cmd: + CALL ccp_verify_pattern ; check if system valid + ; check for file to execute specified + LD A, (ccp_current_fcb_fn) + CP ASCII_SP + JP NZ, .exec_file + ; drive change? + LD A, (ccp_chg_drive) + OR A + JP Z, ccp_cmdline_back1 ; no, return to cmd line + ; change drive + DEC A + LD (ccp_cur_drive), A + CALL ccp_reset_cur_drv + CALL ccp_bdos_drv_set + JP ccp_cmdline_back1 + +.exec_file: + ; check file extension + LD DE, ccp_current_fcb_ft + LD A, (DE) + CP ASCII_SP + JP NZ, print_syn_err + PUSH DE + ; select specified drive + CALL ccp_drive_sel + POP DE + ; set file ext to 'COM' + LD HL, msg_com ; HL -> 'COM' + CALL ccp_mv_hlde_3 + CALL ccp_open_cur_fcb + JP Z, cant_open_exe + LD HL, tpa_start ; load to start of TPA 0x100 + +.read_next_sec: + PUSH HL ; store start pointer + EX DE, HL + CALL ccp_bdos_dma_set + + LD DE, ccp_current_fcb + CALL ccp_bdos_read_f + JP NZ, .read_no_ok ; check for read error + + ; shift start pointer for sector size + POP HL + LD DE, 128 + ADD HL, DE + ; check for enough space in RAM + LD DE, ccp_ram_ent + LD A, L + SUB E + LD A, H + SBC A, D + JP NC, ccp_bad_load + JP .read_next_sec + +.read_no_ok: + POP HL + DEC A + JP NZ, ccp_bad_load ; it is not EOF, is error + ; ok, EOF + CALL ccp_restor_drv ; get first filename + CALL ccp_cv_first_to_fcb + LD HL, ccp_chg_drive ; hl -> buff[16] + PUSH HL + LD A, (HL) + LD (ccp_current_fcb), A ; set drive letter in current fcb + LD A, 16 + CALL ccp_cv_fcb_filename ; replace wildcards + POP HL + ; set drive for second file in reserved fcb area + LD A, (HL) + LD (ccp_current_fcb_al), A + ; clear record count + XOR A + LD (ccp_current_fcb_cr), A + ; Move current to default FCB + LD DE, fcb1 + LD HL, ccp_current_fcb + LD B, 33 + CALL ccp_mv_hlde_b + + ; move remainder of cmd line to 0x0080 + LD HL, ccp_inp_line +.skip_nosp: + LD A, (HL) + OR A + JP Z, .z_or_sp + CP ASCII_SP + JP Z, .z_or_sp + INC HL + JP .skip_nosp + +.z_or_sp: + LD B, 0 ; len of cmd line for program = 0 + LD DE, p_cmd_line ; destination address for cmd line + +.copy_cmd_line: + LD A, (HL) + LD (DE), A + OR A + JP Z, .stor_len + INC B + INC HL + INC DE + JP .copy_cmd_line + +.stor_len: + LD A, B + LD (p_cmd_line_len), A + ; next line + CALL ccp_out_crlf + ; set buffer to cmd line + CALL cpp_set_disk_buff_addr + ; set drive + CALL ccp_set_cur_drv + ; and call loaded program + CALL tpa_start + ; restore stack first + LD SP, ccp_stack + ; restore current drive + CALL ccp_reset_cur_drv + CALL ccp_bdos_drv_set + ; return back to command line mode + JP ccp_get_command + +cant_open_exe: + CALL ccp_restor_drv + JP print_syn_err + +ccp_bad_load: + LD BC, .msg_bad_load ; BC -> "BAD LOAD" + CALL ccp_out_crlf_msg + JP ccp_cmdline_back + +.msg_bad_load: + DB "BAD LOAD", 0 + +msg_com: + DB "COM" + +; -------------------------------------------------- +; Return back to command line +; -------------------------------------------------- +ccp_cmdline_back: + CALL ccp_restor_drv + +ccp_cmdline_back1: + CALL ccp_cv_first_to_fcb + LD A, (ccp_current_fcb_fn) + SUB 0x20 + LD HL, ccp_chg_drive + OR (HL) + JP NZ, print_syn_err + JP ccp_get_command + + DW 0h, 0h, 0h, 0h, 0h, 0h, 0h, 0h + +ccp_stack EQU $ + +ccp_batch: + DB 0h + +ccp_batch_fcb: + DB 0h ; drive code, 0 - default + DB "$$$ SUB" ; filename + DB 0h ; extent + DB 0h ; S1 +ccp_batch_fcb_s2: + DB 0h ; S2 Extent [6:0] bits and [7] write flag +ccp_batch_fcb_rc: + DB 0h ; sectors count +ccp_batch_fcb_al: + DS 16, 0 ; reserved by CPM use only +ccp_batch_fcb_cr: + DB 0h ; current sector to read/write + +ccp_current_fcb: + DB 0h +ccp_current_fcb_fn: + DS 8, 0 +ccp_current_fcb_ft: + DS 3, 0 +ccp_current_fcb_ex: + DB 0h ; extent + DB 0h ; s1 + DB 0h ; s2 + DB 0h ; sectors count +ccp_current_fcb_al: + DS 16, 0 ; reserved by CPM use only +ccp_current_fcb_cr: + DB 0h ; current sector to read/write + +ccp_bdos_result_code: + DB 0h + +ccp_cur_drive: + DB 0h + +ccp_chg_drive: ; change drive flag, 0 - no change + DB 0 +ccp_bytes_ctr: + DW 0 + ; reserved + DS 13, 0 + + +bdos_enter_jump EQU $+6 + +; ------------------------------------------------------- +; Filler to align blocks in ROM +; ------------------------------------------------------- +LAST EQU $ +CODE_SIZE EQU LAST-0xB200 +;FILL_SIZE EQU 0x500-CODE_SIZE + + DISPLAY "| CCP_RAM\t| ",/H,ccp_ram_ent," | ",/H,CODE_SIZE," | \t |" + + ; Check integrity + ASSERT ccp_cmdline_back = 0xb986 + + ENDMODULE + + IFNDEF BUILD_ROM + OUTEND + ENDIF \ No newline at end of file diff --git a/examples/hello/cpm/ccp_rom.asm b/examples/hello/cpm/ccp_rom.asm new file mode 100644 index 0000000..da5f73b --- /dev/null +++ b/examples/hello/cpm/ccp_rom.asm @@ -0,0 +1,882 @@ +; ======================================================= +; Ocean-240.2 +; CPM CPP, ROM PART +; AT 0xDB00 +; +; Disassembled by Romych 2025-09-09 +; ======================================================= + + INCLUDE "equates.inc" + INCLUDE "ram.inc" + + IFNDEF BUILD_ROM + OUTPUT ccp_rom.bin + ENDIF + + MODULE CCP_ROM + + ORG 0xDB00 + +@ccp_entry: + LD HL, 0x0 ; prevent stack overflow + ADD HL, SP + LD (CPM_VARS.saved_stack_ptr), HL + LD SP, CPM_VARS.ccp_safe_stack + + CALL get_cmd_index + LD HL, ccp_commands ;= DB6Ch + LD E, A + LD D, 0x0 + ADD HL, DE + ADD HL, DE + LD A, (HL) + INC HL + LD H, (HL) + LD L, A + JP (HL) ; jump to command + +ccp_commands_str: + DB "SDIR READ WRITE" + +; ------------------------------------------------------- +; Search user command position in available commands list +; ------------------------------------------------------- +get_cmd_index: + LD HL, ccp_commands_str ; -> 'DIR' + LD C, 0x0 +.cmd_next: + LD A, C + CP CCP_COMMAND_COUNT + RET NC + LD DE, CCP_RAM.ccp_current_fcb_fn + LD B, CCP_COMMAND_SIZE +.cmp_nxt: + LD A, (DE) + CP (HL) ; -> 'DIR' + JP NZ, .no_eq + INC DE + INC HL + DEC B + JP NZ, .cmp_nxt + LD A, (DE) + CP ASCII_SP + JP NZ, .inc_next + LD A, C + RET +.no_eq: + INC HL + DEC B + JP NZ, .no_eq +.inc_next: + INC C + JP .cmd_next + +; -------------------------------------------------- +; Command handlers ref table +; -------------------------------------------------- +ccp_commands: + DW ccp_dir + DW ccp_read + DW ccp_write + DW ccp_ret ; r8 +; DW ccp_exit1 ; r8 + +ccp_ret: + LD HL, (CPM_VARS.saved_stack_ptr) + LD SP, HL + JP CCP_RAM.ccp_unk_cmd + +;ccp_exit1: +; JP MON.mon_hexb +; -------------------------------------------------- +; DIR [filemask] command handler +; -------------------------------------------------- +ccp_dir: + CALL CCP_RAM.ccp_cv_first_to_fcb + CALL CCP_RAM.ccp_drive_sel + ; chech some filemask specified in command line + LD HL, CCP_RAM.ccp_current_fcb_fn + LD A, (HL) + CP ' ' + JP NZ, .has_par + + ; no filemask, fill with wildcard '?' + LD B, 11 +.fill_wildcard: + LD (HL), '?' + INC HL + DEC B + JP NZ, .fill_wildcard + + ; find file by specified mask +.has_par: + CALL CCP_RAM.ccp_find_first + JP NZ, .f_found + ; no files found, print and exit + CALL CCP_RAM.ccp_out_no_file + JP CCP_RAM.ccp_cmdline_back + +.f_found: + CALL CCP_RAM.ccp_out_crlf + LD HL, 0x0 + LD (CPM_VARS.tmp_dir_total), HL + LD E, 0 + +.do_next_direntry: + PUSH DE + CALL CCP_RAM.ccp_find_first + POP DE + PUSH DE + + ; Find file with e number +.find_file_e: + DEC E + JP M, .file_out_next + PUSH DE + CALL CCP_RAM.ccp_bdos_find_next + POP DE + JP Z, .file_e_found + JP .find_file_e + +.file_out_next: + LD A, (CCP_RAM.ccp_bdos_result_code) + ; calc address of DIR entry in DMA buffer + ; A[6:5] = A[1:0] = 32*A + RRCA ; [C] -> [7:0] -> [C] + RRCA ; + RRCA ; + AND 01100000b ; mask + LD C, A + PUSH BC + CALL CCP_RAM.ccp_out_crlf ; start new line + CALL CCP_RAM.ccp_bdos_drv_get + INC A + LD (dma_buffer), A ; disk + POP BC + LD B, 0x0 + LD HL, dma_buffer+FCB_FN ; filename + LD E, L + LD D, H + ADD HL, BC + + ; copy filename to tmp FCB and out to screen + LD B, 0x1 +.copy_next: + LD A, (HL) + LD (DE), A + LD C, A + CALL BIOS.conout_f + INC HL + INC DE + INC B + LD A, B + CP FN_LEN ; >12 end of name + JP C, .copy_next + +.zero_up_36: + XOR A + LD (DE), A ; zero at end + INC B + LD A, B + CP 36 + JP C, .zero_up_36 + + ; calc file size for current entry + LD DE, dma_buffer + CALL cpp_bdos_f_size + LD HL, (fcb_ra_record_num) ; file size in blocks + + ; get disk blk size + LD A, (CPM_VARS.bdos_curdsk) + OR A + JP NZ, .no_dsk_a0 + LD B, 3 ; for A - blk=3 + JP .dsk_a0 + +.no_dsk_a0: + LD B, 4 ; for other disks - blk=4 +.dsk_a0: + LD C, L + + ; convert 128b OS block to disk blocks +.mul_to_dsk_blk: + XOR A + LD A, H + RRA + LD H, A + LD A, L + RRA + LD L, A + DEC B + JP NZ, .mul_to_dsk_blk + ; round up + LD A, (CPM_VARS.bdos_curdsk) + OR A + JP NZ, .no_dsk_a1 + LD A, 00000111b ; for A - ~(~0 << 3) + JP .ds_skip1 +.no_dsk_a1: + LD A, 00001111b ; for other dsk - ~(~0 << 4) +.ds_skip1: + AND C + JP Z, .cvt_blk_kb + INC HL + + ; Convert blocks to kilobytes (A-1k B-2k) +.cvt_blk_kb: + LD A, (CPM_VARS.bdos_curdsk) + OR A + JP Z, .ds_skip2 + ADD HL, HL ; 2k + + ; add file size to total dir size +.ds_skip2: + EX DE, HL + LD HL, (CPM_VARS.tmp_dir_total) + ADD HL, DE + LD (CPM_VARS.tmp_dir_total), HL + + ; display size in K + LD C, ' ' + CALL BIOS.conout_f + CALL BIOS.conout_f + CALL ccp_cout_num + LD C, 'K' + CALL BIOS.conout_f + CALL CCP_RAM.ccp_getkey_no_wait + JP NZ, CCP_RAM.ccp_cmdline_back + POP DE + INC E + JP .do_next_direntry + +.file_e_found: + POP DE + LD HL, msg_free_space ;= "\r\nFREE SPACE " + + ; Out: FREE SPACE + CALL ccp_out_str_z + LD A, (CPM_VARS.bdos_curdsk) + OR A + JP NZ, .no_ram_dsk + LD HL, (BIOS.disk_a_size) + JP .calc_remanis_ds + +.no_ram_dsk: + DEC A + LD HL, (BIOS.disk_b_size) + JP Z, .calc_remanis_ds + + LD HL, (BIOS.disk_c_size) + LD A, (disk_sw_trk) + OR A + JP NZ, .calc_remanis_ds + + LD A, H + CP 1 + JP Z, .d720 + LD HL, 360 + JP .calc_remanis_ds +.d720: + LD HL, 720 + + ; Disk size - Dir size = Free +.calc_remanis_ds: + EX DE, HL + LD HL, (CPM_VARS.tmp_dir_total) + LD A, E + SUB L + LD E, A + LD A, D + SBC A, H + LD D, A + CALL ccp_cout_num + LD C, 'K' + CALL BIOS.conout_f + CALL CCP_RAM.ccp_out_crlf + JP CCP_RAM.ccp_cmdline_back + +msg_free_space: + DB "\r\nFREE SPACE ",0 + +ccp_cout_num: + LD A, D + AND 11100000b + JP Z, .less_224 + LD C, '*' + CALL BIOS.conout_f + CALL BIOS.conout_f + CALL BIOS.conout_f + CALL BIOS.conout_f + RET + +.less_224: + LD HL, 0x0 + ; copy number to BC + LD B, D + LD C, E + LD DE, 0x1 + LD A, 13 + +.bc_rra: + PUSH AF + PUSH HL + ; BC >> 1 + LD A, B + RRA + LD B, A + LD A, C + RRA + LD C, A + JP NC, .bc_rra_ex + POP HL + CALL cpp_daa16 + PUSH HL + +.bc_rra_ex: + LD L, E + LD H, D + CALL cpp_daa16 + EX DE, HL + POP HL + POP AF + DEC A + JP NZ, .bc_rra + LD D, 4 + LD B, 0 + +.next_d: + LD E, 4 + +.next_e: + LD A, L + RLA + LD L, A + LD A, H + RLA + LD H, A + LD A, C + RLA + LD C, A + DEC E + JP NZ, .next_e + LD A, C + AND 0xf + ADD A, '0' + CP '0' + JP NZ, .no_zero + DEC B + INC B + JP NZ, .b_no_one + LD A, D + DEC A + JP Z, .d_one + LD A, ' ' + JP .b_no_one + +.d_one: + LD A, '0' +.no_zero: + LD B, 0x1 +.b_no_one: + LD C, A + CALL BIOS.conout_f + DEC D + JP NZ, .next_d + RET + +; ------------------------------------------------------- +; ADD with correction HL=HL+DE +; ------------------------------------------------------- +cpp_daa16: + LD A, L + ADD A, E + DAA + LD L, A + LD A, H + ADC A, D + DAA + LD H, A + RET + +; ------------------------------------------------------- +; Call BDOS function 35 (F_SIZE) - Compute file size +; ------------------------------------------------------- +cpp_bdos_f_size: + LD C, F_SIZE + JP jp_bdos_enter + +; ------------------------------------------------------- +; Read Intel HEX data from serial port +; ------------------------------------------------------- +ccp_read: + LD DE, msg_read_hex + CALL out_dollar_str + LD HL, 0x0 + LD (CCP_RAM.hex_length), HL + + ; Wait for start of Intel HEX line +.wait_colon: + CALL MON.mon_serial_in + CP ':' + JP NZ, .wait_colon + + ; Init checksum + XOR A + LD D, A + + CALL ser_read_hexb ; read byte_count + JP Z, .end_of_file + LD E, A + CALL ser_read_hexb ; read address hi + LD H, A + CALL ser_read_hexb ; read address lo + LD L, A ; HL - dst address + CALL ser_read_hexb ; read rec type + + ; calculate length += byte_count + PUSH HL + LD HL, (CCP_RAM.hex_length) + LD A, L + ADD A, E + LD L, A + LD A, H + ADC A, 0 + LD H, A + LD (CCP_RAM.hex_length), HL + POP HL + + LD C, E + + ; receive next E=byte_count bytes +.receive_rec: + CALL ser_read_hexb + LD (HL), A + INC HL + DEC E + JP NZ, .receive_rec + + CALL ser_read_hexb ; receive checksum + JP NZ, .load_error ; jump if error + JP .wait_colon ; jump to wait next line + +.end_of_file: + ; read tail 4 bytes: 00 00 01 ff + CALL ser_read_hexb + CALL ser_read_hexb + CALL ser_read_hexb + CALL ser_read_hexb + JP Z, .load_complete + +.load_error: + LD DE, .msg_error + JP out_dollar_str + +.load_complete: + ; Out message with length of received file + LD HL, (CCP_RAM.hex_length) + LD A, H + CALL MON.mon_hexb + LD A, L + CALL MON.mon_hexb + LD DE, .msg_bytes + CALL out_dollar_str + ; Calculate number of pages + LD HL, (CCP_RAM.hex_length) + LD A, L + ADD A, 0xff + LD A, H + ADC A, 0x0 + RLA + LD (CCP_RAM.hex_sectors), A + ; Out message with number of pages + CALL MON.mon_hexb + LD DE, .msg_pages + CALL out_dollar_str + + ; Check for file name specified in cmd line + CALL CCP_RAM.ccp_cv_first_to_fcb + CALL CCP_RAM.ccp_drive_sel + LD A, (CCP_RAM.ccp_current_fcb_fn) + CP ASCII_SP + JP Z, .warm_boot + + ; Create file + LD DE, CCP_RAM.ccp_current_fcb + LD C, F_MAKE + CALL jp_bdos_enter + INC A + JP Z, .load_error + LD HL, tpa_start + LD (CCP_RAM.hex_buff), HL + +.wr_sector: + ; set source buffer address + LD HL, (CCP_RAM.hex_buff) + EX DE, HL + LD C, F_DMAOFF + CALL jp_bdos_enter + ; write source buffer to disk + LD DE, CCP_RAM.ccp_current_fcb + LD C, F_WRITE + CALL jp_bdos_enter + ; check errors + OR A + JP NZ, .load_error + + ; rewind forward to next sector + LD HL, (CCP_RAM.hex_buff) + LD DE, 128 ; sector size + ADD HL, DE + LD (CCP_RAM.hex_buff), HL + + ; decrement sector count + LD A, (CCP_RAM.hex_sectors) + DEC A + LD (CCP_RAM.hex_sectors), A + JP NZ, .wr_sector ; jump if remains sectors + + ; close file + LD DE, CCP_RAM.ccp_current_fcb + LD C, F_CLOSE + CALL jp_bdos_enter + ; check errors + CP 0xff + JP Z, .load_error + +.warm_boot: + LD C, P_TERMCPM + JP jp_bdos_enter + +.msg_bytes: + DB "h bytes ($" + +.msg_pages: + DB " pages)\n\r$" + +.msg_error: + DB "error!\n\r$" + +; --------------------------------------------------- +; Read next two symbols from serial and convert to +; byte +; Out: A - byte +; CF set if error +; --------------------------------------------------- +ser_read_hexb: + PUSH BC + CALL MON.mon_serial_in + CALL hex_to_nibble + RLCA + RLCA + RLCA + RLCA + LD C, A + CALL MON.mon_serial_in + CALL hex_to_nibble + OR C + LD C, A + ADD A, D + LD D, A + LD A, C + POP BC + RET + +; --------------------------------------------------- +; Convert hex symbol to byte +; Inp: A - '0'..'F' +; Out: A - 0..15 +; CF set if error +; --------------------------------------------------- +hex_to_nibble: + SUB '0' ; < '0' - error + RET C + ADD A, 233 ; F -> 255 + RET C ; > F - error + ADD A, 6 + JP P, .l1 + ADD A, 7 + RET C +.l1: + ADD A, 10 + OR A + RET + +; --------------------------------------------------- +; Out $ ended string +; Inp: DE -> string$ +; --------------------------------------------------- +out_dollar_str: + LD C, C_WRITESTR + JP jp_bdos_enter + +msg_read_hex: + DB "\n\rRead HEX from RS232... $" + +filler1: + DS 62, 0 + +; ------------------------------------------------------- +; Out zerro ended string +; In: HL -> strZ +; ------------------------------------------------------- +ccp_out_str_z: + LD A, (HL) + OR A + RET Z + LD C, A + CALL BIOS.conout_f + INC HL + JP ccp_out_str_z + +; ------------------------------------------------------- +; Delete file and out No Space message +; ------------------------------------------------------- +ccp_del_f_no_space: + LD DE, CCP_RAM.ccp_current_fcb + CALL CCP_RAM.ccp_bdos_era_file + JP CCP_RAM.ccp_no_space + +; ------------------------------------------------------- +; Read current file next block +; Out: A=0 - Ok, 0xFF - HW Error; +; ------------------------------------------------------- +cpp_read_f_blk: + LD DE, CPM_VARS.ccp_fcb ; FCB here + JP CCP_RAM.ccp_bdos_read_f + +ccp_write: + CALL CCP_RAM.ccp_cv_first_to_fcb + CALL CCP_RAM.ccp_drive_sel + LD HL, CCP_RAM.ccp_current_fcb_fn + LD A, (HL) + CP ' ' + JP NZ, .find_f + LD B, 11 + +.fill_with_wc: + LD (HL), '?' + INC HL + DEC B + JP NZ, .fill_with_wc + +.find_f: + CALL CCP_RAM.ccp_find_first + JP NZ, .found_f + CALL CCP_RAM.ccp_out_no_file + JP CCP_RAM.ccp_cmdline_back + +.found_f: + LD E, 0 ; file counter + +.do_next_f1: + PUSH DE + CALL CCP_RAM.ccp_find_first + POP DE + PUSH DE + +.do_next_f2: + DEC E + JP M, .do_file + PUSH DE + CALL CCP_RAM.ccp_bdos_find_next + POP DE + JP Z, .no_more_f + JP .do_next_f2 + +.do_file: + POP BC + PUSH BC + LD A, C + OR A + JP Z, .calc_addr + LD DE, 1200 + + ; Delay with key interrupt check +.delay_1: + XOR A +.delay_2: + DEC A + JP NZ, .delay_2 + PUSH DE + CALL CCP_RAM.ccp_getkey_no_wait + POP DE + JP NZ, CCP_RAM.ccp_cmdline_back + DEC DE + LD A, D + OR E + JP NZ, .delay_1 + +.calc_addr: + LD A, (CCP_RAM.ccp_bdos_result_code) + ; A=0-3 - for Ok, calc address of DIR entry in DMA buffer + RRCA + RRCA + RRCA + AND 01100000b + LD C, A + PUSH BC + CALL CCP_RAM.ccp_out_crlf + CALL CCP_RAM.ccp_bdos_drv_get + INC A + LD (CPM_VARS.ccp_fcb_dr), A ; set drive number + POP BC + LD B, 0x0 + LD HL, dma_buffer+1 + ADD HL, BC + LD DE, CPM_VARS.ccp_fcb_fn + LD B, 0x1 + +.copy_fn: + LD A, (HL) + LD (DE), A + INC HL + INC DE + INC B + LD A, B + CP 12 + JP C, .copy_fn + +.fillz_fn: + XOR A + LD (DE), A + INC DE + INC B + LD A, B + CP 36 + JP C, .fillz_fn + LD HL, CPM_VARS.ccp_fcb_fn + CALL ccp_out_str_z + LD HL, dma_buffer + + ; Empty first 128 bytes of DMA buffer + LD B, 128 +.clear_buf: + LD (HL), 0x0 + INC HL + DEC B + JP NZ, .clear_buf + + ; Copy file name at buffer start + LD HL, dma_buffer + LD DE, CPM_VARS.ccp_fcb_fn + LD B, 8 + +.find_sp: + LD A, (DE) + CP ' ' + JP Z, .sp_rep_dot ; ' ' -> '.' + LD (HL), A + INC HL + INC DE + JP .find_sp +.sp_rep_dot: + LD (HL), '.' + INC HL + CALL CCP_RAM.ccp_find_no_space + +.cont_copy_fn: + LD A, (DE) + LD (HL), A + OR A + JP Z, .end_copy + INC HL + INC DE + JP .cont_copy_fn + +.end_copy: + LD DE, CPM_VARS.ccp_fcb + CALL CCP_RAM.ccp_bdos_open_f + LD DE, 0x8000 ; Block ID + LD HL, dma_buffer + CALL cpp_pause_tape_wr_blk + CALL cpp_pause_tape_wr_blk + LD DE, 0x1 + + ; Read file block and write to Tape +.read_f_write_t: + PUSH DE + CALL cpp_read_f_blk + ; a=0xff if error; a=1 - EOF + DEC A + JP Z, .eof + LD A, (CPM_VARS.ccp_fcb_cr) + AND 0x7f + CP 0x1 + JP NZ, .write_once + ; Write block to Tape with ID=0 twice + LD DE, 0x0 ; Block ID=0 + LD HL, dma_buffer + CALL cpp_pause_tape_wr_blk + +.write_once: + CALL CCP_RAM.ccp_getkey_no_wait + LD HL, dma_buffer + POP DE + JP NZ, CCP_RAM.ccp_cmdline_back + CALL cpp_pause_tape_wr_blk + ; Inc Block ID and continue + INC DE + JP .read_f_write_t + +.eof: + POP DE + EX DE, HL + LD (dma_buffer), HL + EX DE, HL + + ; Final block ID=0xFFFF + LD DE, 0xffff + ; Write twice + CALL cpp_pause_tape_wr_blk + CALL cpp_pause_tape_wr_blk + POP DE + INC E + JP .do_next_f1 + +.no_more_f: + POP DE + CALL CCP_RAM.ccp_out_crlf + JP CCP_RAM.ccp_cmdline_back + +; ------------------------------------------------------- +; Write block to tape after pause +; ------------------------------------------------------- +cpp_pause_tape_wr_blk: + LD BC, 3036 +.delay: + DEC BC + LD A, B + OR C + JP NZ, .delay + JP BIOS.tape_write_f + + DB 0x4c + +; ------------------------------------------------------- +; Filler to align blocks in ROM +; ------------------------------------------------------- +LAST EQU $ +CODE_SIZE EQU LAST-0xDB00 +FILL_SIZE EQU 0x500-CODE_SIZE + + DISPLAY "| CCP_ROM\t| ",/H,ccp_entry," | ",/H,CODE_SIZE," | ",/H,FILL_SIZE," |" + + ; Check integrity + ASSERT ccp_dir = 0xdb62 + ASSERT ccp_dir.find_file_e = 0xdb97 + ASSERT ccp_dir.file_out_next = 0xdba6 + ASSERT ccp_dir.file_e_found = 0xdc3e + ASSERT ccp_dir.calc_remanis_ds = 0xdc72 + ASSERT ccp_dir.no_ram_dsk = 0xdc52 + ASSERT msg_free_space = 0xdc8a + ASSERT ccp_cout_num = 0xdc9a + +FILLER + DS FILL_SIZE-1, 0xff + DB 0xaa + + ENDMODULE + + IFNDEF BUILD_ROM + OUTEND + ENDIF diff --git a/examples/hello/cpm/cpm.asm b/examples/hello/cpm/cpm.asm new file mode 100644 index 0000000..6a473a0 --- /dev/null +++ b/examples/hello/cpm/cpm.asm @@ -0,0 +1,46 @@ +; ====================================================== +; Ocean-240.2 +; CP/M Combine file. Includes all sources to build +; ROM 0xC000 +; +; Disassembled by Romych 2025-02-12 +; ====================================================== + + DEFINE BUILD_ROM + + DEVICE NOSLOT64K + +; +; |-----------|---------------|-----------|--------------------------------------| +; | OFFSET | SIZE | Module | Memory Address | +; |-----------|---------------|-----------|--------------------------------------| +; | 0x0000 | 2048 (0x800) | CCP_RAM | 0xC000..0xC7FF -> RAM 0xB200..0xB5FF | +; | 0x0800 | 3584 (0xE00) | BDOS | 0xC800.. | +; | 0x1600 | 1024 (0x400) | BIOS | 0xD600..D9FF | +; | 0x1B00 | 1280 (0x500) | CCP_ROM | 0xDB00..DFFF | +; |-----------|---------------|-----------|--------------------------------------| +; + + DISPLAY "| Module | Offset | Size | Free |" + DISPLAY "|-------------|---------|--------|--------|" + + + OUTPUT cpm-C000.bin + ;LABELSLIST "cpm.labels" + ;CSPECTMAP "cpm.map" + INCLUDE "equates.inc" + INCLUDE "bdos.inc" + + INCLUDE "ccp_ram.asm" + INCLUDE "bdos.asm" + INCLUDE "bios.asm" + INCLUDE "ccp_rom.asm" + + OUTEND + + OUTPUT variables.bin + INCLUDE "cpm_vars.inc" + OUTEND + + +END \ No newline at end of file diff --git a/examples/hello/cpm/cpm.sld b/examples/hello/cpm/cpm.sld new file mode 100644 index 0000000..c7940e2 --- /dev/null +++ b/examples/hello/cpm/cpm.sld @@ -0,0 +1,5328 @@ +|SLD.data.version|1 +cpm.asm|11||0|-1|-1|Z|pages.size:65536,pages.count:32,slots.count:1,slots.adr:0 +equates.inc|11||0|-1|8|D|ADDLIST +equates.inc|11||0|-1|8|L|,ADDLIST,,+equ +equates.inc|12||0|-1|7|D|ASCII_BELL +equates.inc|12||0|-1|7|L|,ASCII_BELL,,+equ +equates.inc|13||0|-1|8|D|ASCII_BS +equates.inc|13||0|-1|8|L|,ASCII_BS,,+equ,+used +equates.inc|14||0|-1|9|D|ASCII_TAB +equates.inc|14||0|-1|9|L|,ASCII_TAB,,+equ,+used +equates.inc|15||0|-1|10|D|ASCII_LF +equates.inc|15||0|-1|10|L|,ASCII_LF,,+equ,+used +equates.inc|16||0|-1|12|D|ASCII_FF +equates.inc|16||0|-1|12|L|,ASCII_FF,,+equ +equates.inc|17||0|-1|13|D|ASCII_CR +equates.inc|17||0|-1|13|L|,ASCII_CR,,+equ,+used +equates.inc|18||0|-1|24|D|ASCII_CAN +equates.inc|18||0|-1|24|L|,ASCII_CAN,,+equ +equates.inc|19||0|-1|25|D|ASCII_EM +equates.inc|19||0|-1|25|L|,ASCII_EM,,+equ +equates.inc|20||0|-1|26|D|ASCII_SUB +equates.inc|20||0|-1|26|L|,ASCII_SUB,,+equ,+used +equates.inc|21||0|-1|27|D|ASCII_ESC +equates.inc|21||0|-1|27|L|,ASCII_ESC,,+equ,+used +equates.inc|22||0|-1|31|D|ASCII_US +equates.inc|22||0|-1|31|L|,ASCII_US,,+equ +equates.inc|23||0|-1|32|D|ASCII_SP +equates.inc|23||0|-1|32|L|,ASCII_SP,,+equ,+used +equates.inc|24||0|-1|127|D|ASCII_DEL +equates.inc|24||0|-1|127|L|,ASCII_DEL,,+equ,+used +equates.inc|27||0|-1|41|D|BDOS_NFUNCS +equates.inc|27||0|-1|41|L|,BDOS_NFUNCS,,+equ,+used +equates.inc|28||0|-1|8|D|BELL_PIN +equates.inc|28||0|-1|8|L|,BELL_PIN,,+equ +equates.inc|30||0|-1|5|D|CCP_COMMAND_SIZE +equates.inc|30||0|-1|5|L|,CCP_COMMAND_SIZE,,+equ,+used +equates.inc|31||0|-1|3|D|CCP_COMMAND_COUNT +equates.inc|31||0|-1|3|L|,CCP_COMMAND_COUNT,,+equ,+used +equates.inc|32||0|-1|6|D|CCP_COMMAND_CNT +equates.inc|32||0|-1|6|L|,CCP_COMMAND_CNT,,+equ,+used +equates.inc|33||0|-1|4|D|CCP_COMMAND_LEN +equates.inc|33||0|-1|4|L|,CCP_COMMAND_LEN,,+equ,+used +equates.inc|35||0|-1|49152|D|CCP_SRC_ADDR +equates.inc|35||0|-1|49152|L|,CCP_SRC_ADDR,,+equ,+used +equates.inc|36||0|-1|45568|D|CCP_DST_ADDR +equates.inc|36||0|-1|45568|L|,CCP_DST_ADDR,,+equ,+used +equates.inc|37||0|-1|2057|D|CCP_SIZE +equates.inc|37||0|-1|2057|L|,CCP_SIZE,,+equ,+used +equates.inc|39||0|-1|34|D|CPM_VERSION +equates.inc|39||0|-1|34|L|,CPM_VERSION,,+equ,+used +equates.inc|41||0|-1|94|D|CTRL +equates.inc|41||0|-1|94|L|,CTRL,,+equ,+used +equates.inc|42||0|-1|3|D|CTRL_C +equates.inc|42||0|-1|3|L|,CTRL_C,,+equ,+used +equates.inc|43||0|-1|8|D|CTRL_H +equates.inc|43||0|-1|8|L|,CTRL_H,,+equ +equates.inc|44||0|-1|5|D|CTRL_E +equates.inc|44||0|-1|5|L|,CTRL_E,,+equ,+used +equates.inc|45||0|-1|10|D|CTRL_J +equates.inc|45||0|-1|10|L|,CTRL_J,,+equ +equates.inc|46||0|-1|13|D|CTRL_M +equates.inc|46||0|-1|13|L|,CTRL_M,,+equ +equates.inc|47||0|-1|16|D|CTRL_P +equates.inc|47||0|-1|16|L|,CTRL_P,,+equ,+used +equates.inc|48||0|-1|18|D|CTRL_R +equates.inc|48||0|-1|18|L|,CTRL_R,,+equ,+used +equates.inc|49||0|-1|19|D|CTRL_S +equates.inc|49||0|-1|19|L|,CTRL_S,,+equ,+used +equates.inc|50||0|-1|21|D|CTRL_U +equates.inc|50||0|-1|21|L|,CTRL_U,,+equ,+used +equates.inc|51||0|-1|24|D|CTRL_X +equates.inc|51||0|-1|24|L|,CTRL_X,,+equ,+used +equates.inc|54||0|-1|15|D|DBPLIST +equates.inc|54||0|-1|15|L|,DBPLIST,,+equ +equates.inc|55||0|-1|63|D|DEF_DISK_A_SIZE +equates.inc|55||0|-1|63|L|,DEF_DISK_A_SIZE,,+equ +equates.inc|56||0|-1|360|D|DEF_DISK_B_SIZE +equates.inc|56||0|-1|360|L|,DEF_DISK_B_SIZE,,+equ +equates.inc|57||0|-1|128|D|DIR_BUFF_SIZE +equates.inc|57||0|-1|128|L|,DIR_BUFF_SIZE,,+equ,+used +equates.inc|58||0|-1|16|D|DSK_MAP +equates.inc|58||0|-1|16|L|,DSK_MAP,,+equ,+used +equates.inc|59||0|-1|3|D|DSK_MSK +equates.inc|59||0|-1|3|L|,DSK_MSK,,+equ,+used +equates.inc|60||0|-1|2|D|DSK_SHF +equates.inc|60||0|-1|2|L|,DSK_SHF,,+equ,+used +equates.inc|61||0|-1|128|D|DMA_BUFF_SIZE +equates.inc|61||0|-1|128|L|,DMA_BUFF_SIZE,,+equ,+used +equates.inc|63||0|-1|65535|D|ENDDIR +equates.inc|63||0|-1|65535|L|,ENDDIR,,+equ,+used +equates.inc|64||0|-1|26|D|ESC_CMD_END +equates.inc|64||0|-1|26|L|,ESC_CMD_END,,+equ +equates.inc|67||0|-1|0|D|FALSE +equates.inc|67||0|-1|0|L|,FALSE,,+equ,+used +equates.inc|68||0|-1|33|D|FDC_DD80RB +equates.inc|68||0|-1|33|L|,FDC_DD80RB,,+equ +equates.inc|69||0|-1|128|D|FDC_NOT_READY +equates.inc|69||0|-1|128|L|,FDC_NOT_READY,,+equ +equates.inc|70||0|-1|8|D|FDC_RESTORE_L +equates.inc|70||0|-1|8|L|,FDC_RESTORE_L,,+equ +equates.inc|71||0|-1|28|D|FDC_SEEK_LV +equates.inc|71||0|-1|28|L|,FDC_SEEK_LV,,+equ +equates.inc|72||0|-1|3|D|FDC_RESTORE_UH_NV +equates.inc|72||0|-1|3|L|,FDC_RESTORE_UH_NV,,+equ +equates.inc|73||0|-1|229|D|FILE_DELETED +equates.inc|73||0|-1|229|L|,FILE_DELETED,,+equ,+used +equates.inc|74||0|-1|128|D|FWF_MASK +equates.inc|74||0|-1|128|L|,FWF_MASK,,+equ,+used +equates.inc|79||0|-1|32|D|FCB_LEN +equates.inc|79||0|-1|32|L|,FCB_LEN,,+equ,+used +equates.inc|80||0|-1|5|D|FCB_SHF +equates.inc|80||0|-1|5|L|,FCB_SHF,,+equ,+used +equates.inc|81||0|-1|12|D|FN_LEN +equates.inc|81||0|-1|12|L|,FN_LEN,,+equ,+used +equates.inc|83||0|-1|0|D|FCB_DR +equates.inc|83||0|-1|0|L|,FCB_DR,,+equ +equates.inc|84||0|-1|1|D|FCB_FN +equates.inc|84||0|-1|1|L|,FCB_FN,,+equ,+used +equates.inc|85||0|-1|9|D|FCB_FT +equates.inc|85||0|-1|9|L|,FCB_FT,,+equ +equates.inc|90||0|-1|12|D|FCB_EXT +equates.inc|90||0|-1|12|L|,FCB_EXT,,+equ,+used +equates.inc|92||0|-1|13|D|FCB_S1 +equates.inc|92||0|-1|13|L|,FCB_S1,,+equ,+used +equates.inc|93||0|-1|14|D|FCB_S2 +equates.inc|93||0|-1|14|L|,FCB_S2,,+equ,+used +equates.inc|94||0|-1|15|D|FCB_RC +equates.inc|94||0|-1|15|L|,FCB_RC,,+equ,+used +equates.inc|95||0|-1|16|D|FCB_AL +equates.inc|95||0|-1|16|L|,FCB_AL,,+equ,+used +equates.inc|97||0|-1|32|D|FCB_CR +equates.inc|97||0|-1|32|L|,FCB_CR,,+equ,+used +equates.inc|100||0|-1|33|D|FCB_RN +equates.inc|100||0|-1|33|L|,FCB_RN,,+equ,+used +equates.inc|104||0|-1|195|D|JP_OPCODE +equates.inc|104||0|-1|195|L|,JP_OPCODE,,+equ,+used +equates.inc|106||0|-1|1|D|IRQ_0 +equates.inc|106||0|-1|1|L|,IRQ_0,,+equ +equates.inc|107||0|-1|2|D|IRQ_1 +equates.inc|107||0|-1|2|L|,IRQ_1,,+equ +equates.inc|108||0|-1|4|D|IRQ_2 +equates.inc|108||0|-1|4|L|,IRQ_2,,+equ +equates.inc|110||0|-1|2|D|KBD_IRQ +equates.inc|110||0|-1|2|L|,KBD_IRQ,,+equ +equates.inc|112||0|-1|16|D|KBD_ACK +equates.inc|112||0|-1|16|L|,KBD_ACK,,+equ +equates.inc|114||0|-1|13|D|KEY_ALF +equates.inc|114||0|-1|13|L|,KEY_ALF,,+equ +equates.inc|115||0|-1|21|D|KEY_FIX +equates.inc|115||0|-1|21|L|,KEY_FIX,,+equ +equates.inc|117||0|-1|127|D|LST_REC +equates.inc|117||0|-1|127|L|,LST_REC,,+equ +equates.inc|119||0|-1|31|D|MAX_EXT +equates.inc|119||0|-1|31|L|,MAX_EXT,,+equ,+used +equates.inc|120||0|-1|15|D|MAX_MOD +equates.inc|120||0|-1|15|L|,MAX_MOD,,+equ,+used +equates.inc|123||0|-1|15|D|FCB_INFO_LEN +equates.inc|123||0|-1|15|L|,FCB_INFO_LEN,,+equ,+used +equates.inc|126||0|-1|10|D|PIC_POLL_MODE +equates.inc|126||0|-1|10|L|,PIC_POLL_MODE,,+equ +equates.inc|127||0|-1|16|D|PORT_C4 +equates.inc|127||0|-1|16|L|,PORT_C4,,+equ +equates.inc|128||0|-1|16|D|PRINTER_ACK +equates.inc|128||0|-1|16|L|,PRINTER_ACK,,+equ +equates.inc|129||0|-1|8|D|PRINTER_IRQ +equates.inc|129||0|-1|8|L|,PRINTER_IRQ,,+equ +equates.inc|133||0|-1|9|D|RO_FILE +equates.inc|133||0|-1|9|L|,RO_FILE,,+equ,+used +equates.inc|134||0|-1|8192|D|ROM_CHIP_SIZE +equates.inc|134||0|-1|8192|L|,ROM_CHIP_SIZE,,+equ +equates.inc|136||0|-1|2|D|RX_READY +equates.inc|136||0|-1|2|L|,RX_READY,,+equ +equates.inc|138||0|-1|8|D|TAPE_D +equates.inc|138||0|-1|8|L|,TAPE_D,,+equ +equates.inc|139||0|-1|4|D|TAPE_P +equates.inc|139||0|-1|4|L|,TAPE_P,,+equ +equates.inc|140||0|-1|16|D|TIMER_IRQ +equates.inc|140||0|-1|16|L|,TIMER_IRQ,,+equ +equates.inc|141||0|-1|5|D|TL_HIGH +equates.inc|141||0|-1|5|L|,TL_HIGH,,+equ +equates.inc|142||0|-1|3|D|TL_LOW +equates.inc|142||0|-1|3|L|,TL_LOW,,+equ +equates.inc|143||0|-1|4|D|TL_MID +equates.inc|143||0|-1|4|L|,TL_MID,,+equ +equates.inc|144||0|-1|54|D|TMR0_SQWAVE +equates.inc|144||0|-1|54|L|,TMR0_SQWAVE,,+equ +equates.inc|145||0|-1|255|D|TRUE +equates.inc|145||0|-1|255|L|,TRUE,,+equ,+used +equates.inc|146||0|-1|1|D|TX_READY +equates.inc|146||0|-1|1|L|,TX_READY,,+equ +bdos.inc|12||0|-1|0|D|P_TERMCPM +bdos.inc|12||0|-1|0|L|,P_TERMCPM,,+equ,+used +bdos.inc|13||0|-1|1|D|C_READ +bdos.inc|13||0|-1|1|L|,C_READ,,+equ,+used +bdos.inc|14||0|-1|2|D|C_WRITE +bdos.inc|14||0|-1|2|L|,C_WRITE,,+equ,+used +bdos.inc|15||0|-1|3|D|A_READ +bdos.inc|15||0|-1|3|L|,A_READ,,+equ +bdos.inc|16||0|-1|4|D|A_WRITE +bdos.inc|16||0|-1|4|L|,A_WRITE,,+equ +bdos.inc|17||0|-1|5|D|L_WRITE +bdos.inc|17||0|-1|5|L|,L_WRITE,,+equ +bdos.inc|18||0|-1|6|D|C_RAWIO +bdos.inc|18||0|-1|6|L|,C_RAWIO,,+equ +bdos.inc|19||0|-1|7|D|A_STATIN +bdos.inc|19||0|-1|7|L|,A_STATIN,,+equ +bdos.inc|20||0|-1|8|D|A_STATOUT +bdos.inc|20||0|-1|8|L|,A_STATOUT,,+equ +bdos.inc|21||0|-1|9|D|C_WRITESTR +bdos.inc|21||0|-1|9|L|,C_WRITESTR,,+equ,+used +bdos.inc|22||0|-1|10|D|C_READSTR +bdos.inc|22||0|-1|10|L|,C_READSTR,,+equ,+used +bdos.inc|23||0|-1|11|D|C_STAT +bdos.inc|23||0|-1|11|L|,C_STAT,,+equ,+used +bdos.inc|24||0|-1|12|D|S_BDOSVER +bdos.inc|24||0|-1|12|L|,S_BDOSVER,,+equ +bdos.inc|25||0|-1|13|D|DRV_ALLRESET +bdos.inc|25||0|-1|13|L|,DRV_ALLRESET,,+equ,+used +bdos.inc|26||0|-1|14|D|DRV_SET +bdos.inc|26||0|-1|14|L|,DRV_SET,,+equ,+used +bdos.inc|27||0|-1|15|D|F_OPEN +bdos.inc|27||0|-1|15|L|,F_OPEN,,+equ +bdos.inc|28||0|-1|16|D|F_CLOSE +bdos.inc|28||0|-1|16|L|,F_CLOSE,,+equ,+used +bdos.inc|29||0|-1|17|D|F_SFIRST +bdos.inc|29||0|-1|17|L|,F_SFIRST,,+equ +bdos.inc|30||0|-1|18|D|F_SNEXT +bdos.inc|30||0|-1|18|L|,F_SNEXT,,+equ +bdos.inc|31||0|-1|19|D|F_DELETE +bdos.inc|31||0|-1|19|L|,F_DELETE,,+equ,+used +bdos.inc|32||0|-1|20|D|F_READ +bdos.inc|32||0|-1|20|L|,F_READ,,+equ,+used +bdos.inc|33||0|-1|21|D|F_WRITE +bdos.inc|33||0|-1|21|L|,F_WRITE,,+equ,+used +bdos.inc|34||0|-1|22|D|F_MAKE +bdos.inc|34||0|-1|22|L|,F_MAKE,,+equ,+used +bdos.inc|35||0|-1|23|D|F_RENAME +bdos.inc|35||0|-1|23|L|,F_RENAME,,+equ,+used +bdos.inc|36||0|-1|24|D|DRV_LOGINVEC +bdos.inc|36||0|-1|24|L|,DRV_LOGINVEC,,+equ +bdos.inc|37||0|-1|25|D|DRV_GET +bdos.inc|37||0|-1|25|L|,DRV_GET,,+equ,+used +bdos.inc|38||0|-1|26|D|F_DMAOFF +bdos.inc|38||0|-1|26|L|,F_DMAOFF,,+equ,+used +bdos.inc|39||0|-1|27|D|DRV_ALLOCVEC +bdos.inc|39||0|-1|27|L|,DRV_ALLOCVEC,,+equ +bdos.inc|40||0|-1|28|D|DRV_SETRO +bdos.inc|40||0|-1|28|L|,DRV_SETRO,,+equ +bdos.inc|41||0|-1|29|D|DRV_ROVEC +bdos.inc|41||0|-1|29|L|,DRV_ROVEC,,+equ +bdos.inc|42||0|-1|30|D|F_ATTRIB +bdos.inc|42||0|-1|30|L|,F_ATTRIB,,+equ +bdos.inc|43||0|-1|31|D|DRV_DPB +bdos.inc|43||0|-1|31|L|,DRV_DPB,,+equ +bdos.inc|44||0|-1|32|D|F_USERNUM +bdos.inc|44||0|-1|32|L|,F_USERNUM,,+equ,+used +bdos.inc|45||0|-1|33|D|F_READRAND +bdos.inc|45||0|-1|33|L|,F_READRAND,,+equ +bdos.inc|46||0|-1|34|D|F_WRITERAND +bdos.inc|46||0|-1|34|L|,F_WRITERAND,,+equ +bdos.inc|47||0|-1|35|D|F_SIZE +bdos.inc|47||0|-1|35|L|,F_SIZE,,+equ,+used +bdos.inc|48||0|-1|36|D|F_RANDREC +bdos.inc|48||0|-1|36|L|,F_RANDREC,,+equ +bdos.inc|49||0|-1|37|D|DRV_RESET +bdos.inc|49||0|-1|37|L|,DRV_RESET,,+equ +bdos.inc|50||0|-1|38|D|DRV_ACCESS +bdos.inc|50||0|-1|38|L|,DRV_ACCESS,,+equ +bdos.inc|51||0|-1|39|D|DRV_FREE +bdos.inc|51||0|-1|39|L|,DRV_FREE,,+equ +bdos.inc|52||0|-1|40|D|F_WRITEZF +bdos.inc|52||0|-1|40|L|,F_WRITEZF,,+equ +ram.inc|12||0|-1|0|L|RAM,,,+module +ram.inc|14||0|-1|0|D|warm_boot +ram.inc|14||0|-1|0|L|,warm_boot,,+equ,+used +ram.inc|15||0|-1|1|D|warm_boot_addr +ram.inc|15||0|-1|1|L|,warm_boot_addr,,+equ,+used +ram.inc|16||0|-1|3|D|iobyte +ram.inc|16||0|-1|3|L|,iobyte,,+equ,+used +ram.inc|17||0|-1|4|D|cur_user_drv +ram.inc|17||0|-1|4|L|,cur_user_drv,,+equ,+used +ram.inc|18||0|-1|5|D|jp_bdos_enter +ram.inc|18||0|-1|5|L|,jp_bdos_enter,,+equ,+used +ram.inc|19||0|-1|6|D|bdos_ent_addr +ram.inc|19||0|-1|6|L|,bdos_ent_addr,,+equ,+used +ram.inc|29||0|-1|64|D|bios_var0 +ram.inc|29||0|-1|64|L|,bios_var0,,+equ,+used +ram.inc|30||0|-1|65|D|bios_var1 +ram.inc|30||0|-1|65|L|,bios_var1,,+equ +ram.inc|31||0|-1|66|D|disk_sw_trk +ram.inc|31||0|-1|66|L|,disk_sw_trk,,+equ,+used +ram.inc|32||0|-1|67|D|bios_var3 +ram.inc|32||0|-1|67|L|,bios_var3,,+equ +ram.inc|33||0|-1|68|D|interleave_0 +ram.inc|33||0|-1|68|L|,interleave_0,,+equ,+used +ram.inc|36||0|-1|92|D|fcb1 +ram.inc|36||0|-1|92|L|,fcb1,,+equ,+used +ram.inc|37||0|-1|108|D|fcb2 +ram.inc|37||0|-1|108|L|,fcb2,,+equ +ram.inc|40||0|-1|128|D|dma_buffer +ram.inc|40||0|-1|128|L|,dma_buffer,,+equ,+used +ram.inc|41||0|-1|128|D|p_cmd_line_len +ram.inc|41||0|-1|128|L|,p_cmd_line_len,,+equ,+used +ram.inc|42||0|-1|129|D|p_cmd_line +ram.inc|42||0|-1|129|L|,p_cmd_line,,+equ,+used +ram.inc|43||0|-1|161|D|fcb_ra_record_num +ram.inc|43||0|-1|161|L|,fcb_ra_record_num,,+equ,+used +ram.inc|44||0|-1|256|D|bios_stack +ram.inc|44||0|-1|256|L|,bios_stack,,+equ,+used +ram.inc|45||0|-1|256|D|tpa_start +ram.inc|45||0|-1|256|L|,tpa_start,,+equ,+used +ram.inc|46||0|-1|16384|D|video_ram +ram.inc|46||0|-1|16384|L|,video_ram,,+equ +ram.inc|48||0|-1|0|L|RAM,,,+endmod +ccp_ram.asm|16||0|-1|0|L|CCP_RAM,,,+module +ccp_ram.asm|20||0|0|45568|F|CCP_RAM.ccp_ram_ent +ccp_ram.asm|20||0|0|45568|L|CCP_RAM,ccp_ram_ent,,+used +ccp_ram.asm|21||0|0|45568|T| +ccp_ram.asm|22||0|0|45571|T| +ccp_ram.asm|24||0|0|45574|F|CCP_RAM.ccp_inbuff +ccp_ram.asm|24||0|0|45574|L|CCP_RAM,ccp_inbuff,,+used +ccp_ram.asm|27||0|0|45576|F|CCP_RAM.ccp_inp_line +ccp_ram.asm|27||0|0|45576|L|CCP_RAM,ccp_inp_line,,+used +ccp_ram.asm|28||0|0|45576|F|CCP_RAM.hex_length +ccp_ram.asm|28||0|0|45576|L|CCP_RAM,hex_length,,+used +ccp_ram.asm|31||0|0|45578|F|CCP_RAM.msg_copyright +ccp_ram.asm|31||0|0|45578|L|CCP_RAM,msg_copyright, +ccp_ram.asm|32||0|0|45578|F|CCP_RAM.hex_sectors +ccp_ram.asm|32||0|0|45578|L|CCP_RAM,hex_sectors,,+used +ccp_ram.asm|34||0|0|45579|F|CCP_RAM.hex_buff +ccp_ram.asm|34||0|0|45579|L|CCP_RAM,hex_buff,,+used +ccp_ram.asm|39||0|0|45704|F|CCP_RAM.ccp_inp_line_addr +ccp_ram.asm|39||0|0|45704|L|CCP_RAM,ccp_inp_line_addr,,+used +ccp_ram.asm|42||0|0|45706|F|CCP_RAM.cur_name_ptr +ccp_ram.asm|42||0|0|45706|L|CCP_RAM,cur_name_ptr,,+used +ccp_ram.asm|49||0|0|45708|F|CCP_RAM.ccp_print +ccp_ram.asm|49||0|0|45708|L|CCP_RAM,ccp_print,,+used +ccp_ram.asm|50||0|0|45708|T| +ccp_ram.asm|51||0|0|45709|T| +ccp_ram.asm|52||0|0|45711|T| +ccp_ram.asm|58||0|0|45714|F|CCP_RAM.ccp_putc +ccp_ram.asm|58||0|0|45714|L|CCP_RAM,ccp_putc,,+used +ccp_ram.asm|59||0|0|45714|T| +ccp_ram.asm|60||0|0|45715|T| +ccp_ram.asm|61||0|0|45718|T| +ccp_ram.asm|62||0|0|45719|T| +ccp_ram.asm|64||0|0|45720|F|CCP_RAM.ccp_out_crlf +ccp_ram.asm|64||0|0|45720|L|CCP_RAM,ccp_out_crlf,,+used +ccp_ram.asm|65||0|0|45720|T| +ccp_ram.asm|66||0|0|45722|T| +ccp_ram.asm|67||0|0|45725|T| +ccp_ram.asm|68||0|0|45727|T| +ccp_ram.asm|69||0|0|45730|F|CCP_RAM.ccp_out_space +ccp_ram.asm|69||0|0|45730|L|CCP_RAM,ccp_out_space,,+used +ccp_ram.asm|70||0|0|45730|T| +ccp_ram.asm|71||0|0|45732|T| +ccp_ram.asm|77||0|0|45735|F|CCP_RAM.ccp_out_crlf_msg +ccp_ram.asm|77||0|0|45735|L|CCP_RAM,ccp_out_crlf_msg,,+used +ccp_ram.asm|78||0|0|45735|T| +ccp_ram.asm|79||0|0|45736|T| +ccp_ram.asm|80||0|0|45739|T| +ccp_ram.asm|86||0|0|45740|F|CCP_RAM.ccp_out_msg +ccp_ram.asm|86||0|0|45740|L|CCP_RAM,ccp_out_msg,,+used +ccp_ram.asm|87||0|0|45740|T| +ccp_ram.asm|88||0|0|45741|T| +ccp_ram.asm|89||0|0|45742|T| +ccp_ram.asm|90||0|0|45743|T| +ccp_ram.asm|91||0|0|45744|T| +ccp_ram.asm|92||0|0|45745|T| +ccp_ram.asm|93||0|0|45748|T| +ccp_ram.asm|94||0|0|45749|T| +ccp_ram.asm|99||0|0|45752|F|CCP_RAM.ccp_bdos_drv_allreset +ccp_ram.asm|99||0|0|45752|L|CCP_RAM,ccp_bdos_drv_allreset,,+used +ccp_ram.asm|100||0|0|45752|T| +ccp_ram.asm|101||0|0|45754|T| +ccp_ram.asm|107||0|0|45757|F|CCP_RAM.ccp_bdos_drv_set +ccp_ram.asm|107||0|0|45757|L|CCP_RAM,ccp_bdos_drv_set,,+used +ccp_ram.asm|108||0|0|45757|T| +ccp_ram.asm|109||0|0|45758|T| +ccp_ram.asm|110||0|0|45760|T| +ccp_ram.asm|117||0|0|45763|F|CCP_RAM.ccp_call_bdos +ccp_ram.asm|117||0|0|45763|L|CCP_RAM,ccp_call_bdos,,+used +ccp_ram.asm|118||0|0|45763|T| +ccp_ram.asm|119||0|0|45766|T| +ccp_ram.asm|120||0|0|45769|T| +ccp_ram.asm|121||0|0|45770|T| +ccp_ram.asm|128||0|0|45771|F|CCP_RAM.ccp_bdos_open_f +ccp_ram.asm|128||0|0|45771|L|CCP_RAM,ccp_bdos_open_f,,+used +ccp_ram.asm|129||0|0|45771|T| +ccp_ram.asm|130||0|0|45773|T| +ccp_ram.asm|135||0|0|45776|F|CCP_RAM.ccp_open_cur_fcb +ccp_ram.asm|135||0|0|45776|L|CCP_RAM,ccp_open_cur_fcb,,+used +ccp_ram.asm|136||0|0|45776|T| +ccp_ram.asm|137||0|0|45777|T| +ccp_ram.asm|138||0|0|45780|T| +ccp_ram.asm|139||0|0|45783|T| +ccp_ram.asm|144||0|0|45786|F|CCP_RAM.ccp_bdos_close_f +ccp_ram.asm|144||0|0|45786|L|CCP_RAM,ccp_bdos_close_f,,+used +ccp_ram.asm|145||0|0|45786|T| +ccp_ram.asm|146||0|0|45788|T| +ccp_ram.asm|152||0|0|45791|F|CCP_RAM.ccp_bdos_find_first +ccp_ram.asm|152||0|0|45791|L|CCP_RAM,ccp_bdos_find_first,,+used +ccp_ram.asm|153||0|0|45791|T| +ccp_ram.asm|154||0|0|45793|T| +ccp_ram.asm|160||0|0|45796|F|CCP_RAM.ccp_bdos_find_next +ccp_ram.asm|160||0|0|45796|L|CCP_RAM,ccp_bdos_find_next,,+used +ccp_ram.asm|161||0|0|45796|T| +ccp_ram.asm|162||0|0|45798|T| +ccp_ram.asm|167||0|0|45801|F|CCP_RAM.ccp_find_first +ccp_ram.asm|167||0|0|45801|L|CCP_RAM,ccp_find_first,,+used +ccp_ram.asm|168||0|0|45801|T| +ccp_ram.asm|169||0|0|45804|T| +ccp_ram.asm|174||0|0|45807|F|CCP_RAM.ccp_bdos_era_file +ccp_ram.asm|174||0|0|45807|L|CCP_RAM,ccp_bdos_era_file,,+used +ccp_ram.asm|175||0|0|45807|T| +ccp_ram.asm|176||0|0|45809|T| +ccp_ram.asm|181||0|0|45812|F|CCP_RAM.ccp_bdos_enter_zf +ccp_ram.asm|181||0|0|45812|L|CCP_RAM,ccp_bdos_enter_zf,,+used +ccp_ram.asm|182||0|0|45812|T| +ccp_ram.asm|183||0|0|45815|T| +ccp_ram.asm|184||0|0|45816|T| +ccp_ram.asm|195||0|0|45817|F|CCP_RAM.ccp_bdos_read_f +ccp_ram.asm|195||0|0|45817|L|CCP_RAM,ccp_bdos_read_f,,+used +ccp_ram.asm|196||0|0|45817|T| +ccp_ram.asm|197||0|0|45819|T| +ccp_ram.asm|202||0|0|45822|F|CCP_RAM.ccp_read_f_fcb +ccp_ram.asm|202||0|0|45822|L|CCP_RAM,ccp_read_f_fcb,,+used +ccp_ram.asm|203||0|0|45822|T| +ccp_ram.asm|204||0|0|45825|T| +ccp_ram.asm|209||0|0|45828|F|CCP_RAM.ccp_bdos_f_write +ccp_ram.asm|209||0|0|45828|L|CCP_RAM,ccp_bdos_f_write,,+used +ccp_ram.asm|210||0|0|45828|T| +ccp_ram.asm|211||0|0|45830|T| +ccp_ram.asm|216||0|0|45833|F|CCP_RAM.ccp_bdos_make_f +ccp_ram.asm|216||0|0|45833|L|CCP_RAM,ccp_bdos_make_f,,+used +ccp_ram.asm|217||0|0|45833|T| +ccp_ram.asm|218||0|0|45835|T| +ccp_ram.asm|223||0|0|45838|F|CCP_RAM.ccp_bdos_rename_f +ccp_ram.asm|223||0|0|45838|L|CCP_RAM,ccp_bdos_rename_f,,+used +ccp_ram.asm|224||0|0|45838|T| +ccp_ram.asm|225||0|0|45840|T| +ccp_ram.asm|231||0|0|45843|F|CCP_RAM.ccp_bdos_get_user +ccp_ram.asm|231||0|0|45843|L|CCP_RAM,ccp_bdos_get_user,,+used +ccp_ram.asm|232||0|0|45843|T| +ccp_ram.asm|239||0|0|45845|F|CCP_RAM.ccp_bdos_set_user +ccp_ram.asm|239||0|0|45845|L|CCP_RAM,ccp_bdos_set_user,,+used +ccp_ram.asm|240||0|0|45845|T| +ccp_ram.asm|241||0|0|45847|T| +ccp_ram.asm|246||0|0|45850|F|CCP_RAM.ccp_set_cur_drv +ccp_ram.asm|246||0|0|45850|L|CCP_RAM,ccp_set_cur_drv,,+used +ccp_ram.asm|247||0|0|45850|T| +ccp_ram.asm|248||0|0|45853|T| +ccp_ram.asm|249||0|0|45854|T| +ccp_ram.asm|250||0|0|45855|T| +ccp_ram.asm|251||0|0|45856|T| +ccp_ram.asm|252||0|0|45857|T| +ccp_ram.asm|253||0|0|45860|T| +ccp_ram.asm|254||0|0|45861|T| +ccp_ram.asm|255||0|0|45864|T| +ccp_ram.asm|262||0|0|45865|F|CCP_RAM.ccp_reset_cur_drv +ccp_ram.asm|262||0|0|45865|L|CCP_RAM,ccp_reset_cur_drv,,+used +ccp_ram.asm|263||0|0|45865|T| +ccp_ram.asm|264||0|0|45868|T| +ccp_ram.asm|265||0|0|45871|T| +ccp_ram.asm|272||0|0|45872|F|CCP_RAM.char_to_upper +ccp_ram.asm|272||0|0|45872|L|CCP_RAM,char_to_upper,,+used +ccp_ram.asm|273||0|0|45872|T| +ccp_ram.asm|274||0|0|45874|T| +ccp_ram.asm|275||0|0|45875|T| +ccp_ram.asm|276||0|0|45877|T| +ccp_ram.asm|278||0|0|45878|T| +ccp_ram.asm|279||0|0|45880|T| +ccp_ram.asm|285||0|0|45881|F|CCP_RAM.ccp_get_inp +ccp_ram.asm|285||0|0|45881|L|CCP_RAM,ccp_get_inp,,+used +ccp_ram.asm|286||0|0|45881|T| +ccp_ram.asm|287||0|0|45884|T| +ccp_ram.asm|288||0|0|45885|T| +ccp_ram.asm|291||0|0|45888|T| +ccp_ram.asm|292||0|0|45891|T| +ccp_ram.asm|293||0|0|45892|T| +ccp_ram.asm|294||0|0|45894|T| +ccp_ram.asm|297||0|0|45897|T| +ccp_ram.asm|298||0|0|45900|T| +ccp_ram.asm|299||0|0|45903|T| +ccp_ram.asm|302||0|0|45906|T| +ccp_ram.asm|303||0|0|45909|T| +ccp_ram.asm|304||0|0|45910|T| +ccp_ram.asm|305||0|0|45913|T| +ccp_ram.asm|306||0|0|45916|T| +ccp_ram.asm|307||0|0|45919|T| +ccp_ram.asm|310||0|0|45922|T| +ccp_ram.asm|311||0|0|45925|T| +ccp_ram.asm|312||0|0|45928|T| +ccp_ram.asm|313||0|0|45930|T| +ccp_ram.asm|314||0|0|45933|T| +ccp_ram.asm|315||0|0|45936|T| +ccp_ram.asm|316||0|0|45938|T| +ccp_ram.asm|317||0|0|45939|T| +ccp_ram.asm|319||0|0|45940|T| +ccp_ram.asm|320||0|0|45943|T| +ccp_ram.asm|321||0|0|45946|T| +ccp_ram.asm|323||0|0|45949|T| +ccp_ram.asm|324||0|0|45952|T| +ccp_ram.asm|325||0|0|45953|T| +ccp_ram.asm|327||0|0|45956|T| +ccp_ram.asm|328||0|0|45959|T| +ccp_ram.asm|329||0|0|45962|T| +ccp_ram.asm|330||0|0|45965|T| +ccp_ram.asm|332||0|0|45968|T| +ccp_ram.asm|333||0|0|45971|T| +ccp_ram.asm|336||0|0|45974|F|CCP_RAM.ccp_gin_no_batch +ccp_ram.asm|336||0|0|45974|L|CCP_RAM,ccp_gin_no_batch,,+used +ccp_ram.asm|337||0|0|45974|T| +ccp_ram.asm|338||0|0|45977|T| +ccp_ram.asm|340||0|0|45980|T| +ccp_ram.asm|341||0|0|45982|T| +ccp_ram.asm|343||0|0|45985|T| +ccp_ram.asm|345||0|0|45988|T| +ccp_ram.asm|347||0|0|45991|F|CCP_RAM.ccp_gin_nokey +ccp_ram.asm|347||0|0|45991|L|CCP_RAM,ccp_gin_nokey,,+used +ccp_ram.asm|348||0|0|45991|T| +ccp_ram.asm|349||0|0|45994|T| +ccp_ram.asm|351||0|0|45995|F|CCP_RAM.ccp_gin_uppr +ccp_ram.asm|351||0|0|45995|L|CCP_RAM,ccp_gin_uppr,,+used +ccp_ram.asm|352||0|0|45995|T| +ccp_ram.asm|353||0|0|45996|T| +ccp_ram.asm|354||0|0|45997|T| +ccp_ram.asm|355||0|0|45998|T| +ccp_ram.asm|356||0|0|46001|T| +ccp_ram.asm|357||0|0|46002|T| +ccp_ram.asm|358||0|0|46005|T| +ccp_ram.asm|359||0|0|46006|T| +ccp_ram.asm|360||0|0|46007|T| +ccp_ram.asm|362||0|0|46010|F|CCP_RAM.ccp_gin_uppr_end +ccp_ram.asm|362||0|0|46010|L|CCP_RAM,ccp_gin_uppr_end,,+used +ccp_ram.asm|363||0|0|46010|T| +ccp_ram.asm|364||0|0|46011|T| +ccp_ram.asm|365||0|0|46014|T| +ccp_ram.asm|366||0|0|46017|T| +ccp_ram.asm|373||0|0|46018|F|CCP_RAM.ccp_getkey_no_wait +ccp_ram.asm|373||0|0|46018|L|CCP_RAM,ccp_getkey_no_wait,,+used +ccp_ram.asm|374||0|0|46018|T| +ccp_ram.asm|376||0|0|46020|T| +ccp_ram.asm|377||0|0|46023|T| +ccp_ram.asm|378||0|0|46024|T| +ccp_ram.asm|379||0|0|46025|T| +ccp_ram.asm|381||0|0|46027|T| +ccp_ram.asm|382||0|0|46030|T| +ccp_ram.asm|383||0|0|46031|T| +ccp_ram.asm|389||0|0|46032|F|CCP_RAM.ccp_bdos_drv_get +ccp_ram.asm|389||0|0|46032|L|CCP_RAM,ccp_bdos_drv_get,,+used +ccp_ram.asm|390||0|0|46032|T| +ccp_ram.asm|391||0|0|46034|T| +ccp_ram.asm|396||0|0|46037|F|CCP_RAM.cpp_set_disk_buff_addr +ccp_ram.asm|396||0|0|46037|L|CCP_RAM,cpp_set_disk_buff_addr,,+used +ccp_ram.asm|397||0|0|46037|T| +ccp_ram.asm|403||0|0|46040|F|CCP_RAM.ccp_bdos_dma_set +ccp_ram.asm|403||0|0|46040|L|CCP_RAM,ccp_bdos_dma_set,,+used +ccp_ram.asm|404||0|0|46040|T| +ccp_ram.asm|405||0|0|46042|T| +ccp_ram.asm|410||0|0|46045|F|CCP_RAM.ccp_del_batch +ccp_ram.asm|410||0|0|46045|L|CCP_RAM,ccp_del_batch,,+used +ccp_ram.asm|411||0|0|46045|T| +ccp_ram.asm|412||0|0|46048|T| +ccp_ram.asm|413||0|0|46049|T| +ccp_ram.asm|414||0|0|46050|T| +ccp_ram.asm|415||0|0|46051|T| +ccp_ram.asm|416||0|0|46053|T| +ccp_ram.asm|417||0|0|46054|T| +ccp_ram.asm|418||0|0|46057|T| +ccp_ram.asm|419||0|0|46060|T| +ccp_ram.asm|420||0|0|46063|T| +ccp_ram.asm|421||0|0|46066|T| +ccp_ram.asm|426||0|0|46069|F|CCP_RAM.ccp_verify_pattern +ccp_ram.asm|426||0|0|46069|L|CCP_RAM,ccp_verify_pattern,,+used +ccp_ram.asm|427||0|0|46069|T| +ccp_ram.asm|428||0|0|46072|T| +ccp_ram.asm|429||0|0|46075|T| +ccp_ram.asm|431||0|0|46077|F|CCP_RAM.ccp_chk_patt_nex +ccp_ram.asm|431||0|0|46077|L|CCP_RAM,ccp_chk_patt_nex,,+used +ccp_ram.asm|432||0|0|46077|T| +ccp_ram.asm|433||0|0|46078|T| +ccp_ram.asm|434||0|0|46079|T| +ccp_ram.asm|435||0|0|46080|T| +ccp_ram.asm|436||0|0|46081|T| +ccp_ram.asm|437||0|0|46082|T| +ccp_ram.asm|438||0|0|46083|T| +ccp_ram.asm|439||0|0|46084|T| +ccp_ram.asm|440||0|0|46085|T| +ccp_ram.asm|441||0|0|46088|T| +ccp_ram.asm|446||0|0|46089|F|CCP_RAM.print_syn_err +ccp_ram.asm|446||0|0|46089|L|CCP_RAM,print_syn_err,,+used +ccp_ram.asm|447||0|0|46089|T| +ccp_ram.asm|448||0|0|46092|T| +ccp_ram.asm|449||0|0|46095|F|CCP_RAM.pse_next +ccp_ram.asm|449||0|0|46095|L|CCP_RAM,pse_next,,+used +ccp_ram.asm|450||0|0|46095|T| +ccp_ram.asm|451||0|0|46096|T| +ccp_ram.asm|452||0|0|46098|T| +ccp_ram.asm|453||0|0|46101|T| +ccp_ram.asm|454||0|0|46102|T| +ccp_ram.asm|455||0|0|46105|T| +ccp_ram.asm|457||0|0|46106|T| +ccp_ram.asm|458||0|0|46109|T| +ccp_ram.asm|459||0|0|46110|T| +ccp_ram.asm|460||0|0|46111|T| +ccp_ram.asm|461||0|0|46114|F|CCP_RAM.pse_end +ccp_ram.asm|461||0|0|46114|L|CCP_RAM,pse_end,,+used +ccp_ram.asm|462||0|0|46114|T| +ccp_ram.asm|463||0|0|46116|T| +ccp_ram.asm|464||0|0|46119|T| +ccp_ram.asm|465||0|0|46122|T| +ccp_ram.asm|466||0|0|46125|T| +ccp_ram.asm|472||0|0|46128|F|CCP_RAM.cpp_valid_inp +ccp_ram.asm|472||0|0|46128|L|CCP_RAM,cpp_valid_inp,,+used +ccp_ram.asm|473||0|0|46128|T| +ccp_ram.asm|474||0|0|46129|T| +ccp_ram.asm|475||0|0|46130|T| +ccp_ram.asm|476||0|0|46131|T| +ccp_ram.asm|477||0|0|46133|T| +ccp_ram.asm|478||0|0|46136|T| +ccp_ram.asm|479||0|0|46137|T| +ccp_ram.asm|480||0|0|46139|T| +ccp_ram.asm|481||0|0|46140|T| +ccp_ram.asm|482||0|0|46142|T| +ccp_ram.asm|483||0|0|46143|T| +ccp_ram.asm|484||0|0|46145|T| +ccp_ram.asm|485||0|0|46146|T| +ccp_ram.asm|486||0|0|46148|T| +ccp_ram.asm|487||0|0|46149|T| +ccp_ram.asm|488||0|0|46151|T| +ccp_ram.asm|489||0|0|46152|T| +ccp_ram.asm|490||0|0|46154|T| +ccp_ram.asm|491||0|0|46155|T| +ccp_ram.asm|492||0|0|46157|T| +ccp_ram.asm|493||0|0|46158|T| +ccp_ram.asm|502||0|0|46159|F|CCP_RAM.ccp_find_no_space +ccp_ram.asm|502||0|0|46159|L|CCP_RAM,ccp_find_no_space,,+used +ccp_ram.asm|503||0|0|46159|T| +ccp_ram.asm|504||0|0|46160|T| +ccp_ram.asm|505||0|0|46161|T| +ccp_ram.asm|506||0|0|46162|T| +ccp_ram.asm|507||0|0|46164|T| +ccp_ram.asm|508||0|0|46165|T| +ccp_ram.asm|509||0|0|46166|T| +ccp_ram.asm|514||0|0|46169|F|CCP_RAM.sum_hl_a +ccp_ram.asm|514||0|0|46169|L|CCP_RAM,sum_hl_a,,+used +ccp_ram.asm|515||0|0|46169|T| +ccp_ram.asm|516||0|0|46170|T| +ccp_ram.asm|517||0|0|46171|T| +ccp_ram.asm|518||0|0|46172|T| +ccp_ram.asm|519||0|0|46173|T| +ccp_ram.asm|524||0|0|46174|F|CCP_RAM.ccp_cv_first_to_fcb +ccp_ram.asm|524||0|0|46174|L|CCP_RAM,ccp_cv_first_to_fcb,,+used +ccp_ram.asm|525||0|0|46174|T| +ccp_ram.asm|532||0|0|46176|F|CCP_RAM.ccp_cv_fcb_filename +ccp_ram.asm|532||0|0|46176|L|CCP_RAM,ccp_cv_fcb_filename,,+used +ccp_ram.asm|533||0|0|46176|T| +ccp_ram.asm|534||0|0|46179|T| +ccp_ram.asm|535||0|0|46182|T| +ccp_ram.asm|536||0|0|46183|T| +ccp_ram.asm|537||0|0|46184|T| +ccp_ram.asm|538||0|0|46185|T| +ccp_ram.asm|539||0|0|46188|T| +ccp_ram.asm|540||0|0|46191|T| +ccp_ram.asm|541||0|0|46192|T| +ccp_ram.asm|542||0|0|46195|T| +ccp_ram.asm|543||0|0|46196|T| +ccp_ram.asm|544||0|0|46199|T| +ccp_ram.asm|545||0|0|46200|T| +ccp_ram.asm|546||0|0|46201|T| +ccp_ram.asm|547||0|0|46202|T| +ccp_ram.asm|548||0|0|46203|T| +ccp_ram.asm|549||0|0|46206|T| +ccp_ram.asm|550||0|0|46208|T| +ccp_ram.asm|551||0|0|46209|T| +ccp_ram.asm|552||0|0|46210|T| +ccp_ram.asm|553||0|0|46211|T| +ccp_ram.asm|554||0|0|46213|T| +ccp_ram.asm|555||0|0|46216|T| +ccp_ram.asm|557||0|0|46217|F|CCP_RAM.cur_cvf_n_end +ccp_ram.asm|557||0|0|46217|L|CCP_RAM,cur_cvf_n_end,,+used +ccp_ram.asm|558||0|0|46217|T| +ccp_ram.asm|559||0|0|46220|T| +ccp_ram.asm|560||0|0|46221|T| +ccp_ram.asm|562||0|0|46224|F|CCP_RAM.cur_cvf_drv_ltr +ccp_ram.asm|562||0|0|46224|L|CCP_RAM,cur_cvf_drv_ltr,,+used +ccp_ram.asm|563||0|0|46224|T| +ccp_ram.asm|564||0|0|46225|T| +ccp_ram.asm|565||0|0|46228|T| +ccp_ram.asm|566||0|0|46229|T| +ccp_ram.asm|568||0|0|46230|F|CCP_RAM.cur_cvf_basic_fn +ccp_ram.asm|568||0|0|46230|L|CCP_RAM,cur_cvf_basic_fn,,+used +ccp_ram.asm|569||0|0|46230|T| +ccp_ram.asm|571||0|0|46232|F|CCP_RAM.cur_cvf_chr_nxt +ccp_ram.asm|571||0|0|46232|L|CCP_RAM,cur_cvf_chr_nxt,,+used +ccp_ram.asm|572||0|0|46232|T| +ccp_ram.asm|573||0|0|46235|T| +ccp_ram.asm|574||0|0|46238|T| +ccp_ram.asm|575||0|0|46239|T| +ccp_ram.asm|576||0|0|46241|T| +ccp_ram.asm|577||0|0|46244|T| +ccp_ram.asm|578||0|0|46246|T| +ccp_ram.asm|580||0|0|46249|F|CCP_RAM.cur_cvf_no_star +ccp_ram.asm|580||0|0|46249|L|CCP_RAM,cur_cvf_no_star,,+used +ccp_ram.asm|581||0|0|46249|T| +ccp_ram.asm|582||0|0|46250|T| +ccp_ram.asm|584||0|0|46251|F|CCP_RAM.cur_cvf_nxt1 +ccp_ram.asm|584||0|0|46251|L|CCP_RAM,cur_cvf_nxt1,,+used +ccp_ram.asm|585||0|0|46251|T| +ccp_ram.asm|586||0|0|46252|T| +ccp_ram.asm|588||0|0|46255|F|CCP_RAM.cur_cvf_nxt_delim +ccp_ram.asm|588||0|0|46255|L|CCP_RAM,cur_cvf_nxt_delim,,+used +ccp_ram.asm|589||0|0|46255|T| +ccp_ram.asm|590||0|0|46258|T| +ccp_ram.asm|591||0|0|46261|T| +ccp_ram.asm|592||0|0|46262|T| +ccp_ram.asm|595||0|0|46265|F|CCP_RAM.cur_cvf_sp_remains +ccp_ram.asm|595||0|0|46265|L|CCP_RAM,cur_cvf_sp_remains,,+used +ccp_ram.asm|596||0|0|46265|T| +ccp_ram.asm|597||0|0|46266|T| +ccp_ram.asm|598||0|0|46268|T| +ccp_ram.asm|599||0|0|46269|T| +ccp_ram.asm|602||0|0|46272|F|CCP_RAM.cur_cvf_ext +ccp_ram.asm|602||0|0|46272|L|CCP_RAM,cur_cvf_ext,,+used +ccp_ram.asm|603||0|0|46272|T| +ccp_ram.asm|604||0|0|46274|T| +ccp_ram.asm|605||0|0|46276|T| +ccp_ram.asm|606||0|0|46279|T| +ccp_ram.asm|608||0|0|46280|F|CCP_RAM.cur_cvf_ext_nxt +ccp_ram.asm|608||0|0|46280|L|CCP_RAM,cur_cvf_ext_nxt,,+used +ccp_ram.asm|609||0|0|46280|T| +ccp_ram.asm|610||0|0|46283|T| +ccp_ram.asm|611||0|0|46286|T| +ccp_ram.asm|613||0|0|46287|T| +ccp_ram.asm|614||0|0|46289|T| +ccp_ram.asm|615||0|0|46292|T| +ccp_ram.asm|616||0|0|46294|T| +ccp_ram.asm|617||0|0|46297|F|CCP_RAM.cur_cvf_no_star2 +ccp_ram.asm|617||0|0|46297|L|CCP_RAM,cur_cvf_no_star2,,+used +ccp_ram.asm|618||0|0|46297|T| +ccp_ram.asm|619||0|0|46298|T| +ccp_ram.asm|620||0|0|46299|F|CCP_RAM.cur_cvf_nxt2 +ccp_ram.asm|620||0|0|46299|L|CCP_RAM,cur_cvf_nxt2,,+used +ccp_ram.asm|621||0|0|46299|T| +ccp_ram.asm|622||0|0|46300|T| +ccp_ram.asm|624||0|0|46303|F|CCP_RAM.cur_cvf_ext_skip +ccp_ram.asm|624||0|0|46303|L|CCP_RAM,cur_cvf_ext_skip,,+used +ccp_ram.asm|625||0|0|46303|T| +ccp_ram.asm|626||0|0|46306|T| +ccp_ram.asm|627||0|0|46309|T| +ccp_ram.asm|628||0|0|46310|T| +ccp_ram.asm|631||0|0|46313|F|CCP_RAM.cur_cvf_ext_fill_sp +ccp_ram.asm|631||0|0|46313|L|CCP_RAM,cur_cvf_ext_fill_sp,,+used +ccp_ram.asm|632||0|0|46313|T| +ccp_ram.asm|633||0|0|46314|T| +ccp_ram.asm|634||0|0|46316|T| +ccp_ram.asm|635||0|0|46317|T| +ccp_ram.asm|638||0|0|46320|F|CCP_RAM.cur_cvf_rst_attrs +ccp_ram.asm|638||0|0|46320|L|CCP_RAM,cur_cvf_rst_attrs,,+used +ccp_ram.asm|639||0|0|46320|T| +ccp_ram.asm|641||0|0|46322|F|CCP_RAM.cur_cvf_attrs_nxt +ccp_ram.asm|641||0|0|46322|L|CCP_RAM,cur_cvf_attrs_nxt,,+used +ccp_ram.asm|642||0|0|46322|T| +ccp_ram.asm|643||0|0|46323|T| +ccp_ram.asm|644||0|0|46325|T| +ccp_ram.asm|645||0|0|46326|T| +ccp_ram.asm|647||0|0|46329|T| +ccp_ram.asm|648||0|0|46330|T| +ccp_ram.asm|651||0|0|46333|T| +ccp_ram.asm|652||0|0|46334|T| +ccp_ram.asm|653||0|0|46337|F|CCP_RAM.cur_cvf_ambig +ccp_ram.asm|653||0|0|46337|L|CCP_RAM,cur_cvf_ambig,,+used +ccp_ram.asm|654||0|0|46337|T| +ccp_ram.asm|655||0|0|46338|T| +ccp_ram.asm|656||0|0|46339|T| +ccp_ram.asm|657||0|0|46341|T| +ccp_ram.asm|658||0|0|46344|T| +ccp_ram.asm|659||0|0|46345|F|CCP_RAM.cur_cvf_ambig_nxt1 +ccp_ram.asm|659||0|0|46345|L|CCP_RAM,cur_cvf_ambig_nxt1,,+used +ccp_ram.asm|660||0|0|46345|T| +ccp_ram.asm|661||0|0|46346|T| +ccp_ram.asm|662||0|0|46349|T| +ccp_ram.asm|663||0|0|46350|T| +ccp_ram.asm|664||0|0|46351|T| +ccp_ram.asm|669||0|0|46352|F|CCP_RAM.cpm_cmd_tab +ccp_ram.asm|669||0|0|46352|L|CCP_RAM,cpm_cmd_tab,,+used +ccp_ram.asm|677||0|0|46376|F|CCP_RAM.cpm_pattern +ccp_ram.asm|677||0|0|46376|L|CCP_RAM,cpm_pattern,,+used +ccp_ram.asm|689||0|0|46382|F|CCP_RAM.ccp_search_cmd +ccp_ram.asm|689||0|0|46382|L|CCP_RAM,ccp_search_cmd,,+used +ccp_ram.asm|690||0|0|46382|T| +ccp_ram.asm|691||0|0|46385|T| +ccp_ram.asm|693||0|0|46387|F|CCP_RAM.ccp_sc_cmd_nxt +ccp_ram.asm|693||0|0|46387|L|CCP_RAM,ccp_sc_cmd_nxt,,+used +ccp_ram.asm|694||0|0|46387|T| +ccp_ram.asm|695||0|0|46388|T| +ccp_ram.asm|696||0|0|46390|T| +ccp_ram.asm|697||0|0|46391|T| +ccp_ram.asm|698||0|0|46394|T| +ccp_ram.asm|699||0|0|46396|F|CCP_RAM.ccp_sc_chr_nxt +ccp_ram.asm|699||0|0|46396|L|CCP_RAM,ccp_sc_chr_nxt,,+used +ccp_ram.asm|700||0|0|46396|T| +ccp_ram.asm|701||0|0|46397|T| +ccp_ram.asm|702||0|0|46398|T| +ccp_ram.asm|703||0|0|46401|T| +ccp_ram.asm|704||0|0|46402|T| +ccp_ram.asm|705||0|0|46403|T| +ccp_ram.asm|706||0|0|46404|T| +ccp_ram.asm|708||0|0|46407|T| +ccp_ram.asm|709||0|0|46408|T| +ccp_ram.asm|710||0|0|46410|T| +ccp_ram.asm|711||0|0|46413|T| +ccp_ram.asm|712||0|0|46414|T| +ccp_ram.asm|715||0|0|46415|F|CCP_RAM.ccp_sc_no_match +ccp_ram.asm|715||0|0|46415|L|CCP_RAM,ccp_sc_no_match,,+used +ccp_ram.asm|716||0|0|46415|T| +ccp_ram.asm|717||0|0|46416|T| +ccp_ram.asm|718||0|0|46417|T| +ccp_ram.asm|720||0|0|46420|F|CCP_RAM.ccp_sc_skip_cmd +ccp_ram.asm|720||0|0|46420|L|CCP_RAM,ccp_sc_skip_cmd,,+used +ccp_ram.asm|721||0|0|46420|T| +ccp_ram.asm|722||0|0|46421|T| +ccp_ram.asm|727||0|0|46424|F|CCP_RAM.ccp_clear_buff +ccp_ram.asm|727||0|0|46424|L|CCP_RAM,ccp_clear_buff,,+used +ccp_ram.asm|728||0|0|46424|T| +ccp_ram.asm|729||0|0|46425|T| +ccp_ram.asm|735||0|0|46428|F|ccp_ent +ccp_ram.asm|735||0|0|46428|L|,ccp_ent,,+used +ccp_ram.asm|736||0|0|46428|T| +ccp_ram.asm|737||0|0|46431|T| +ccp_ram.asm|738||0|0|46432|T| +ccp_ram.asm|740||0|0|46433|T| +ccp_ram.asm|741||0|0|46434|T| +ccp_ram.asm|742||0|0|46435|T| +ccp_ram.asm|743||0|0|46436|T| +ccp_ram.asm|745||0|0|46437|T| +ccp_ram.asm|746||0|0|46439|T| +ccp_ram.asm|747||0|0|46440|T| +ccp_ram.asm|748||0|0|46443|T| +ccp_ram.asm|749||0|0|46446|T| +ccp_ram.asm|750||0|0|46449|T| +ccp_ram.asm|751||0|0|46450|T| +ccp_ram.asm|752||0|0|46451|T| +ccp_ram.asm|753||0|0|46453|T| +ccp_ram.asm|754||0|0|46456|T| +ccp_ram.asm|755||0|0|46459|T| +ccp_ram.asm|756||0|0|46462|T| +ccp_ram.asm|757||0|0|46463|T| +ccp_ram.asm|762||0|0|46466|F|CCP_RAM.ccp_get_command +ccp_ram.asm|762||0|0|46466|L|CCP_RAM,ccp_get_command,,+used +ccp_ram.asm|763||0|0|46466|T| +ccp_ram.asm|764||0|0|46469|T| +ccp_ram.asm|765||0|0|46472|T| +ccp_ram.asm|766||0|0|46475|T| +ccp_ram.asm|767||0|0|46477|T| +ccp_ram.asm|768||0|0|46480|T| +ccp_ram.asm|769||0|0|46482|T| +ccp_ram.asm|770||0|0|46485|T| +ccp_ram.asm|775||0|0|46488|F|CCP_RAM.ccp_process_cmd +ccp_ram.asm|775||0|0|46488|L|CCP_RAM,ccp_process_cmd,,+used +ccp_ram.asm|776||0|0|46488|T| +ccp_ram.asm|777||0|0|46491|T| +ccp_ram.asm|778||0|0|46494|T| +ccp_ram.asm|779||0|0|46497|T| +ccp_ram.asm|780||0|0|46500|T| +ccp_ram.asm|781||0|0|46503|T| +ccp_ram.asm|782||0|0|46506|T| +ccp_ram.asm|783||0|0|46509|T| +ccp_ram.asm|784||0|0|46510|T| +ccp_ram.asm|785||0|0|46513|T| +ccp_ram.asm|786||0|0|46516|T| +ccp_ram.asm|788||0|0|46519|T| +ccp_ram.asm|789||0|0|46520|T| +ccp_ram.asm|790||0|0|46522|T| +ccp_ram.asm|791||0|0|46523|T| +ccp_ram.asm|792||0|0|46524|T| +ccp_ram.asm|793||0|0|46525|T| +ccp_ram.asm|794||0|0|46526|T| +ccp_ram.asm|795||0|0|46527|T| +ccp_ram.asm|796||0|0|46528|T| +ccp_ram.asm|798||0|0|46529|F|CCP_RAM.ccp_cmd_addr +ccp_ram.asm|798||0|0|46529|L|CCP_RAM,ccp_cmd_addr,,+used +ccp_ram.asm|810||0|0|46543|F|CCP_RAM.cpp_halt +ccp_ram.asm|810||0|0|46543|L|CCP_RAM,cpp_halt, +ccp_ram.asm|811||0|0|46543|T| +ccp_ram.asm|812||0|0|46546|T| +ccp_ram.asm|813||0|0|46549|T| +ccp_ram.asm|814||0|0|46552|T| +ccp_ram.asm|816||0|0|46553|F|CCP_RAM.ccp_type_rd_err +ccp_ram.asm|816||0|0|46553|L|CCP_RAM,ccp_type_rd_err,,+used +ccp_ram.asm|817||0|0|46553|T| +ccp_ram.asm|818||0|0|46556|T| +ccp_ram.asm|820||0|0|46559|F|CCP_RAM.ccp_type_rd_err.msg_read_error +ccp_ram.asm|820||0|0|46559|L|CCP_RAM,ccp_type_rd_err,msg_read_error,+used +ccp_ram.asm|826||0|0|46570|F|CCP_RAM.ccp_out_no_file +ccp_ram.asm|826||0|0|46570|L|CCP_RAM,ccp_out_no_file,,+used +ccp_ram.asm|827||0|0|46570|T| +ccp_ram.asm|828||0|0|46573|T| +ccp_ram.asm|829||0|0|46576|F|CCP_RAM.ccp_out_no_file.msg_no_file +ccp_ram.asm|829||0|0|46576|L|CCP_RAM,ccp_out_no_file,msg_no_file,+used +ccp_ram.asm|836||0|0|46584|F|CCP_RAM.ccp_decode_num +ccp_ram.asm|836||0|0|46584|L|CCP_RAM,ccp_decode_num,,+used +ccp_ram.asm|837||0|0|46584|T| +ccp_ram.asm|838||0|0|46587|T| +ccp_ram.asm|839||0|0|46590|T| +ccp_ram.asm|840||0|0|46591|T| +ccp_ram.asm|841||0|0|46594|T| +ccp_ram.asm|842||0|0|46597|T| +ccp_ram.asm|845||0|0|46600|F|CCP_RAM.ccp_dff_nxt_num +ccp_ram.asm|845||0|0|46600|L|CCP_RAM,ccp_dff_nxt_num,,+used +ccp_ram.asm|846||0|0|46600|T| +ccp_ram.asm|847||0|0|46601|T| +ccp_ram.asm|848||0|0|46603|T| +ccp_ram.asm|850||0|0|46606|T| +ccp_ram.asm|851||0|0|46607|T| +ccp_ram.asm|852||0|0|46609|T| +ccp_ram.asm|853||0|0|46611|T| +ccp_ram.asm|854||0|0|46614|T| +ccp_ram.asm|855||0|0|46615|T| +ccp_ram.asm|856||0|0|46616|T| +ccp_ram.asm|857||0|0|46618|T| +ccp_ram.asm|859||0|0|46621|T| +ccp_ram.asm|860||0|0|46622|T| +ccp_ram.asm|861||0|0|46623|T| +ccp_ram.asm|862||0|0|46624|T| +ccp_ram.asm|863||0|0|46625|T| +ccp_ram.asm|864||0|0|46626|T| +ccp_ram.asm|865||0|0|46629|T| +ccp_ram.asm|866||0|0|46630|T| +ccp_ram.asm|868||0|0|46633|T| +ccp_ram.asm|869||0|0|46634|T| +ccp_ram.asm|870||0|0|46637|T| +ccp_ram.asm|872||0|0|46638|T| +ccp_ram.asm|873||0|0|46639|T| +ccp_ram.asm|874||0|0|46642|T| +ccp_ram.asm|876||0|0|46643|F|CCP_RAM.ccp_dff_num_fin +ccp_ram.asm|876||0|0|46643|L|CCP_RAM,ccp_dff_num_fin,,+used +ccp_ram.asm|877||0|0|46643|T| +ccp_ram.asm|878||0|0|46644|T| +ccp_ram.asm|879||0|0|46646|T| +ccp_ram.asm|880||0|0|46649|T| +ccp_ram.asm|881||0|0|46650|T| +ccp_ram.asm|882||0|0|46651|T| +ccp_ram.asm|883||0|0|46654|T| +ccp_ram.asm|884||0|0|46655|T| +ccp_ram.asm|890||0|0|46656|F|CCP_RAM.ccp_mv_hlde_3 +ccp_ram.asm|890||0|0|46656|L|CCP_RAM,ccp_mv_hlde_3,,+used +ccp_ram.asm|891||0|0|46656|T| +ccp_ram.asm|896||0|0|46658|F|CCP_RAM.ccp_mv_hlde_b +ccp_ram.asm|896||0|0|46658|L|CCP_RAM,ccp_mv_hlde_b,,+used +ccp_ram.asm|897||0|0|46658|T| +ccp_ram.asm|898||0|0|46659|T| +ccp_ram.asm|899||0|0|46660|T| +ccp_ram.asm|900||0|0|46661|T| +ccp_ram.asm|901||0|0|46662|T| +ccp_ram.asm|902||0|0|46663|T| +ccp_ram.asm|903||0|0|46666|T| +ccp_ram.asm|910||0|0|46667|F|CCP_RAM.get_std_buff_ac +ccp_ram.asm|910||0|0|46667|L|CCP_RAM,get_std_buff_ac,,+used +ccp_ram.asm|911||0|0|46667|T| +ccp_ram.asm|912||0|0|46670|T| +ccp_ram.asm|913||0|0|46671|T| +ccp_ram.asm|914||0|0|46674|T| +ccp_ram.asm|915||0|0|46675|T| +ccp_ram.asm|921||0|0|46676|F|CCP_RAM.ccp_drive_sel +ccp_ram.asm|921||0|0|46676|L|CCP_RAM,ccp_drive_sel,,+used +ccp_ram.asm|922||0|0|46676|T| +ccp_ram.asm|923||0|0|46677|T| +ccp_ram.asm|924||0|0|46680|T| +ccp_ram.asm|925||0|0|46683|T| +ccp_ram.asm|926||0|0|46684|T| +ccp_ram.asm|927||0|0|46685|T| +ccp_ram.asm|928||0|0|46686|T| +ccp_ram.asm|929||0|0|46689|T| +ccp_ram.asm|930||0|0|46690|T| +ccp_ram.asm|931||0|0|46691|T| +ccp_ram.asm|936||0|0|46694|F|CCP_RAM.ccp_restor_drv +ccp_ram.asm|936||0|0|46694|L|CCP_RAM,ccp_restor_drv,,+used +ccp_ram.asm|937||0|0|46694|T| +ccp_ram.asm|938||0|0|46697|T| +ccp_ram.asm|939||0|0|46698|T| +ccp_ram.asm|940||0|0|46699|T| +ccp_ram.asm|941||0|0|46700|T| +ccp_ram.asm|942||0|0|46703|T| +ccp_ram.asm|943||0|0|46704|T| +ccp_ram.asm|944||0|0|46705|T| +ccp_ram.asm|945||0|0|46708|T| +ccp_ram.asm|950||0|0|46711|F|CCP_RAM.cmd_dir +ccp_ram.asm|950||0|0|46711|L|CCP_RAM,cmd_dir,,+used +ccp_ram.asm|951||0|0|46711|T| +ccp_ram.asm|952||0|0|46714|T| +ccp_ram.asm|954||0|0|46717|T| +ccp_ram.asm|955||0|0|46720|T| +ccp_ram.asm|956||0|0|46721|T| +ccp_ram.asm|957||0|0|46723|T| +ccp_ram.asm|960||0|0|46726|T| +ccp_ram.asm|961||0|0|46728|F|CCP_RAM.cmd_dir.fill_wc +ccp_ram.asm|961||0|0|46728|L|CCP_RAM,cmd_dir,fill_wc,+used +ccp_ram.asm|962||0|0|46728|T| +ccp_ram.asm|963||0|0|46730|T| +ccp_ram.asm|964||0|0|46731|T| +ccp_ram.asm|965||0|0|46732|T| +ccp_ram.asm|967||0|0|46735|F|CCP_RAM.cmd_dir.dir_fmask +ccp_ram.asm|967||0|0|46735|L|CCP_RAM,cmd_dir,dir_fmask,+used +ccp_ram.asm|968||0|0|46735|T| +ccp_ram.asm|969||0|0|46737|T| +ccp_ram.asm|971||0|0|46738|T| +ccp_ram.asm|972||0|0|46741|T| +ccp_ram.asm|974||0|0|46744|F|CCP_RAM.cmd_dir.dir_f_next +ccp_ram.asm|974||0|0|46744|L|CCP_RAM,cmd_dir,dir_f_next,+used +ccp_ram.asm|975||0|0|46744|T| +ccp_ram.asm|976||0|0|46747|T| +ccp_ram.asm|979||0|0|46750|T| +ccp_ram.asm|980||0|0|46751|T| +ccp_ram.asm|981||0|0|46752|T| +ccp_ram.asm|982||0|0|46753|T| +ccp_ram.asm|984||0|0|46755|T| +ccp_ram.asm|985||0|0|46756|T| +ccp_ram.asm|988||0|0|46758|T| +ccp_ram.asm|989||0|0|46761|T| +ccp_ram.asm|990||0|0|46762|T| +ccp_ram.asm|991||0|0|46765|T| +ccp_ram.asm|992||0|0|46766|T| +ccp_ram.asm|993||0|0|46767|T| +ccp_ram.asm|994||0|0|46768|T| +ccp_ram.asm|995||0|0|46769|T| +ccp_ram.asm|996||0|0|46771|T| +ccp_ram.asm|997||0|0|46772|T| +ccp_ram.asm|999||0|0|46775|T| +ccp_ram.asm|1001||0|0|46778|T| +ccp_ram.asm|1002||0|0|46779|T| +ccp_ram.asm|1003||0|0|46782|T| +ccp_ram.asm|1004||0|0|46783|T| +ccp_ram.asm|1005||0|0|46785|T| +ccp_ram.asm|1006||0|0|46788|T| +ccp_ram.asm|1007||0|0|46790|T| +ccp_ram.asm|1008||0|0|46793|T| +ccp_ram.asm|1009||0|0|46796|F|CCP_RAM.cmd_dir.dir_no_eol +ccp_ram.asm|1009||0|0|46796|L|CCP_RAM,cmd_dir,dir_no_eol,+used +ccp_ram.asm|1011||0|0|46796|T| +ccp_ram.asm|1012||0|0|46799|T| +ccp_ram.asm|1013||0|0|46801|T| +ccp_ram.asm|1014||0|0|46804|F|CCP_RAM.cmd_dir.dir_out_sp +ccp_ram.asm|1014||0|0|46804|L|CCP_RAM,cmd_dir,dir_out_sp,+used +ccp_ram.asm|1015||0|0|46804|T| +ccp_ram.asm|1016||0|0|46807|T| +ccp_ram.asm|1017||0|0|46809|F|CCP_RAM.cmd_dir.dir_get_one +ccp_ram.asm|1017||0|0|46809|L|CCP_RAM,cmd_dir,dir_get_one,+used +ccp_ram.asm|1018||0|0|46809|T| +ccp_ram.asm|1019||0|0|46810|T| +ccp_ram.asm|1020||0|0|46813|T| +ccp_ram.asm|1021||0|0|46815|T| +ccp_ram.asm|1022||0|0|46817|T| +ccp_ram.asm|1024||0|0|46820|T| +ccp_ram.asm|1025||0|0|46821|T| +ccp_ram.asm|1026||0|0|46822|T| +ccp_ram.asm|1027||0|0|46824|T| +ccp_ram.asm|1028||0|0|46827|T| +ccp_ram.asm|1029||0|0|46829|T| +ccp_ram.asm|1030||0|0|46832|T| +ccp_ram.asm|1031||0|0|46834|T| +ccp_ram.asm|1032||0|0|46836|T| +ccp_ram.asm|1033||0|0|46839|F|CCP_RAM.cmd_dir.dir_end_ext +ccp_ram.asm|1033||0|0|46839|L|CCP_RAM,cmd_dir,dir_end_ext,+used +ccp_ram.asm|1034||0|0|46839|T| +ccp_ram.asm|1035||0|0|46841|F|CCP_RAM.cmd_dir.no_name_end +ccp_ram.asm|1035||0|0|46841|L|CCP_RAM,cmd_dir,no_name_end,+used +ccp_ram.asm|1036||0|0|46841|T| +ccp_ram.asm|1037||0|0|46844|T| +ccp_ram.asm|1038||0|0|46845|T| +ccp_ram.asm|1039||0|0|46846|T| +ccp_ram.asm|1040||0|0|46848|T| +ccp_ram.asm|1041||0|0|46851|T| +ccp_ram.asm|1042||0|0|46853|T| +ccp_ram.asm|1043||0|0|46856|T| +ccp_ram.asm|1044||0|0|46859|T| +ccp_ram.asm|1045||0|0|46862|F|CCP_RAM.cmd_dir.dir_skp_sp +ccp_ram.asm|1045||0|0|46862|L|CCP_RAM,cmd_dir,dir_skp_sp,+used +ccp_ram.asm|1046||0|0|46862|T| +ccp_ram.asm|1047||0|0|46863|F|CCP_RAM.cmd_dir.dir_dont_lst +ccp_ram.asm|1047||0|0|46863|L|CCP_RAM,cmd_dir,dir_dont_lst,+used +ccp_ram.asm|1049||0|0|46863|T| +ccp_ram.asm|1050||0|0|46866|T| +ccp_ram.asm|1053||0|0|46869|T| +ccp_ram.asm|1054||0|0|46872|T| +ccp_ram.asm|1057||0|0|46875|F|CCP_RAM.cmd_dir.dir_f_no_more +ccp_ram.asm|1057||0|0|46875|L|CCP_RAM,cmd_dir,dir_f_no_more,+used +ccp_ram.asm|1058||0|0|46875|T| +ccp_ram.asm|1059||0|0|46876|T| +ccp_ram.asm|1064||0|0|46879|F|CCP_RAM.cmd_erase +ccp_ram.asm|1064||0|0|46879|L|CCP_RAM,cmd_erase,,+used +ccp_ram.asm|1065||0|0|46879|T| +ccp_ram.asm|1067||0|0|46882|T| +ccp_ram.asm|1068||0|0|46884|T| +ccp_ram.asm|1070||0|0|46887|T| +ccp_ram.asm|1071||0|0|46890|T| +ccp_ram.asm|1072||0|0|46893|T| +ccp_ram.asm|1073||0|0|46896|T| +ccp_ram.asm|1075||0|0|46899|T| +ccp_ram.asm|1076||0|0|46900|T| +ccp_ram.asm|1077||0|0|46903|T| +ccp_ram.asm|1078||0|0|46904|T| +ccp_ram.asm|1079||0|0|46905|T| +ccp_ram.asm|1080||0|0|46907|T| +ccp_ram.asm|1081||0|0|46910|T| +ccp_ram.asm|1082||0|0|46911|T| +ccp_ram.asm|1084||0|0|46914|F|CCP_RAM.cmd_erase.era_no_wc +ccp_ram.asm|1084||0|0|46914|L|CCP_RAM,cmd_erase,era_no_wc,+used +ccp_ram.asm|1085||0|0|46914|T| +ccp_ram.asm|1086||0|0|46917|T| +ccp_ram.asm|1087||0|0|46920|T| +ccp_ram.asm|1088||0|0|46923|T| +ccp_ram.asm|1089||0|0|46924|T| +ccp_ram.asm|1090||0|0|46927|T| +ccp_ram.asm|1092||0|0|46930|F|CCP_RAM.msg_all_yn +ccp_ram.asm|1092||0|0|46930|L|CCP_RAM,msg_all_yn,,+used +ccp_ram.asm|1098||0|0|46941|F|CCP_RAM.cmd_type +ccp_ram.asm|1098||0|0|46941|L|CCP_RAM,cmd_type,,+used +ccp_ram.asm|1099||0|0|46941|T| +ccp_ram.asm|1100||0|0|46944|T| +ccp_ram.asm|1102||0|0|46947|T| +ccp_ram.asm|1103||0|0|46950|T| +ccp_ram.asm|1104||0|0|46953|T| +ccp_ram.asm|1105||0|0|46956|T| +ccp_ram.asm|1106||0|0|46959|T| +ccp_ram.asm|1107||0|0|46962|T| +ccp_ram.asm|1109||0|0|46964|F|CCP_RAM.cmd_type.cont_or_read +ccp_ram.asm|1109||0|0|46964|L|CCP_RAM,cmd_type,cont_or_read,+used +ccp_ram.asm|1110||0|0|46964|T| +ccp_ram.asm|1111||0|0|46967|T| +ccp_ram.asm|1112||0|0|46968|T| +ccp_ram.asm|1113||0|0|46970|T| +ccp_ram.asm|1116||0|0|46973|T| +ccp_ram.asm|1117||0|0|46974|T| +ccp_ram.asm|1118||0|0|46977|T| +ccp_ram.asm|1119||0|0|46978|T| +ccp_ram.asm|1121||0|0|46981|T| +ccp_ram.asm|1122||0|0|46982|T| +ccp_ram.asm|1124||0|0|46983|F|CCP_RAM.cmd_type.out_next_char +ccp_ram.asm|1124||0|0|46983|L|CCP_RAM,cmd_type,out_next_char,+used +ccp_ram.asm|1126||0|0|46983|T| +ccp_ram.asm|1127||0|0|46984|T| +ccp_ram.asm|1129||0|0|46987|T| +ccp_ram.asm|1130||0|0|46990|T| +ccp_ram.asm|1131||0|0|46991|T| +ccp_ram.asm|1132||0|0|46993|T| +ccp_ram.asm|1133||0|0|46996|T| +ccp_ram.asm|1135||0|0|46999|T| +ccp_ram.asm|1136||0|0|47002|T| +ccp_ram.asm|1138||0|0|47005|T| +ccp_ram.asm|1141||0|0|47008|F|CCP_RAM.cmd_type.read_no_ok +ccp_ram.asm|1141||0|0|47008|L|CCP_RAM,cmd_type,read_no_ok,+used +ccp_ram.asm|1142||0|0|47008|T| +ccp_ram.asm|1143||0|0|47009|T| +ccp_ram.asm|1144||0|0|47012|T| +ccp_ram.asm|1146||0|0|47015|F|CCP_RAM.cmd_type.not_found +ccp_ram.asm|1146||0|0|47015|L|CCP_RAM,cmd_type,not_found,+used +ccp_ram.asm|1147||0|0|47015|T| +ccp_ram.asm|1148||0|0|47018|T| +ccp_ram.asm|1153||0|0|47021|F|CCP_RAM.cmd_save +ccp_ram.asm|1153||0|0|47021|L|CCP_RAM,cmd_save,,+used +ccp_ram.asm|1154||0|0|47021|T| +ccp_ram.asm|1155||0|0|47024|T| +ccp_ram.asm|1156||0|0|47025|T| +ccp_ram.asm|1157||0|0|47028|T| +ccp_ram.asm|1159||0|0|47031|T| +ccp_ram.asm|1160||0|0|47034|T| +ccp_ram.asm|1161||0|0|47037|T| +ccp_ram.asm|1162||0|0|47038|T| +ccp_ram.asm|1163||0|0|47041|T| +ccp_ram.asm|1165||0|0|47042|T| +ccp_ram.asm|1166||0|0|47045|T| +ccp_ram.asm|1167||0|0|47048|T| +ccp_ram.asm|1168||0|0|47049|T| +ccp_ram.asm|1169||0|0|47052|T| +ccp_ram.asm|1170||0|0|47053|T| +ccp_ram.asm|1171||0|0|47054|T| +ccp_ram.asm|1172||0|0|47056|T| +ccp_ram.asm|1173||0|0|47057|T| +ccp_ram.asm|1175||0|0|47060|F|CCP_RAM.cmd_save.write_next +ccp_ram.asm|1175||0|0|47060|L|CCP_RAM,cmd_save,write_next,+used +ccp_ram.asm|1177||0|0|47060|T| +ccp_ram.asm|1178||0|0|47061|T| +ccp_ram.asm|1179||0|0|47062|T| +ccp_ram.asm|1180||0|0|47065|T| +ccp_ram.asm|1181||0|0|47066|T| +ccp_ram.asm|1183||0|0|47067|T| +ccp_ram.asm|1184||0|0|47070|T| +ccp_ram.asm|1185||0|0|47071|T| +ccp_ram.asm|1186||0|0|47072|T| +ccp_ram.asm|1188||0|0|47075|T| +ccp_ram.asm|1189||0|0|47078|T| +ccp_ram.asm|1190||0|0|47081|T| +ccp_ram.asm|1191||0|0|47082|T| +ccp_ram.asm|1192||0|0|47083|T| +ccp_ram.asm|1193||0|0|47086|T| +ccp_ram.asm|1196||0|0|47089|F|CCP_RAM.ccp_close_f_cur +ccp_ram.asm|1196||0|0|47089|L|CCP_RAM,ccp_close_f_cur,,+used +ccp_ram.asm|1197||0|0|47089|T| +ccp_ram.asm|1198||0|0|47092|T| +ccp_ram.asm|1199||0|0|47095|T| +ccp_ram.asm|1200||0|0|47096|T| +ccp_ram.asm|1205||0|0|47099|F|CCP_RAM.ccp_no_space +ccp_ram.asm|1205||0|0|47099|L|CCP_RAM,ccp_no_space,,+used +ccp_ram.asm|1206||0|0|47099|T| +ccp_ram.asm|1207||0|0|47102|T| +ccp_ram.asm|1209||0|0|47105|F|CCP_RAM.rest_buf_ret_cmd +ccp_ram.asm|1209||0|0|47105|L|CCP_RAM,rest_buf_ret_cmd,,+used +ccp_ram.asm|1210||0|0|47105|T| +ccp_ram.asm|1211||0|0|47108|T| +ccp_ram.asm|1213||0|0|47111|F|CCP_RAM.msg_no_space +ccp_ram.asm|1213||0|0|47111|L|CCP_RAM,msg_no_space,,+used +ccp_ram.asm|1219||0|0|47120|F|CCP_RAM.cmd_ren +ccp_ram.asm|1219||0|0|47120|L|CCP_RAM,cmd_ren,,+used +ccp_ram.asm|1220||0|0|47120|T| +ccp_ram.asm|1221||0|0|47123|T| +ccp_ram.asm|1222||0|0|47126|T| +ccp_ram.asm|1223||0|0|47129|T| +ccp_ram.asm|1225||0|0|47130|T| +ccp_ram.asm|1226||0|0|47133|T| +ccp_ram.asm|1227||0|0|47136|T| +ccp_ram.asm|1229||0|0|47139|T| +ccp_ram.asm|1230||0|0|47142|T| +ccp_ram.asm|1231||0|0|47145|T| +ccp_ram.asm|1232||0|0|47147|T| +ccp_ram.asm|1234||0|0|47150|T| +ccp_ram.asm|1235||0|0|47153|T| +ccp_ram.asm|1236||0|0|47154|T| +ccp_ram.asm|1237||0|0|47157|T| +ccp_ram.asm|1238||0|0|47159|T| +ccp_ram.asm|1239||0|0|47162|T| +ccp_ram.asm|1240||0|0|47164|T| +ccp_ram.asm|1242||0|0|47167|F|CCP_RAM.cmd_ren.do_rename +ccp_ram.asm|1242||0|0|47167|L|CCP_RAM,cmd_ren,do_rename,+used +ccp_ram.asm|1243||0|0|47167|T| +ccp_ram.asm|1244||0|0|47168|T| +ccp_ram.asm|1245||0|0|47169|T| +ccp_ram.asm|1246||0|0|47172|T| +ccp_ram.asm|1247||0|0|47175|T| +ccp_ram.asm|1249||0|0|47178|T| +ccp_ram.asm|1250||0|0|47179|T| +ccp_ram.asm|1251||0|0|47180|T| +ccp_ram.asm|1252||0|0|47183|T| +ccp_ram.asm|1253||0|0|47184|T| +ccp_ram.asm|1254||0|0|47185|T| +ccp_ram.asm|1255||0|0|47188|T| +ccp_ram.asm|1256||0|0|47189|T| +ccp_ram.asm|1257||0|0|47190|T| +ccp_ram.asm|1259||0|0|47193|F|CCP_RAM.cmd_ren.same_drive +ccp_ram.asm|1259||0|0|47193|L|CCP_RAM,cmd_ren,same_drive,+used +ccp_ram.asm|1260||0|0|47193|T| +ccp_ram.asm|1262||0|0|47194|T| +ccp_ram.asm|1263||0|0|47195|T| +ccp_ram.asm|1264||0|0|47198|T| +ccp_ram.asm|1265||0|0|47201|T| +ccp_ram.asm|1267||0|0|47204|T| +ccp_ram.asm|1268||0|0|47207|T| +ccp_ram.asm|1269||0|0|47210|T| +ccp_ram.asm|1271||0|0|47213|F|CCP_RAM.cmd_ren.second_exists +ccp_ram.asm|1271||0|0|47213|L|CCP_RAM,cmd_ren,second_exists,+used +ccp_ram.asm|1272||0|0|47213|T| +ccp_ram.asm|1273||0|0|47216|T| +ccp_ram.asm|1275||0|0|47219|F|CCP_RAM.cmd_ren.rename_err +ccp_ram.asm|1275||0|0|47219|L|CCP_RAM,cmd_ren,rename_err,+used +ccp_ram.asm|1276||0|0|47219|T| +ccp_ram.asm|1277||0|0|47222|T| +ccp_ram.asm|1279||0|0|47225|F|CCP_RAM.cmd_ren.file_exists +ccp_ram.asm|1279||0|0|47225|L|CCP_RAM,cmd_ren,file_exists,+used +ccp_ram.asm|1280||0|0|47225|T| +ccp_ram.asm|1281||0|0|47228|T| +ccp_ram.asm|1282||0|0|47231|T| +ccp_ram.asm|1284||0|0|47234|F|CCP_RAM.cmd_ren.msg_file_exists +ccp_ram.asm|1284||0|0|47234|L|CCP_RAM,cmd_ren,msg_file_exists,+used +ccp_ram.asm|1290||0|0|47246|F|CCP_RAM.cmd_user +ccp_ram.asm|1290||0|0|47246|L|CCP_RAM,cmd_user,,+used +ccp_ram.asm|1291||0|0|47246|T| +ccp_ram.asm|1293||0|0|47249|T| +ccp_ram.asm|1294||0|0|47251|T| +ccp_ram.asm|1295||0|0|47254|T| +ccp_ram.asm|1297||0|0|47255|T| +ccp_ram.asm|1298||0|0|47258|T| +ccp_ram.asm|1299||0|0|47260|T| +ccp_ram.asm|1301||0|0|47263|T| +ccp_ram.asm|1302||0|0|47266|T| +ccp_ram.asm|1304||0|0|47269|F|CCP_RAM.ccp_unk_cmd +ccp_ram.asm|1304||0|0|47269|L|CCP_RAM,ccp_unk_cmd,,+used +ccp_ram.asm|1305||0|0|47269|T| +ccp_ram.asm|1307||0|0|47272|T| +ccp_ram.asm|1308||0|0|47275|T| +ccp_ram.asm|1309||0|0|47277|T| +ccp_ram.asm|1311||0|0|47280|T| +ccp_ram.asm|1312||0|0|47283|T| +ccp_ram.asm|1313||0|0|47284|T| +ccp_ram.asm|1315||0|0|47287|T| +ccp_ram.asm|1316||0|0|47288|T| +ccp_ram.asm|1317||0|0|47291|T| +ccp_ram.asm|1318||0|0|47294|T| +ccp_ram.asm|1319||0|0|47297|T| +ccp_ram.asm|1321||0|0|47300|F|CCP_RAM.ccp_unk_cmd.exec_file +ccp_ram.asm|1321||0|0|47300|L|CCP_RAM,ccp_unk_cmd,exec_file,+used +ccp_ram.asm|1323||0|0|47300|T| +ccp_ram.asm|1324||0|0|47303|T| +ccp_ram.asm|1325||0|0|47304|T| +ccp_ram.asm|1326||0|0|47306|T| +ccp_ram.asm|1327||0|0|47309|T| +ccp_ram.asm|1329||0|0|47310|T| +ccp_ram.asm|1330||0|0|47313|T| +ccp_ram.asm|1332||0|0|47314|T| +ccp_ram.asm|1333||0|0|47317|T| +ccp_ram.asm|1334||0|0|47320|T| +ccp_ram.asm|1335||0|0|47323|T| +ccp_ram.asm|1336||0|0|47326|T| +ccp_ram.asm|1338||0|0|47329|F|CCP_RAM.ccp_unk_cmd.read_next_sec +ccp_ram.asm|1338||0|0|47329|L|CCP_RAM,ccp_unk_cmd,read_next_sec,+used +ccp_ram.asm|1339||0|0|47329|T| +ccp_ram.asm|1340||0|0|47330|T| +ccp_ram.asm|1341||0|0|47331|T| +ccp_ram.asm|1343||0|0|47334|T| +ccp_ram.asm|1344||0|0|47337|T| +ccp_ram.asm|1345||0|0|47340|T| +ccp_ram.asm|1348||0|0|47343|T| +ccp_ram.asm|1349||0|0|47344|T| +ccp_ram.asm|1350||0|0|47347|T| +ccp_ram.asm|1352||0|0|47348|T| +ccp_ram.asm|1353||0|0|47351|T| +ccp_ram.asm|1354||0|0|47352|T| +ccp_ram.asm|1355||0|0|47353|T| +ccp_ram.asm|1356||0|0|47354|T| +ccp_ram.asm|1357||0|0|47355|T| +ccp_ram.asm|1358||0|0|47358|T| +ccp_ram.asm|1360||0|0|47361|F|CCP_RAM.ccp_unk_cmd.read_no_ok +ccp_ram.asm|1360||0|0|47361|L|CCP_RAM,ccp_unk_cmd,read_no_ok,+used +ccp_ram.asm|1361||0|0|47361|T| +ccp_ram.asm|1362||0|0|47362|T| +ccp_ram.asm|1363||0|0|47363|T| +ccp_ram.asm|1365||0|0|47366|T| +ccp_ram.asm|1366||0|0|47369|T| +ccp_ram.asm|1367||0|0|47372|T| +ccp_ram.asm|1368||0|0|47375|T| +ccp_ram.asm|1369||0|0|47376|T| +ccp_ram.asm|1370||0|0|47377|T| +ccp_ram.asm|1371||0|0|47380|T| +ccp_ram.asm|1372||0|0|47382|T| +ccp_ram.asm|1373||0|0|47385|T| +ccp_ram.asm|1375||0|0|47386|T| +ccp_ram.asm|1376||0|0|47387|T| +ccp_ram.asm|1378||0|0|47390|T| +ccp_ram.asm|1379||0|0|47391|T| +ccp_ram.asm|1381||0|0|47394|T| +ccp_ram.asm|1382||0|0|47397|T| +ccp_ram.asm|1383||0|0|47400|T| +ccp_ram.asm|1384||0|0|47402|T| +ccp_ram.asm|1387||0|0|47405|T| +ccp_ram.asm|1388||0|0|47408|F|CCP_RAM.ccp_unk_cmd.skip_nosp +ccp_ram.asm|1388||0|0|47408|L|CCP_RAM,ccp_unk_cmd,skip_nosp,+used +ccp_ram.asm|1389||0|0|47408|T| +ccp_ram.asm|1390||0|0|47409|T| +ccp_ram.asm|1391||0|0|47410|T| +ccp_ram.asm|1392||0|0|47413|T| +ccp_ram.asm|1393||0|0|47415|T| +ccp_ram.asm|1394||0|0|47418|T| +ccp_ram.asm|1395||0|0|47419|T| +ccp_ram.asm|1397||0|0|47422|F|CCP_RAM.ccp_unk_cmd.z_or_sp +ccp_ram.asm|1397||0|0|47422|L|CCP_RAM,ccp_unk_cmd,z_or_sp,+used +ccp_ram.asm|1398||0|0|47422|T| +ccp_ram.asm|1399||0|0|47424|T| +ccp_ram.asm|1401||0|0|47427|F|CCP_RAM.ccp_unk_cmd.copy_cmd_line +ccp_ram.asm|1401||0|0|47427|L|CCP_RAM,ccp_unk_cmd,copy_cmd_line,+used +ccp_ram.asm|1402||0|0|47427|T| +ccp_ram.asm|1403||0|0|47428|T| +ccp_ram.asm|1404||0|0|47429|T| +ccp_ram.asm|1405||0|0|47430|T| +ccp_ram.asm|1406||0|0|47433|T| +ccp_ram.asm|1407||0|0|47434|T| +ccp_ram.asm|1408||0|0|47435|T| +ccp_ram.asm|1409||0|0|47436|T| +ccp_ram.asm|1411||0|0|47439|F|CCP_RAM.ccp_unk_cmd.stor_len +ccp_ram.asm|1411||0|0|47439|L|CCP_RAM,ccp_unk_cmd,stor_len,+used +ccp_ram.asm|1412||0|0|47439|T| +ccp_ram.asm|1413||0|0|47440|T| +ccp_ram.asm|1415||0|0|47443|T| +ccp_ram.asm|1417||0|0|47446|T| +ccp_ram.asm|1419||0|0|47449|T| +ccp_ram.asm|1421||0|0|47452|T| +ccp_ram.asm|1423||0|0|47455|T| +ccp_ram.asm|1425||0|0|47458|T| +ccp_ram.asm|1426||0|0|47461|T| +ccp_ram.asm|1428||0|0|47464|T| +ccp_ram.asm|1430||0|0|47467|F|CCP_RAM.cant_open_exe +ccp_ram.asm|1430||0|0|47467|L|CCP_RAM,cant_open_exe,,+used +ccp_ram.asm|1431||0|0|47467|T| +ccp_ram.asm|1432||0|0|47470|T| +ccp_ram.asm|1434||0|0|47473|F|CCP_RAM.ccp_bad_load +ccp_ram.asm|1434||0|0|47473|L|CCP_RAM,ccp_bad_load,,+used +ccp_ram.asm|1435||0|0|47473|T| +ccp_ram.asm|1436||0|0|47476|T| +ccp_ram.asm|1437||0|0|47479|T| +ccp_ram.asm|1439||0|0|47482|F|CCP_RAM.ccp_bad_load.msg_bad_load +ccp_ram.asm|1439||0|0|47482|L|CCP_RAM,ccp_bad_load,msg_bad_load,+used +ccp_ram.asm|1442||0|0|47491|F|CCP_RAM.msg_com +ccp_ram.asm|1442||0|0|47491|L|CCP_RAM,msg_com,,+used +ccp_ram.asm|1448||0|0|47494|F|CCP_RAM.ccp_cmdline_back +ccp_ram.asm|1448||0|0|47494|L|CCP_RAM,ccp_cmdline_back,,+used +ccp_ram.asm|1449||0|0|47494|T| +ccp_ram.asm|1451||0|0|47497|F|CCP_RAM.ccp_cmdline_back1 +ccp_ram.asm|1451||0|0|47497|L|CCP_RAM,ccp_cmdline_back1,,+used +ccp_ram.asm|1452||0|0|47497|T| +ccp_ram.asm|1453||0|0|47500|T| +ccp_ram.asm|1454||0|0|47503|T| +ccp_ram.asm|1455||0|0|47505|T| +ccp_ram.asm|1456||0|0|47508|T| +ccp_ram.asm|1457||0|0|47509|T| +ccp_ram.asm|1458||0|0|47512|T| +ccp_ram.asm|1462||0|-1|47531|D|CCP_RAM.ccp_stack +ccp_ram.asm|1462||0|-1|47531|L|CCP_RAM,ccp_stack,,+equ,+used +ccp_ram.asm|1464||0|0|47531|F|CCP_RAM.ccp_batch +ccp_ram.asm|1464||0|0|47531|L|CCP_RAM,ccp_batch,,+used +ccp_ram.asm|1467||0|0|47532|F|CCP_RAM.ccp_batch_fcb +ccp_ram.asm|1467||0|0|47532|L|CCP_RAM,ccp_batch_fcb,,+used +ccp_ram.asm|1472||0|0|47546|F|CCP_RAM.ccp_batch_fcb_s2 +ccp_ram.asm|1472||0|0|47546|L|CCP_RAM,ccp_batch_fcb_s2,,+used +ccp_ram.asm|1474||0|0|47547|F|CCP_RAM.ccp_batch_fcb_rc +ccp_ram.asm|1474||0|0|47547|L|CCP_RAM,ccp_batch_fcb_rc,,+used +ccp_ram.asm|1476||0|0|47548|F|CCP_RAM.ccp_batch_fcb_al +ccp_ram.asm|1476||0|0|47548|L|CCP_RAM,ccp_batch_fcb_al, +ccp_ram.asm|1478||0|0|47564|F|CCP_RAM.ccp_batch_fcb_cr +ccp_ram.asm|1478||0|0|47564|L|CCP_RAM,ccp_batch_fcb_cr,,+used +ccp_ram.asm|1481||0|0|47565|F|CCP_RAM.ccp_current_fcb +ccp_ram.asm|1481||0|0|47565|L|CCP_RAM,ccp_current_fcb,,+used +ccp_ram.asm|1483||0|0|47566|F|CCP_RAM.ccp_current_fcb_fn +ccp_ram.asm|1483||0|0|47566|L|CCP_RAM,ccp_current_fcb_fn,,+used +ccp_ram.asm|1485||0|0|47574|F|CCP_RAM.ccp_current_fcb_ft +ccp_ram.asm|1485||0|0|47574|L|CCP_RAM,ccp_current_fcb_ft,,+used +ccp_ram.asm|1487||0|0|47577|F|CCP_RAM.ccp_current_fcb_ex +ccp_ram.asm|1487||0|0|47577|L|CCP_RAM,ccp_current_fcb_ex, +ccp_ram.asm|1492||0|0|47581|F|CCP_RAM.ccp_current_fcb_al +ccp_ram.asm|1492||0|0|47581|L|CCP_RAM,ccp_current_fcb_al,,+used +ccp_ram.asm|1494||0|0|47597|F|CCP_RAM.ccp_current_fcb_cr +ccp_ram.asm|1494||0|0|47597|L|CCP_RAM,ccp_current_fcb_cr,,+used +ccp_ram.asm|1497||0|0|47598|F|CCP_RAM.ccp_bdos_result_code +ccp_ram.asm|1497||0|0|47598|L|CCP_RAM,ccp_bdos_result_code,,+used +ccp_ram.asm|1500||0|0|47599|F|CCP_RAM.ccp_cur_drive +ccp_ram.asm|1500||0|0|47599|L|CCP_RAM,ccp_cur_drive,,+used +ccp_ram.asm|1503||0|0|47600|F|CCP_RAM.ccp_chg_drive +ccp_ram.asm|1503||0|0|47600|L|CCP_RAM,ccp_chg_drive,,+used +ccp_ram.asm|1505||0|0|47601|F|CCP_RAM.ccp_bytes_ctr +ccp_ram.asm|1505||0|0|47601|L|CCP_RAM,ccp_bytes_ctr,,+used +ccp_ram.asm|1511||0|-1|47622|D|CCP_RAM.bdos_enter_jump +ccp_ram.asm|1511||0|-1|47622|L|CCP_RAM,bdos_enter_jump,,+equ,+used +ccp_ram.asm|1516||0|-1|47616|D|CCP_RAM.LAST +ccp_ram.asm|1516||0|-1|47616|L|CCP_RAM,LAST,,+equ,+used +ccp_ram.asm|1517||0|-1|2048|D|CCP_RAM.CODE_SIZE +ccp_ram.asm|1517||0|-1|2048|L|CCP_RAM,CODE_SIZE,,+equ,+used +ccp_ram.asm|1525||0|-1|47616|L|CCP_RAM,,,+endmod +io.inc|16||0|-1|0|D|USR_DD79PA +io.inc|16||0|-1|0|L|,USR_DD79PA,,+equ +io.inc|19||0|-1|1|D|USR_DD79PB +io.inc|19||0|-1|1|L|,USR_DD79PB,,+equ +io.inc|22||0|-1|2|D|USR_DD79PC +io.inc|22||0|-1|2|L|,USR_DD79PC,,+equ +io.inc|26||0|-1|3|D|USR_DD79CTR +io.inc|26||0|-1|3|L|,USR_DD79CTR,,+equ +io.inc|32||0|-1|32|D|FDC_CMD +io.inc|32||0|-1|32|L|,FDC_CMD,,+equ +io.inc|35||0|-1|33|D|FDC_TRACK +io.inc|35||0|-1|33|L|,FDC_TRACK,,+equ +io.inc|38||0|-1|34|D|FDC_SECT +io.inc|38||0|-1|34|L|,FDC_SECT,,+equ +io.inc|41||0|-1|35|D|FDC_DATA +io.inc|41||0|-1|35|L|,FDC_DATA,,+equ +io.inc|44||0|-1|36|D|FDC_WAIT +io.inc|44||0|-1|36|L|,FDC_WAIT,,+equ +io.inc|47||0|-1|37|D|FLOPPY +io.inc|47||0|-1|37|L|,FLOPPY,,+equ +io.inc|54||0|-1|64|D|KBD_DD78PA +io.inc|54||0|-1|64|L|,KBD_DD78PA,,+equ +io.inc|57||0|-1|65|D|KBD_DD78PB +io.inc|57||0|-1|65|L|,KBD_DD78PB,,+equ +io.inc|60||0|-1|66|D|KBD_DD78PC +io.inc|60||0|-1|66|L|,KBD_DD78PC,,+equ +io.inc|64||0|-1|67|D|KBD_DD78CTR +io.inc|64||0|-1|67|L|,KBD_DD78CTR,,+equ +io.inc|71||0|-1|96|D|TMR_DD70C1 +io.inc|71||0|-1|96|L|,TMR_DD70C1,,+equ +io.inc|74||0|-1|97|D|TMR_DD70C2 +io.inc|74||0|-1|97|L|,TMR_DD70C2,,+equ +io.inc|77||0|-1|98|D|TMR_DD70C3 +io.inc|77||0|-1|98|L|,TMR_DD70C3,,+equ +io.inc|85||0|-1|99|D|TMR_DD70CTR +io.inc|85||0|-1|99|L|,TMR_DD70CTR,,+equ +io.inc|88||0|-1|128|D|PIC_DD75RS +io.inc|88||0|-1|128|L|,PIC_DD75RS,,+equ +io.inc|89||0|-1|129|D|PIC_DD75RM +io.inc|89||0|-1|129|L|,PIC_DD75RM,,+equ +io.inc|95||0|-1|160|D|UART_DD72RD +io.inc|95||0|-1|160|L|,UART_DD72RD,,+equ +io.inc|98||0|-1|161|D|UART_DD72RR +io.inc|98||0|-1|161|L|,UART_DD72RR,,+equ +io.inc|104||0|-1|192|D|SYS_DD17PA +io.inc|104||0|-1|192|L|,SYS_DD17PA,,+equ +io.inc|107||0|-1|193|D|SYS_DD17PB +io.inc|107||0|-1|193|L|,SYS_DD17PB,,+equ +io.inc|110||0|-1|194|D|SYS_DD17PC +io.inc|110||0|-1|194|L|,SYS_DD17PC,,+equ +io.inc|114||0|-1|195|D|SYS_DD17CTR +io.inc|114||0|-1|195|L|,SYS_DD17CTR,,+equ +io.inc|120||0|-1|224|D|LPT_DD67PA +io.inc|120||0|-1|224|L|,LPT_DD67PA,,+equ +io.inc|123||0|-1|225|D|VID_DD67PB +io.inc|123||0|-1|225|L|,VID_DD67PB,,+equ +io.inc|126||0|-1|226|D|DD67PC +io.inc|126||0|-1|226|L|,DD67PC,,+equ +io.inc|130||0|-1|227|D|DD67CTR +io.inc|130||0|-1|227|L|,DD67CTR,,+equ +bdos.asm|16||0|-1|47616|L|BDOS,,,+module +bdos.asm|20||0|0|51200|F|BDOS.bdos_start +bdos.asm|20||0|0|51200|L|BDOS,bdos_start,,+used +bdos.asm|21||0|0|51200|T| +bdos.asm|22||0|0|51201|T| +bdos.asm|23||0|0|51203|T| +bdos.asm|24||0|0|51204|T| +bdos.asm|25||0|0|51205|T| +bdos.asm|30||0|0|51206|F|BDOS.bdos_enter +bdos.asm|30||0|0|51206|L|BDOS,bdos_enter, +bdos.asm|31||0|0|51206|T| +bdos.asm|33||0|0|51209|F|BDOS.bdos_pere_addr +bdos.asm|33||0|0|51209|L|BDOS,bdos_pere_addr,,+used +bdos.asm|35||0|0|51211|F|BDOS.bdos_sele_addr +bdos.asm|35||0|0|51211|L|BDOS,bdos_sele_addr,,+used +bdos.asm|37||0|0|51213|F|BDOS.bdos_rode_addr +bdos.asm|37||0|0|51213|L|BDOS,bdos_rode_addr,,+used +bdos.asm|39||0|0|51215|F|BDOS.bdos_rofe_addr +bdos.asm|39||0|0|51215|L|BDOS,bdos_rofe_addr,,+used +bdos.asm|48||0|0|51217|F|BDOS.bdos_entrance +bdos.asm|48||0|0|51217|L|BDOS,bdos_entrance,,+used +bdos.asm|50||0|0|51217|T| +bdos.asm|51||0|0|51218|T| +bdos.asm|52||0|0|51221|T| +bdos.asm|54||0|0|51222|T| +bdos.asm|55||0|0|51223|T| +bdos.asm|57||0|0|51226|T| +bdos.asm|58||0|0|51229|T| +bdos.asm|61||0|0|51232|T| +bdos.asm|62||0|0|51233|T| +bdos.asm|64||0|0|51236|T| +bdos.asm|65||0|0|51239|T| +bdos.asm|66||0|0|51240|T| +bdos.asm|67||0|0|51243|T| +bdos.asm|68||0|0|51246|T| +bdos.asm|69||0|0|51249|T| +bdos.asm|70||0|0|51250|T| +bdos.asm|71||0|0|51251|T| +bdos.asm|72||0|0|51253|T| +bdos.asm|73||0|0|51254|T| +bdos.asm|75||0|0|51255|T| +bdos.asm|76||0|0|51258|T| +bdos.asm|77||0|0|51259|T| +bdos.asm|78||0|0|51261|T| +bdos.asm|79||0|0|51262|T| +bdos.asm|80||0|0|51263|T| +bdos.asm|81||0|0|51264|T| +bdos.asm|82||0|0|51265|T| +bdos.asm|83||0|0|51266|T| +bdos.asm|84||0|0|51269|T| +bdos.asm|85||0|0|51270|T| +bdos.asm|90||0|0|51271|F|BDOS.functab +bdos.asm|90||0|0|51271|L|BDOS,functab,,+used +bdos.asm|136||0|0|51353|F|BDOS.bdos_persub +bdos.asm|136||0|0|51353|L|BDOS,bdos_persub,,+used +bdos.asm|137||0|0|51353|T| +bdos.asm|138||0|0|51356|T| +bdos.asm|139||0|0|51359|T| +bdos.asm|140||0|0|51361|T| +bdos.asm|141||0|0|51364|T| +bdos.asm|146||0|0|51365|F|BDOS.bdos_selsub +bdos.asm|146||0|0|51365|L|BDOS,bdos_selsub,,+used +bdos.asm|147||0|0|51365|T| +bdos.asm|148||0|0|51368|T| +bdos.asm|153||0|0|51371|F|BDOS.bdos_rodsub +bdos.asm|153||0|0|51371|L|BDOS,bdos_rodsub,,+used +bdos.asm|154||0|0|51371|T| +bdos.asm|155||0|0|51374|T| +bdos.asm|160||0|0|51377|F|BDOS.bdos_rofsub +bdos.asm|160||0|0|51377|L|BDOS,bdos_rofsub,,+used +bdos.asm|161||0|0|51377|T| +bdos.asm|166||0|0|51380|F|BDOS.bdos_wait_err +bdos.asm|166||0|0|51380|L|BDOS,bdos_wait_err,,+used +bdos.asm|167||0|0|51380|T| +bdos.asm|168||0|0|51383|T| +bdos.asm|173||0|0|51386|F|BDOS.dskmsg +bdos.asm|173||0|0|51386|L|BDOS,dskmsg,,+used +bdos.asm|175||0|0|51398|F|BDOS.dskerr +bdos.asm|175||0|0|51398|L|BDOS,dskerr,,+used +bdos.asm|177||0|0|51402|F|BDOS.permsg +bdos.asm|177||0|0|51402|L|BDOS,permsg,,+used +bdos.asm|179||0|0|51413|F|BDOS.selmsg +bdos.asm|179||0|0|51413|L|BDOS,selmsg,,+used +bdos.asm|181||0|0|51420|F|BDOS.rofmsg +bdos.asm|181||0|0|51420|L|BDOS,rofmsg,,+used +bdos.asm|183||0|0|51425|F|BDOS.rodmsg +bdos.asm|183||0|0|51425|L|BDOS,rodmsg,,+used +bdos.asm|189||0|0|51429|F|BDOS.bdos_print_err +bdos.asm|189||0|0|51429|L|BDOS,bdos_print_err,,+used +bdos.asm|190||0|0|51429|T| +bdos.asm|191||0|0|51430|T| +bdos.asm|193||0|0|51433|T| +bdos.asm|194||0|0|51436|T| +bdos.asm|195||0|0|51438|T| +bdos.asm|197||0|0|51441|T| +bdos.asm|198||0|0|51444|T| +bdos.asm|199||0|0|51447|T| +bdos.asm|200||0|0|51448|T| +bdos.asm|206||0|0|51451|F|BDOS.bdos_conin +bdos.asm|206||0|0|51451|L|BDOS,bdos_conin,,+used +bdos.asm|207||0|0|51451|T| +bdos.asm|208||0|0|51454|T| +bdos.asm|209||0|0|51455|T| +bdos.asm|210||0|0|51457|T| +bdos.asm|211||0|0|51458|T| +bdos.asm|213||0|0|51459|T| +bdos.asm|218||0|0|51462|F|BDOS.bdos_conech +bdos.asm|218||0|0|51462|L|BDOS,bdos_conech,,+used +bdos.asm|219||0|0|51462|T| +bdos.asm|220||0|0|51465|T| +bdos.asm|221||0|0|51468|T| +bdos.asm|222||0|0|51469|T| +bdos.asm|223||0|0|51470|T| +bdos.asm|224||0|0|51471|T| +bdos.asm|225||0|0|51474|T| +bdos.asm|226||0|0|51475|T| +bdos.asm|234||0|0|51476|F|BDOS.bdos_chk_ctrl_char +bdos.asm|234||0|0|51476|L|BDOS,bdos_chk_ctrl_char,,+used +bdos.asm|235||0|0|51476|T| +bdos.asm|236||0|0|51478|T| +bdos.asm|237||0|0|51479|T| +bdos.asm|238||0|0|51481|T| +bdos.asm|239||0|0|51482|T| +bdos.asm|240||0|0|51484|T| +bdos.asm|241||0|0|51485|T| +bdos.asm|242||0|0|51487|T| +bdos.asm|243||0|0|51488|T| +bdos.asm|244||0|0|51490|T| +bdos.asm|250||0|0|51491|F|BDOS.bdos_conbrk +bdos.asm|250||0|0|51491|L|BDOS,bdos_conbrk,,+used +bdos.asm|251||0|0|51491|T| +bdos.asm|252||0|0|51494|T| +bdos.asm|253||0|0|51495|T| +bdos.asm|254||0|0|51498|T| +bdos.asm|255||0|0|51501|T| +bdos.asm|256||0|0|51503|T| +bdos.asm|257||0|0|51504|T| +bdos.asm|258||0|0|51507|T| +bdos.asm|259||0|0|51509|T| +bdos.asm|261||0|0|51512|T| +bdos.asm|262||0|0|51515|T| +bdos.asm|264||0|0|51517|T| +bdos.asm|265||0|0|51520|T| +bdos.asm|266||0|0|51521|T| +bdos.asm|267||0|0|51522|F|BDOS.bdos_conbrk.no_crtl_s +bdos.asm|267||0|0|51522|L|BDOS,bdos_conbrk,no_crtl_s,+used +bdos.asm|268||0|0|51522|T| +bdos.asm|269||0|0|51525|F|BDOS.bdos_conbrk.if_key +bdos.asm|269||0|0|51525|L|BDOS,bdos_conbrk,if_key,+used +bdos.asm|270||0|0|51525|T| +bdos.asm|271||0|0|51527|T| +bdos.asm|276||0|0|51528|F|BDOS.bdos_conout +bdos.asm|276||0|0|51528|L|BDOS,bdos_conout,,+used +bdos.asm|277||0|0|51528|T| +bdos.asm|278||0|0|51531|T| +bdos.asm|279||0|0|51532|T| +bdos.asm|281||0|0|51535|T| +bdos.asm|282||0|0|51536|T| +bdos.asm|283||0|0|51539|T| +bdos.asm|285||0|0|51540|T| +bdos.asm|286||0|0|51541|T| +bdos.asm|287||0|0|51544|T| +bdos.asm|290||0|0|51545|T| +bdos.asm|291||0|0|51546|T| +bdos.asm|292||0|0|51549|T| +bdos.asm|293||0|0|51550|T| +bdos.asm|294||0|0|51553|T| +bdos.asm|299||0|0|51554|F|BDOS.bdos_conout.compout +bdos.asm|299||0|0|51554|L|BDOS,bdos_conout,compout,+used +bdos.asm|300||0|0|51554|T| +bdos.asm|303||0|0|51555|T| +bdos.asm|304||0|0|51558|T| +bdos.asm|305||0|0|51560|T| +bdos.asm|306||0|0|51561|T| +bdos.asm|307||0|0|51562|T| +bdos.asm|308||0|0|51564|T| +bdos.asm|311||0|0|51565|T| +bdos.asm|312||0|0|51566|T| +bdos.asm|313||0|0|51567|T| +bdos.asm|314||0|0|51568|T| +bdos.asm|316||0|0|51569|T| +bdos.asm|317||0|0|51570|T| +bdos.asm|318||0|0|51572|T| +bdos.asm|320||0|0|51575|T| +bdos.asm|321||0|0|51576|T| +bdos.asm|323||0|0|51577|F|BDOS.bdos_conout.not_backsp +bdos.asm|323||0|0|51577|L|BDOS,bdos_conout,not_backsp,+used +bdos.asm|324||0|0|51577|T| +bdos.asm|325||0|0|51579|T| +bdos.asm|326||0|0|51580|T| +bdos.asm|327||0|0|51582|T| +bdos.asm|332||0|0|51583|F|BDOS.bdos_ctlout +bdos.asm|332||0|0|51583|L|BDOS,bdos_ctlout,,+used +bdos.asm|333||0|0|51583|T| +bdos.asm|334||0|0|51584|T| +bdos.asm|335||0|0|51587|T| +bdos.asm|337||0|0|51590|T| +bdos.asm|338||0|0|51591|T| +bdos.asm|339||0|0|51593|T| +bdos.asm|340||0|0|51596|T| +bdos.asm|341||0|0|51597|T| +bdos.asm|342||0|0|51599|T| +bdos.asm|344||0|0|51600|F|BDOS.bdos_outcon +bdos.asm|344||0|0|51600|L|BDOS,bdos_outcon,,+used +bdos.asm|345||0|0|51600|T| +bdos.asm|346||0|0|51601|T| +bdos.asm|347||0|0|51603|T| +bdos.asm|350||0|0|51606|F|BDOS.bdos_outcon.to_tabpos +bdos.asm|350||0|0|51606|L|BDOS,bdos_outcon,to_tabpos,+used +bdos.asm|351||0|0|51606|T| +bdos.asm|352||0|0|51608|T| +bdos.asm|353||0|0|51611|T| +bdos.asm|354||0|0|51614|T| +bdos.asm|355||0|0|51616|T| +bdos.asm|356||0|0|51619|T| +bdos.asm|361||0|0|51620|F|BDOS.bdos_out_bksp +bdos.asm|361||0|0|51620|L|BDOS,bdos_out_bksp,,+used +bdos.asm|362||0|0|51620|T| +bdos.asm|363||0|0|51623|T| +bdos.asm|364||0|0|51625|T| +bdos.asm|369||0|0|51628|F|BDOS.bdos_prn_bksp +bdos.asm|369||0|0|51628|L|BDOS,bdos_prn_bksp,,+used +bdos.asm|370||0|0|51628|T| +bdos.asm|371||0|0|51630|T| +bdos.asm|377||0|0|51633|F|BDOS.bdos_newline +bdos.asm|377||0|0|51633|L|BDOS,bdos_newline,,+used +bdos.asm|378||0|0|51633|T| +bdos.asm|379||0|0|51635|T| +bdos.asm|380||0|0|51638|T| +bdos.asm|382||0|0|51641|F|BDOS.bdos_newline.print_sp +bdos.asm|382||0|0|51641|L|BDOS,bdos_newline,print_sp,+used +bdos.asm|383||0|0|51641|T| +bdos.asm|384||0|0|51644|T| +bdos.asm|385||0|0|51647|T| +bdos.asm|386||0|0|51648|T| +bdos.asm|387||0|0|51649|T| +bdos.asm|388||0|0|51651|T| +bdos.asm|389||0|0|51654|T| +bdos.asm|394||0|0|51657|F|BDOS.bdos_crlf +bdos.asm|394||0|0|51657|L|BDOS,bdos_crlf,,+used +bdos.asm|395||0|0|51657|T| +bdos.asm|396||0|0|51659|T| +bdos.asm|397||0|0|51662|T| +bdos.asm|398||0|0|51664|T| +bdos.asm|404||0|0|51667|F|BDOS.bdos_print +bdos.asm|404||0|0|51667|L|BDOS,bdos_print,,+used +bdos.asm|405||0|0|51667|T| +bdos.asm|406||0|0|51668|T| +bdos.asm|407||0|0|51670|T| +bdos.asm|408||0|0|51671|T| +bdos.asm|409||0|0|51672|T| +bdos.asm|410||0|0|51673|T| +bdos.asm|411||0|0|51674|T| +bdos.asm|412||0|0|51677|T| +bdos.asm|413||0|0|51678|T| +bdos.asm|422||0|0|51681|F|BDOS.bdos_read +bdos.asm|422||0|0|51681|L|BDOS,bdos_read,,+used +bdos.asm|423||0|0|51681|T| +bdos.asm|424||0|0|51684|T| +bdos.asm|425||0|0|51687|T| +bdos.asm|426||0|0|51690|T| +bdos.asm|427||0|0|51691|T| +bdos.asm|428||0|0|51692|T| +bdos.asm|429||0|0|51693|T| +bdos.asm|433||0|0|51695|F|BDOS.bdos_read.readnx +bdos.asm|433||0|0|51695|L|BDOS,bdos_read,readnx,+used +bdos.asm|434||0|0|51695|T| +bdos.asm|435||0|0|51696|T| +bdos.asm|436||0|0|51697|F|BDOS.bdos_read.readn1 +bdos.asm|436||0|0|51697|L|BDOS,bdos_read,readn1,+used +bdos.asm|437||0|0|51697|T| +bdos.asm|438||0|0|51700|T| +bdos.asm|439||0|0|51702|T| +bdos.asm|440||0|0|51703|T| +bdos.asm|442||0|0|51704|T| +bdos.asm|443||0|0|51706|T| +bdos.asm|444||0|0|51709|T| +bdos.asm|445||0|0|51711|T| +bdos.asm|448||0|0|51714|T| +bdos.asm|449||0|0|51716|T| +bdos.asm|450||0|0|51719|T| +bdos.asm|451||0|0|51720|T| +bdos.asm|452||0|0|51721|T| +bdos.asm|453||0|0|51724|T| +bdos.asm|454||0|0|51725|T| +bdos.asm|455||0|0|51728|T| +bdos.asm|456||0|0|51731|T| +bdos.asm|459||0|0|51734|F|BDOS.bdos_read.no_bksp +bdos.asm|459||0|0|51734|L|BDOS,bdos_read,no_bksp,+used +bdos.asm|460||0|0|51734|T| +bdos.asm|461||0|0|51736|T| +bdos.asm|462||0|0|51739|T| +bdos.asm|463||0|0|51740|T| +bdos.asm|464||0|0|51741|T| +bdos.asm|465||0|0|51744|T| +bdos.asm|466||0|0|51745|T| +bdos.asm|467||0|0|51746|T| +bdos.asm|468||0|0|51747|T| +bdos.asm|470||0|0|51750|F|BDOS.bdos_read.no_del +bdos.asm|470||0|0|51750|L|BDOS,bdos_read,no_del,+used +bdos.asm|471||0|0|51750|T| +bdos.asm|472||0|0|51752|T| +bdos.asm|473||0|0|51755|T| +bdos.asm|474||0|0|51756|T| +bdos.asm|475||0|0|51757|T| +bdos.asm|476||0|0|51760|T| +bdos.asm|477||0|0|51761|T| +bdos.asm|478||0|0|51764|T| +bdos.asm|480||0|0|51767|F|BDOS.bdos_read.no_ctrle +bdos.asm|480||0|0|51767|L|BDOS,bdos_read,no_ctrle,+used +bdos.asm|481||0|0|51767|T| +bdos.asm|482||0|0|51769|T| +bdos.asm|483||0|0|51772|T| +bdos.asm|484||0|0|51773|T| +bdos.asm|485||0|0|51776|T| +bdos.asm|486||0|0|51778|T| +bdos.asm|487||0|0|51779|T| +bdos.asm|488||0|0|51780|T| +bdos.asm|489||0|0|51781|T| +bdos.asm|491||0|0|51784|F|BDOS.bdos_read.no_ctrlp +bdos.asm|491||0|0|51784|L|BDOS,bdos_read,no_ctrlp,+used +bdos.asm|492||0|0|51784|T| +bdos.asm|493||0|0|51786|T| +bdos.asm|494||0|0|51789|T| +bdos.asm|495||0|0|51790|F|BDOS.bdos_read.backx +bdos.asm|495||0|0|51790|L|BDOS,bdos_read,backx,+used +bdos.asm|496||0|0|51790|T| +bdos.asm|497||0|0|51793|T| +bdos.asm|498||0|0|51796|T| +bdos.asm|499||0|0|51797|T| +bdos.asm|500||0|0|51800|T| +bdos.asm|501||0|0|51801|T| +bdos.asm|502||0|0|51804|T| +bdos.asm|504||0|0|51807|F|BDOS.bdos_read.no_ctrlx +bdos.asm|504||0|0|51807|L|BDOS,bdos_read,no_ctrlx,+used +bdos.asm|505||0|0|51807|T| +bdos.asm|506||0|0|51809|T| +bdos.asm|508||0|0|51812|T| +bdos.asm|509||0|0|51815|T| +bdos.asm|510||0|0|51816|T| +bdos.asm|512||0|0|51819|F|BDOS.bdos_read.no_ctrlu +bdos.asm|512||0|0|51819|L|BDOS,bdos_read,no_ctrlu,+used +bdos.asm|513||0|0|51819|T| +bdos.asm|514||0|0|51821|T| +bdos.asm|517||0|0|51824|F|BDOS.bdos_read.linelen +bdos.asm|517||0|0|51824|L|BDOS,bdos_read,linelen,+used +bdos.asm|518||0|0|51824|T| +bdos.asm|519||0|0|51825|T| +bdos.asm|520||0|0|51828|T| +bdos.asm|521||0|0|51829|T| +bdos.asm|522||0|0|51830|T| +bdos.asm|523||0|0|51831|T| +bdos.asm|524||0|0|51832|F|BDOS.bdos_read.next_char +bdos.asm|524||0|0|51832|L|BDOS,bdos_read,next_char,+used +bdos.asm|525||0|0|51832|T| +bdos.asm|526||0|0|51833|T| +bdos.asm|527||0|0|51834|T| +bdos.asm|528||0|0|51837|T| +bdos.asm|529||0|0|51838|T| +bdos.asm|530||0|0|51839|T| +bdos.asm|531||0|0|51840|T| +bdos.asm|532||0|0|51841|T| +bdos.asm|533||0|0|51842|T| +bdos.asm|534||0|0|51845|T| +bdos.asm|535||0|0|51846|T| +bdos.asm|536||0|0|51847|T| +bdos.asm|537||0|0|51850|F|BDOS.bdos_read.endof_cmd +bdos.asm|537||0|0|51850|L|BDOS,bdos_read,endof_cmd,+used +bdos.asm|538||0|0|51850|T| +bdos.asm|539||0|0|51851|T| +bdos.asm|540||0|0|51854|T| +bdos.asm|541||0|0|51855|T| +bdos.asm|543||0|0|51858|T| +bdos.asm|544||0|0|51861|T| +bdos.asm|545||0|0|51862|T| +bdos.asm|548||0|0|51865|F|BDOS.bdos_read.backsp +bdos.asm|548||0|0|51865|L|BDOS,bdos_read,backsp,+used +bdos.asm|549||0|0|51865|T| +bdos.asm|550||0|0|51868|T| +bdos.asm|551||0|0|51871|T| +bdos.asm|552||0|0|51872|T| +bdos.asm|553||0|0|51875|T| +bdos.asm|556||0|0|51878|F|BDOS.bdos_read.stor_echo +bdos.asm|556||0|0|51878|L|BDOS,bdos_read,stor_echo,+used +bdos.asm|557||0|0|51878|T| +bdos.asm|558||0|0|51879|T| +bdos.asm|559||0|0|51880|T| +bdos.asm|560||0|0|51881|F|BDOS.bdos_read.echo +bdos.asm|560||0|0|51881|L|BDOS,bdos_read,echo,+used +bdos.asm|561||0|0|51881|T| +bdos.asm|562||0|0|51882|T| +bdos.asm|563||0|0|51883|T| +bdos.asm|564||0|0|51884|T| +bdos.asm|565||0|0|51887|T| +bdos.asm|566||0|0|51888|T| +bdos.asm|569||0|0|51889|T| +bdos.asm|570||0|0|51890|T| +bdos.asm|571||0|0|51892|T| +bdos.asm|572||0|0|51893|T| +bdos.asm|573||0|0|51896|T| +bdos.asm|574||0|0|51898|T| +bdos.asm|576||0|0|51901|F|BDOS.bdos_read.no_ctrlc +bdos.asm|576||0|0|51901|L|BDOS,bdos_read,no_ctrlc,+used +bdos.asm|577||0|0|51901|T| +bdos.asm|578||0|0|51902|T| +bdos.asm|581||0|0|51905|F|BDOS.bdos_read.read_end +bdos.asm|581||0|0|51905|L|BDOS,bdos_read,read_end,+used +bdos.asm|582||0|0|51905|T| +bdos.asm|583||0|0|51906|T| +bdos.asm|584||0|0|51907|T| +bdos.asm|585||0|0|51909|T| +bdos.asm|591||0|0|51912|F|BDOS.bdos_con_inp +bdos.asm|591||0|0|51912|L|BDOS,bdos_con_inp,,+used +bdos.asm|592||0|0|51912|T| +bdos.asm|593||0|0|51915|T| +bdos.asm|599||0|0|51918|F|BDOS.bdos_aux_inp +bdos.asm|599||0|0|51918|L|BDOS,bdos_aux_inp,,+used +bdos.asm|600||0|0|51918|T| +bdos.asm|601||0|0|51921|T| +bdos.asm|613||0|0|51924|F|BDOS.bdos_dir_con_io +bdos.asm|613||0|0|51924|L|BDOS,bdos_dir_con_io,,+used +bdos.asm|614||0|0|51924|T| +bdos.asm|615||0|0|51925|T| +bdos.asm|616||0|0|51926|T| +bdos.asm|617||0|0|51929|T| +bdos.asm|618||0|0|51930|T| +bdos.asm|619||0|0|51933|T| +bdos.asm|620||0|0|51936|F|BDOS.bdos_dir_con_io.dirinp +bdos.asm|620||0|0|51936|L|BDOS,bdos_dir_con_io,dirinp,+used +bdos.asm|621||0|0|51936|T| +bdos.asm|622||0|0|51939|T| +bdos.asm|623||0|0|51940|T| +bdos.asm|624||0|0|51943|T| +bdos.asm|625||0|0|51946|T| +bdos.asm|631||0|0|51949|F|BDOS.bdos_get_io_byte +bdos.asm|631||0|0|51949|L|BDOS,bdos_get_io_byte,,+used +bdos.asm|632||0|0|51949|T| +bdos.asm|633||0|0|51952|T| +bdos.asm|640||0|0|51955|F|BDOS.bdos_set_io_byte +bdos.asm|640||0|0|51955|L|BDOS,bdos_set_io_byte,,+used +bdos.asm|641||0|0|51955|T| +bdos.asm|642||0|0|51958|T| +bdos.asm|643||0|0|51959|T| +bdos.asm|649||0|0|51960|F|BDOS.bdos_print_str +bdos.asm|649||0|0|51960|L|BDOS,bdos_print_str,,+used +bdos.asm|650||0|0|51960|T| +bdos.asm|651||0|0|51961|T| +bdos.asm|652||0|0|51962|T| +bdos.asm|653||0|0|51963|T| +bdos.asm|659||0|0|51966|F|BDOS.bdos_get_con_st +bdos.asm|659||0|0|51966|L|BDOS,bdos_get_con_st,,+used +bdos.asm|660||0|0|51966|T| +bdos.asm|661||0|0|51969|F|BDOS.bdos_ret_a +bdos.asm|661||0|0|51969|L|BDOS,bdos_ret_a,,+used +bdos.asm|662||0|0|51969|T| +bdos.asm|663||0|0|51972|F|BDOS.bdos_not_impl +bdos.asm|663||0|0|51972|L|BDOS,bdos_not_impl,,+used +bdos.asm|664||0|0|51972|T| +bdos.asm|669||0|0|51973|F|BDOS.set_ioerr_1 +bdos.asm|669||0|0|51973|L|BDOS,set_ioerr_1,,+used +bdos.asm|670||0|0|51973|T| +bdos.asm|671||0|0|51975|T| +bdos.asm|676||0|0|51978|F|BDOS.bdos_sel_error +bdos.asm|676||0|0|51978|L|BDOS,bdos_sel_error,,+used +bdos.asm|677||0|0|51978|T| +bdos.asm|680||0|0|51981|F|BDOS.bdos_jump_hl +bdos.asm|680||0|0|51981|L|BDOS,bdos_jump_hl,,+used +bdos.asm|681||0|0|51981|T| +bdos.asm|682||0|0|51982|T| +bdos.asm|683||0|0|51983|T| +bdos.asm|684||0|0|51984|T| +bdos.asm|685||0|0|51985|T| +bdos.asm|690||0|0|51986|F|BDOS.bdos_move_dehl +bdos.asm|690||0|0|51986|L|BDOS,bdos_move_dehl,,+used +bdos.asm|691||0|0|51986|T| +bdos.asm|692||0|0|51987|F|BDOS.bdos_move_dehl.move_next +bdos.asm|692||0|0|51987|L|BDOS,bdos_move_dehl,move_next,+used +bdos.asm|693||0|0|51987|T| +bdos.asm|694||0|0|51988|T| +bdos.asm|695||0|0|51989|T| +bdos.asm|696||0|0|51990|T| +bdos.asm|697||0|0|51991|T| +bdos.asm|698||0|0|51992|T| +bdos.asm|699||0|0|51993|T| +bdos.asm|707||0|0|51996|F|BDOS.bdos_sel_dsk +bdos.asm|707||0|0|51996|L|BDOS,bdos_sel_dsk,,+used +bdos.asm|708||0|0|51996|T| +bdos.asm|709||0|0|51999|T| +bdos.asm|710||0|0|52000|T| +bdos.asm|712||0|0|52003|T| +bdos.asm|713||0|0|52004|T| +bdos.asm|714||0|0|52005|T| +bdos.asm|716||0|0|52006|T| +bdos.asm|717||0|0|52007|T| +bdos.asm|718||0|0|52008|T| +bdos.asm|722||0|0|52009|T| +bdos.asm|723||0|0|52010|T| +bdos.asm|724||0|0|52013|T| +bdos.asm|725||0|0|52014|T| +bdos.asm|726||0|0|52015|T| +bdos.asm|727||0|0|52018|T| +bdos.asm|728||0|0|52019|T| +bdos.asm|729||0|0|52020|T| +bdos.asm|730||0|0|52023|T| +bdos.asm|731||0|0|52024|T| +bdos.asm|733||0|0|52025|T| +bdos.asm|734||0|0|52026|T| +bdos.asm|735||0|0|52029|T| +bdos.asm|736||0|0|52032|T| +bdos.asm|737||0|0|52034|T| +bdos.asm|740||0|0|52037|T| +bdos.asm|741||0|0|52040|T| +bdos.asm|742||0|0|52041|T| +bdos.asm|743||0|0|52044|T| +bdos.asm|744||0|0|52046|T| +bdos.asm|747||0|0|52049|T| +bdos.asm|748||0|0|52052|T| +bdos.asm|749||0|0|52053|T| +bdos.asm|750||0|0|52056|T| +bdos.asm|751||0|0|52058|T| +bdos.asm|752||0|0|52059|T| +bdos.asm|753||0|0|52062|T| +bdos.asm|754||0|0|52064|F|BDOS.bdos_sel_dsk.is_small +bdos.asm|754||0|0|52064|L|BDOS,bdos_sel_dsk,is_small,+used +bdos.asm|755||0|0|52064|T| +bdos.asm|756||0|0|52066|T| +bdos.asm|757||0|0|52067|T| +bdos.asm|763||0|0|52068|F|BDOS.bdos_home +bdos.asm|763||0|0|52068|L|BDOS,bdos_home,,+used +bdos.asm|764||0|0|52068|T| +bdos.asm|765||0|0|52071|T| +bdos.asm|767||0|0|52072|T| +bdos.asm|768||0|0|52075|T| +bdos.asm|769||0|0|52076|T| +bdos.asm|770||0|0|52077|T| +bdos.asm|773||0|0|52078|T| +bdos.asm|774||0|0|52081|T| +bdos.asm|775||0|0|52082|T| +bdos.asm|776||0|0|52083|T| +bdos.asm|778||0|0|52084|T| +bdos.asm|783||0|0|52085|F|BDOS.bdos_rdbuff +bdos.asm|783||0|0|52085|L|BDOS,bdos_rdbuff,,+used +bdos.asm|784||0|0|52085|T| +bdos.asm|785||0|0|52088|T| +bdos.asm|794||0|0|52091|F|BDOS.bdos_wrbuff +bdos.asm|794||0|0|52091|L|BDOS,bdos_wrbuff,,+used +bdos.asm|795||0|0|52091|T| +bdos.asm|800||0|0|52094|F|BDOS.diocomp +bdos.asm|800||0|0|52094|L|BDOS,diocomp,,+used +bdos.asm|801||0|0|52094|T| +bdos.asm|802||0|0|52095|T| +bdos.asm|803||0|0|52096|T| +bdos.asm|804||0|0|52099|T| +bdos.asm|809||0|0|52102|F|BDOS.bdos_seekdir +bdos.asm|809||0|0|52102|L|BDOS,bdos_seekdir,,+used +bdos.asm|810||0|0|52102|T| +bdos.asm|811||0|0|52105|T| +bdos.asm|812||0|0|52107|T| +bdos.asm|813||0|0|52110|T| +bdos.asm|814||0|0|52113|T| +bdos.asm|820||0|0|52116|F|BDOS.bdos_seek +bdos.asm|820||0|0|52116|L|BDOS,bdos_seek,,+used +bdos.asm|821||0|0|52116|T| +bdos.asm|822||0|0|52119|T| +bdos.asm|823||0|0|52120|T| +bdos.asm|824||0|0|52121|T| +bdos.asm|827||0|0|52122|T| +bdos.asm|828||0|0|52125|T| +bdos.asm|829||0|0|52126|T| +bdos.asm|830||0|0|52127|T| +bdos.asm|833||0|0|52128|T| +bdos.asm|834||0|0|52131|T| +bdos.asm|835||0|0|52132|T| +bdos.asm|836||0|0|52133|T| +bdos.asm|837||0|0|52134|T| +bdos.asm|840||0|0|52135|F|BDOS.bdos_seek.sec_less_cur +bdos.asm|840||0|0|52135|L|BDOS,bdos_seek,sec_less_cur,+used +bdos.asm|842||0|0|52135|T| +bdos.asm|843||0|0|52136|T| +bdos.asm|844||0|0|52137|T| +bdos.asm|845||0|0|52138|T| +bdos.asm|846||0|0|52139|T| +bdos.asm|848||0|0|52142|T| +bdos.asm|849||0|0|52143|T| +bdos.asm|850||0|0|52146|T| +bdos.asm|851||0|0|52147|T| +bdos.asm|852||0|0|52148|T| +bdos.asm|853||0|0|52149|T| +bdos.asm|854||0|0|52150|T| +bdos.asm|855||0|0|52151|T| +bdos.asm|857||0|0|52152|T| +bdos.asm|858||0|0|52153|T| +bdos.asm|859||0|0|52154|T| +bdos.asm|861||0|0|52157|F|BDOS.bdos_seek.sec_ge_cur +bdos.asm|861||0|0|52157|L|BDOS,bdos_seek,sec_ge_cur,+used +bdos.asm|862||0|0|52157|T| +bdos.asm|863||0|0|52158|T| +bdos.asm|864||0|0|52161|T| +bdos.asm|865||0|0|52162|T| +bdos.asm|867||0|0|52165|T| +bdos.asm|868||0|0|52166|T| +bdos.asm|869||0|0|52167|T| +bdos.asm|870||0|0|52168|T| +bdos.asm|871||0|0|52169|T| +bdos.asm|872||0|0|52172|T| +bdos.asm|873||0|0|52173|T| +bdos.asm|875||0|0|52174|T| +bdos.asm|876||0|0|52175|T| +bdos.asm|878||0|0|52178|F|BDOS.bdos_seek.track_found +bdos.asm|878||0|0|52178|L|BDOS,bdos_seek,track_found,+used +bdos.asm|879||0|0|52178|T| +bdos.asm|880||0|0|52179|T| +bdos.asm|881||0|0|52180|T| +bdos.asm|882||0|0|52181|T| +bdos.asm|884||0|0|52182|T| +bdos.asm|885||0|0|52183|T| +bdos.asm|886||0|0|52186|T| +bdos.asm|887||0|0|52187|T| +bdos.asm|888||0|0|52188|T| +bdos.asm|889||0|0|52189|T| +bdos.asm|892||0|0|52192|T| +bdos.asm|893||0|0|52193|T| +bdos.asm|894||0|0|52196|T| +bdos.asm|895||0|0|52197|T| +bdos.asm|896||0|0|52198|T| +bdos.asm|899||0|0|52199|T| +bdos.asm|900||0|0|52200|T| +bdos.asm|901||0|0|52203|T| +bdos.asm|902||0|0|52204|T| +bdos.asm|903||0|0|52205|T| +bdos.asm|906||0|0|52206|T| +bdos.asm|907||0|0|52207|T| +bdos.asm|908||0|0|52208|T| +bdos.asm|909||0|0|52209|T| +bdos.asm|910||0|0|52210|T| +bdos.asm|911||0|0|52211|T| +bdos.asm|912||0|0|52212|T| +bdos.asm|914||0|0|52213|T| +bdos.asm|915||0|0|52216|T| +bdos.asm|917||0|0|52217|T| +bdos.asm|919||0|0|52220|T| +bdos.asm|920||0|0|52221|T| +bdos.asm|921||0|0|52222|T| +bdos.asm|927||0|0|52225|F|BDOS.bdos_dm_position +bdos.asm|927||0|0|52225|L|BDOS,bdos_dm_position,,+used +bdos.asm|928||0|0|52225|T| +bdos.asm|929||0|0|52228|T| +bdos.asm|930||0|0|52229|T| +bdos.asm|933||0|0|52232|F|BDOS.dmpos_l0 +bdos.asm|933||0|0|52232|L|BDOS,dmpos_l0,,+used +bdos.asm|934||0|0|52232|T| +bdos.asm|935||0|0|52233|T| +bdos.asm|936||0|0|52234|T| +bdos.asm|937||0|0|52235|T| +bdos.asm|939||0|0|52238|T| +bdos.asm|940||0|0|52239|T| +bdos.asm|941||0|0|52241|T| +bdos.asm|943||0|0|52242|T| +bdos.asm|944||0|0|52243|T| +bdos.asm|946||0|0|52246|F|BDOS.dmpos_l1 +bdos.asm|946||0|0|52246|L|BDOS,dmpos_l1,,+used +bdos.asm|947||0|0|52246|T| +bdos.asm|948||0|0|52247|T| +bdos.asm|949||0|0|52250|T| +bdos.asm|950||0|0|52251|T| +bdos.asm|951||0|0|52252|T| +bdos.asm|952||0|0|52255|F|BDOS.dmpos_l2 +bdos.asm|952||0|0|52255|L|BDOS,dmpos_l2,,+used +bdos.asm|953||0|0|52255|T| +bdos.asm|954||0|0|52256|T| +bdos.asm|959||0|0|52257|F|BDOS.bdos_getdm +bdos.asm|959||0|0|52257|L|BDOS,bdos_getdm,,+used +bdos.asm|960||0|0|52257|T| +bdos.asm|961||0|0|52260|T| +bdos.asm|962||0|0|52263|T| +bdos.asm|963||0|0|52264|T| +bdos.asm|964||0|0|52265|T| +bdos.asm|965||0|0|52268|T| +bdos.asm|966||0|0|52269|T| +bdos.asm|967||0|0|52272|T| +bdos.asm|968||0|0|52273|T| +bdos.asm|969||0|0|52275|T| +bdos.asm|971||0|0|52276|F|BDOS.getdmd +bdos.asm|971||0|0|52276|L|BDOS,getdmd,,+used +bdos.asm|972||0|0|52276|T| +bdos.asm|973||0|0|52277|T| +bdos.asm|974||0|0|52278|T| +bdos.asm|975||0|0|52279|T| +bdos.asm|976||0|0|52280|T| +bdos.asm|977||0|0|52281|T| +bdos.asm|982||0|0|52282|F|BDOS.bdos_index +bdos.asm|982||0|0|52282|L|BDOS,bdos_index,,+used +bdos.asm|983||0|0|52282|T| +bdos.asm|984||0|0|52285|T| +bdos.asm|985||0|0|52286|T| +bdos.asm|986||0|0|52288|T| +bdos.asm|987||0|0|52291|T| +bdos.asm|988||0|0|52294|T| +bdos.asm|994||0|0|52295|F|BDOS.bdos_allocated +bdos.asm|994||0|0|52295|L|BDOS,bdos_allocated,,+used +bdos.asm|995||0|0|52295|T| +bdos.asm|996||0|0|52298|T| +bdos.asm|997||0|0|52299|T| +bdos.asm|998||0|0|52300|T| +bdos.asm|1003||0|0|52301|F|BDOS.bdos_atran +bdos.asm|1003||0|0|52301|L|BDOS,bdos_atran,,+used +bdos.asm|1004||0|0|52301|T| +bdos.asm|1005||0|0|52304|T| +bdos.asm|1006||0|0|52307|F|BDOS.bdatarn_l0 +bdos.asm|1006||0|0|52307|L|BDOS,bdatarn_l0,,+used +bdos.asm|1007||0|0|52307|T| +bdos.asm|1008||0|0|52308|T| +bdos.asm|1009||0|0|52309|T| +bdos.asm|1010||0|0|52312|T| +bdos.asm|1011||0|0|52315|T| +bdos.asm|1012||0|0|52318|T| +bdos.asm|1013||0|0|52319|T| +bdos.asm|1014||0|0|52322|T| +bdos.asm|1015||0|0|52323|T| +bdos.asm|1016||0|0|52324|T| +bdos.asm|1017||0|0|52325|T| +bdos.asm|1018||0|0|52328|T| +bdos.asm|1023||0|0|52329|F|BDOS.bdos_getexta +bdos.asm|1023||0|0|52329|L|BDOS,bdos_getexta,,+used +bdos.asm|1024||0|0|52329|T| +bdos.asm|1025||0|0|52332|T| +bdos.asm|1026||0|0|52335|T| +bdos.asm|1027||0|0|52336|T| +bdos.asm|1034||0|0|52337|F|BDOS.bdos_fcb_rcnr +bdos.asm|1034||0|0|52337|L|BDOS,bdos_fcb_rcnr,,+used +bdos.asm|1035||0|0|52337|T| +bdos.asm|1036||0|0|52340|T| +bdos.asm|1037||0|0|52343|T| +bdos.asm|1038||0|0|52344|T| +bdos.asm|1039||0|0|52345|T| +bdos.asm|1040||0|0|52348|T| +bdos.asm|1041||0|0|52349|T| +bdos.asm|1046||0|0|52350|F|BDOS.bdos_stor_fcb_var +bdos.asm|1046||0|0|52350|L|BDOS,bdos_stor_fcb_var,,+used +bdos.asm|1047||0|0|52350|T| +bdos.asm|1048||0|0|52353|T| +bdos.asm|1049||0|0|52354|T| +bdos.asm|1050||0|0|52357|T| +bdos.asm|1051||0|0|52358|T| +bdos.asm|1052||0|0|52359|T| +bdos.asm|1053||0|0|52362|T| +bdos.asm|1054||0|0|52365|T| +bdos.asm|1055||0|0|52368|T| +bdos.asm|1056||0|0|52369|T| +bdos.asm|1057||0|0|52372|T| +bdos.asm|1063||0|0|52373|F|BDOS.bdos_set_nxt_rec +bdos.asm|1063||0|0|52373|L|BDOS,bdos_set_nxt_rec,,+used +bdos.asm|1064||0|0|52373|T| +bdos.asm|1065||0|0|52376|T| +bdos.asm|1066||0|0|52379|T| +bdos.asm|1067||0|0|52381|T| +bdos.asm|1068||0|0|52384|T| +bdos.asm|1069||0|0|52385|F|BDOS.bsfcb_l0 +bdos.asm|1069||0|0|52385|L|BDOS,bsfcb_l0,,+used +bdos.asm|1070||0|0|52385|T| +bdos.asm|1071||0|0|52386|T| +bdos.asm|1072||0|0|52389|T| +bdos.asm|1073||0|0|52390|T| +bdos.asm|1074||0|0|52391|T| +bdos.asm|1075||0|0|52392|T| +bdos.asm|1076||0|0|52395|T| +bdos.asm|1077||0|0|52396|T| +bdos.asm|1082||0|0|52397|F|BDOS.bdos_hlrotr +bdos.asm|1082||0|0|52397|L|BDOS,bdos_hlrotr,,+used +bdos.asm|1083||0|0|52397|T| +bdos.asm|1084||0|0|52398|F|BDOS.bhlr_nxt +bdos.asm|1084||0|0|52398|L|BDOS,bhlr_nxt,,+used +bdos.asm|1085||0|0|52398|T| +bdos.asm|1086||0|0|52399|T| +bdos.asm|1087||0|0|52400|T| +bdos.asm|1088||0|0|52401|T| +bdos.asm|1089||0|0|52402|T| +bdos.asm|1090||0|0|52403|T| +bdos.asm|1091||0|0|52404|T| +bdos.asm|1092||0|0|52405|T| +bdos.asm|1093||0|0|52406|T| +bdos.asm|1094||0|0|52407|T| +bdos.asm|1100||0|0|52410|F|BDOS.bdos_compute_cs +bdos.asm|1100||0|0|52410|L|BDOS,bdos_compute_cs,,+used +bdos.asm|1101||0|0|52410|T| +bdos.asm|1102||0|0|52412|T| +bdos.asm|1103||0|0|52415|T| +bdos.asm|1104||0|0|52416|F|BDOS.bcompcs_add_nxt +bdos.asm|1104||0|0|52416|L|BDOS,bcompcs_add_nxt,,+used +bdos.asm|1105||0|0|52416|T| +bdos.asm|1106||0|0|52417|T| +bdos.asm|1107||0|0|52418|T| +bdos.asm|1108||0|0|52419|T| +bdos.asm|1109||0|0|52422|T| +bdos.asm|1114||0|0|52423|F|BDOS.bdos_hlrotl +bdos.asm|1114||0|0|52423|L|BDOS,bdos_hlrotl,,+used +bdos.asm|1115||0|0|52423|T| +bdos.asm|1116||0|0|52424|F|BDOS.bdos_hlrotl.nxt +bdos.asm|1116||0|0|52424|L|BDOS,bdos_hlrotl,nxt,+used +bdos.asm|1117||0|0|52424|T| +bdos.asm|1118||0|0|52425|T| +bdos.asm|1119||0|0|52426|T| +bdos.asm|1120||0|0|52427|T| +bdos.asm|1127||0|0|52430|F|BDOS.bdos_set_dsk_bit +bdos.asm|1127||0|0|52430|L|BDOS,bdos_set_dsk_bit,,+used +bdos.asm|1128||0|0|52430|T| +bdos.asm|1129||0|0|52431|T| +bdos.asm|1130||0|0|52434|T| +bdos.asm|1131||0|0|52435|T| +bdos.asm|1132||0|0|52438|T| +bdos.asm|1133||0|0|52441|T| +bdos.asm|1134||0|0|52442|T| +bdos.asm|1135||0|0|52443|T| +bdos.asm|1136||0|0|52444|T| +bdos.asm|1137||0|0|52445|T| +bdos.asm|1138||0|0|52446|T| +bdos.asm|1139||0|0|52447|T| +bdos.asm|1140||0|0|52448|T| +bdos.asm|1145||0|0|52449|F|BDOS.bdos_nowrite +bdos.asm|1145||0|0|52449|L|BDOS,bdos_nowrite,,+used +bdos.asm|1146||0|0|52449|T| +bdos.asm|1147||0|0|52452|T| +bdos.asm|1148||0|0|52455|T| +bdos.asm|1149||0|0|52456|T| +bdos.asm|1150||0|0|52459|T| +bdos.asm|1151||0|0|52460|T| +bdos.asm|1152||0|0|52462|T| +bdos.asm|1158||0|0|52463|F|BDOS.bdos_set_ro +bdos.asm|1158||0|0|52463|L|BDOS,bdos_set_ro,,+used +bdos.asm|1159||0|0|52463|T| +bdos.asm|1160||0|0|52466|T| +bdos.asm|1161||0|0|52467|T| +bdos.asm|1162||0|0|52468|T| +bdos.asm|1164||0|0|52469|T| +bdos.asm|1165||0|0|52472|T| +bdos.asm|1167||0|0|52475|T| +bdos.asm|1168||0|0|52478|T| +bdos.asm|1169||0|0|52479|T| +bdos.asm|1170||0|0|52480|T| +bdos.asm|1171||0|0|52483|T| +bdos.asm|1172||0|0|52484|T| +bdos.asm|1173||0|0|52485|T| +bdos.asm|1174||0|0|52486|T| +bdos.asm|1179||0|0|52487|F|BDOS.bdos_check_rodir +bdos.asm|1179||0|0|52487|L|BDOS,bdos_check_rodir,,+used +bdos.asm|1180||0|0|52487|T| +bdos.asm|1185||0|0|52490|F|BDOS.bdos_check_rofile +bdos.asm|1185||0|0|52490|L|BDOS,bdos_check_rofile,,+used +bdos.asm|1186||0|0|52490|T| +bdos.asm|1187||0|0|52493|T| +bdos.asm|1188||0|0|52494|T| +bdos.asm|1189||0|0|52495|T| +bdos.asm|1190||0|0|52496|T| +bdos.asm|1191||0|0|52497|T| +bdos.asm|1192||0|0|52500|T| +bdos.asm|1197||0|0|52503|F|BDOS.bdos_check_write +bdos.asm|1197||0|0|52503|L|BDOS,bdos_check_write,,+used +bdos.asm|1198||0|0|52503|T| +bdos.asm|1199||0|0|52506|T| +bdos.asm|1200||0|0|52507|T| +bdos.asm|1201||0|0|52510|T| +bdos.asm|1207||0|0|52513|F|BDOS.bdos_getdptra +bdos.asm|1207||0|0|52513|L|BDOS,bdos_getdptra,,+used +bdos.asm|1208||0|0|52513|T| +bdos.asm|1209||0|0|52516|T| +bdos.asm|1214||0|0|52519|F|BDOS.bdos_hl_add_a +bdos.asm|1214||0|0|52519|L|BDOS,bdos_hl_add_a,,+used +bdos.asm|1215||0|0|52519|T| +bdos.asm|1216||0|0|52520|T| +bdos.asm|1217||0|0|52521|T| +bdos.asm|1218||0|0|52522|T| +bdos.asm|1219||0|0|52523|T| +bdos.asm|1226||0|0|52524|F|BDOS.bdos_get_s2 +bdos.asm|1226||0|0|52524|L|BDOS,bdos_get_s2,,+used +bdos.asm|1227||0|0|52524|T| +bdos.asm|1228||0|0|52527|T| +bdos.asm|1229||0|0|52530|T| +bdos.asm|1230||0|0|52531|T| +bdos.asm|1231||0|0|52532|T| +bdos.asm|1236||0|0|52533|F|BDOS.bdos_clear_s2 +bdos.asm|1236||0|0|52533|L|BDOS,bdos_clear_s2,,+used +bdos.asm|1237||0|0|52533|T| +bdos.asm|1238||0|0|52536|T| +bdos.asm|1239||0|0|52538|T| +bdos.asm|1244||0|0|52539|F|BDOS.bdos_set_fwf +bdos.asm|1244||0|0|52539|L|BDOS,bdos_set_fwf,,+used +bdos.asm|1245||0|0|52539|T| +bdos.asm|1246||0|0|52542|T| +bdos.asm|1247||0|0|52544|T| +bdos.asm|1248||0|0|52545|T| +bdos.asm|1255||0|0|52546|F|BDOS.bdos_dir_is_free +bdos.asm|1255||0|0|52546|L|BDOS,bdos_dir_is_free,,+used +bdos.asm|1256||0|0|52546|T| +bdos.asm|1257||0|0|52549|T| +bdos.asm|1258||0|0|52550|T| +bdos.asm|1259||0|0|52553|T| +bdos.asm|1260||0|0|52554|T| +bdos.asm|1261||0|0|52555|T| +bdos.asm|1262||0|0|52556|T| +bdos.asm|1263||0|0|52557|T| +bdos.asm|1265||0|0|52558|T| +bdos.asm|1270||0|0|52559|F|BDOS.bdos_setcdr +bdos.asm|1270||0|0|52559|L|BDOS,bdos_setcdr,,+used +bdos.asm|1271||0|0|52559|T| +bdos.asm|1272||0|0|52562|T| +bdos.asm|1273||0|0|52563|T| +bdos.asm|1274||0|0|52564|T| +bdos.asm|1275||0|0|52565|T| +bdos.asm|1276||0|0|52566|T| +bdos.asm|1277||0|0|52567|T| +bdos.asm|1282||0|0|52568|F|BDOS.bdos_de_sub_hl +bdos.asm|1282||0|0|52568|L|BDOS,bdos_de_sub_hl,,+used +bdos.asm|1283||0|0|52568|T| +bdos.asm|1284||0|0|52569|T| +bdos.asm|1285||0|0|52570|T| +bdos.asm|1286||0|0|52571|T| +bdos.asm|1287||0|0|52572|T| +bdos.asm|1288||0|0|52573|T| +bdos.asm|1289||0|0|52574|T| +bdos.asm|1292||0|0|52575|F|BDOS.bdos_newchecksum +bdos.asm|1292||0|0|52575|L|BDOS,bdos_newchecksum,,+used +bdos.asm|1293||0|0|52575|T| +bdos.asm|1297||0|0|52577|F|BDOS.bdos_checksum +bdos.asm|1297||0|0|52577|L|BDOS,bdos_checksum,,+used +bdos.asm|1298||0|0|52577|T| +bdos.asm|1299||0|0|52580|T| +bdos.asm|1300||0|0|52581|T| +bdos.asm|1301||0|0|52584|T| +bdos.asm|1302||0|0|52587|T| +bdos.asm|1303||0|0|52588|T| +bdos.asm|1304||0|0|52589|T| +bdos.asm|1305||0|0|52592|T| +bdos.asm|1306||0|0|52595|T| +bdos.asm|1307||0|0|52596|T| +bdos.asm|1308||0|0|52599|T| +bdos.asm|1309||0|0|52600|T| +bdos.asm|1310||0|0|52601|T| +bdos.asm|1311||0|0|52602|T| +bdos.asm|1312||0|0|52605|T| +bdos.asm|1313||0|0|52606|T| +bdos.asm|1314||0|0|52607|T| +bdos.asm|1315||0|0|52610|T| +bdos.asm|1316||0|0|52611|T| +bdos.asm|1317||0|0|52614|T| +bdos.asm|1318||0|0|52615|F|BDOS.initial_cs +bdos.asm|1318||0|0|52615|L|BDOS,initial_cs,,+used +bdos.asm|1319||0|0|52615|T| +bdos.asm|1320||0|0|52616|T| +bdos.asm|1325||0|0|52617|F|BDOS.bdos_wrdir +bdos.asm|1325||0|0|52617|L|BDOS,bdos_wrdir,,+used +bdos.asm|1326||0|0|52617|T| +bdos.asm|1327||0|0|52620|T| +bdos.asm|1328||0|0|52623|T| +bdos.asm|1329||0|0|52625|T| +bdos.asm|1330||0|0|52628|T| +bdos.asm|1335||0|0|52631|F|BDOS.bdos_rd_dir +bdos.asm|1335||0|0|52631|L|BDOS,bdos_rd_dir,,+used +bdos.asm|1336||0|0|52631|T| +bdos.asm|1337||0|0|52634|T| +bdos.asm|1342||0|0|52637|F|BDOS.bdos_setdata +bdos.asm|1342||0|0|52637|L|BDOS,bdos_setdata,,+used +bdos.asm|1343||0|0|52637|T| +bdos.asm|1344||0|0|52640|T| +bdos.asm|1349||0|0|52643|F|BDOS.bdos_setdir +bdos.asm|1349||0|0|52643|L|BDOS,bdos_setdir,,+used +bdos.asm|1350||0|0|52643|T| +bdos.asm|1355||0|0|52646|F|BDOS.bdos_set_dma +bdos.asm|1355||0|0|52646|L|BDOS,bdos_set_dma,,+used +bdos.asm|1356||0|0|52646|T| +bdos.asm|1357||0|0|52647|T| +bdos.asm|1358||0|0|52648|T| +bdos.asm|1359||0|0|52649|T| +bdos.asm|1365||0|0|52652|F|BDOS.bdos_dir_to_user +bdos.asm|1365||0|0|52652|L|BDOS,bdos_dir_to_user,,+used +bdos.asm|1366||0|0|52652|T| +bdos.asm|1367||0|0|52655|T| +bdos.asm|1368||0|0|52656|T| +bdos.asm|1369||0|0|52659|T| +bdos.asm|1370||0|0|52661|T| +bdos.asm|1376||0|0|52664|F|BDOS.bdos_end_of_dir +bdos.asm|1376||0|0|52664|L|BDOS,bdos_end_of_dir,,+used +bdos.asm|1377||0|0|52664|T| +bdos.asm|1378||0|0|52667|T| +bdos.asm|1379||0|0|52668|T| +bdos.asm|1380||0|0|52669|T| +bdos.asm|1381||0|0|52670|T| +bdos.asm|1382||0|0|52671|T| +bdos.asm|1383||0|0|52672|T| +bdos.asm|1388||0|0|52673|F|BDOS.bdos_set_end_dir +bdos.asm|1388||0|0|52673|L|BDOS,bdos_set_end_dir,,+used +bdos.asm|1389||0|0|52673|T| +bdos.asm|1390||0|0|52676|T| +bdos.asm|1391||0|0|52679|T| +bdos.asm|1396||0|0|52680|F|BDOS.bdos_read_dir +bdos.asm|1396||0|0|52680|L|BDOS,bdos_read_dir,,+used +bdos.asm|1397||0|0|52680|T| +bdos.asm|1398||0|0|52683|T| +bdos.asm|1399||0|0|52684|T| +bdos.asm|1400||0|0|52687|T| +bdos.asm|1401||0|0|52688|T| +bdos.asm|1402||0|0|52691|T| +bdos.asm|1403||0|0|52694|T| +bdos.asm|1404||0|0|52697|T| +bdos.asm|1405||0|0|52700|F|BDOS.bdrd_l0 +bdos.asm|1405||0|0|52700|L|BDOS,bdrd_l0,,+used +bdos.asm|1406||0|0|52700|T| +bdos.asm|1407||0|0|52703|T| +bdos.asm|1408||0|0|52705|T| +bdos.asm|1409||0|0|52707|F|BDOS.bdrd_l1 +bdos.asm|1409||0|0|52707|L|BDOS,bdrd_l1,,+used +bdos.asm|1410||0|0|52707|T| +bdos.asm|1411||0|0|52708|T| +bdos.asm|1412||0|0|52709|T| +bdos.asm|1413||0|0|52712|T| +bdos.asm|1414||0|0|52715|T| +bdos.asm|1415||0|0|52716|T| +bdos.asm|1416||0|0|52717|T| +bdos.asm|1417||0|0|52718|T| +bdos.asm|1418||0|0|52721|T| +bdos.asm|1419||0|0|52724|T| +bdos.asm|1420||0|0|52725|T| +bdos.asm|1430||0|0|52728|F|BDOS.bdos_getallocbit +bdos.asm|1430||0|0|52728|L|BDOS,bdos_getallocbit,,+used +bdos.asm|1431||0|0|52728|T| +bdos.asm|1432||0|0|52729|T| +bdos.asm|1433||0|0|52731|T| +bdos.asm|1434||0|0|52732|T| +bdos.asm|1435||0|0|52733|T| +bdos.asm|1436||0|0|52734|T| +bdos.asm|1437||0|0|52735|T| +bdos.asm|1438||0|0|52736|T| +bdos.asm|1439||0|0|52737|T| +bdos.asm|1440||0|0|52738|T| +bdos.asm|1441||0|0|52740|T| +bdos.asm|1442||0|0|52741|T| +bdos.asm|1443||0|0|52742|T| +bdos.asm|1444||0|0|52743|T| +bdos.asm|1445||0|0|52744|T| +bdos.asm|1446||0|0|52745|T| +bdos.asm|1447||0|0|52746|T| +bdos.asm|1448||0|0|52747|T| +bdos.asm|1449||0|0|52748|T| +bdos.asm|1450||0|0|52749|T| +bdos.asm|1451||0|0|52750|T| +bdos.asm|1452||0|0|52751|T| +bdos.asm|1453||0|0|52752|T| +bdos.asm|1454||0|0|52753|T| +bdos.asm|1455||0|0|52755|T| +bdos.asm|1456||0|0|52756|T| +bdos.asm|1457||0|0|52759|T| +bdos.asm|1458||0|0|52760|T| +bdos.asm|1459||0|0|52761|F|BDOS.ga_rotl +bdos.asm|1459||0|0|52761|L|BDOS,ga_rotl,,+used +bdos.asm|1460||0|0|52761|T| +bdos.asm|1461||0|0|52762|T| +bdos.asm|1462||0|0|52763|T| +bdos.asm|1463||0|0|52766|T| +bdos.asm|1469||0|0|52767|F|BDOS.bdos_setallocbit +bdos.asm|1469||0|0|52767|L|BDOS,bdos_setallocbit,,+used +bdos.asm|1470||0|0|52767|T| +bdos.asm|1471||0|0|52768|T| +bdos.asm|1472||0|0|52771|T| +bdos.asm|1473||0|0|52773|T| +bdos.asm|1474||0|0|52774|T| +bdos.asm|1482||0|0|52775|F|BDOS.bdos_sab_rotr +bdos.asm|1482||0|0|52775|L|BDOS,bdos_sab_rotr,,+used +bdos.asm|1483||0|0|52775|T| +bdos.asm|1484||0|0|52776|T| +bdos.asm|1485||0|0|52777|T| +bdos.asm|1486||0|0|52780|T| +bdos.asm|1487||0|0|52781|T| +bdos.asm|1493||0|0|52782|F|BDOS.bdos_scandm +bdos.asm|1493||0|0|52782|L|BDOS,bdos_scandm,,+used +bdos.asm|1494||0|0|52782|T| +bdos.asm|1496||0|0|52785|T| +bdos.asm|1497||0|0|52788|T| +bdos.asm|1498||0|0|52789|T| +bdos.asm|1499||0|0|52790|T| +bdos.asm|1501||0|0|52792|F|BDOS.bdos_scandm.scan_next +bdos.asm|1501||0|0|52792|L|BDOS,bdos_scandm,scan_next,+used +bdos.asm|1502||0|0|52792|T| +bdos.asm|1503||0|0|52793|T| +bdos.asm|1504||0|0|52794|T| +bdos.asm|1506||0|0|52795|T| +bdos.asm|1508||0|0|52796|T| +bdos.asm|1509||0|0|52799|T| +bdos.asm|1510||0|0|52800|T| +bdos.asm|1511||0|0|52803|T| +bdos.asm|1512||0|0|52804|T| +bdos.asm|1514||0|0|52805|T| +bdos.asm|1515||0|0|52806|T| +bdos.asm|1516||0|0|52808|T| +bdos.asm|1517||0|0|52811|F|BDOS.bdos_scandm.scan_big +bdos.asm|1517||0|0|52811|L|BDOS,bdos_scandm,scan_big,+used +bdos.asm|1519||0|0|52811|T| +bdos.asm|1520||0|0|52812|T| +bdos.asm|1521||0|0|52813|T| +bdos.asm|1522||0|0|52814|T| +bdos.asm|1523||0|0|52815|T| +bdos.asm|1524||0|0|52816|T| +bdos.asm|1526||0|0|52817|F|BDOS.bdos_scandm.scan_cmn +bdos.asm|1526||0|0|52817|L|BDOS,bdos_scandm,scan_cmn,+used +bdos.asm|1528||0|0|52817|T| +bdos.asm|1529||0|0|52818|T| +bdos.asm|1530||0|0|52819|T| +bdos.asm|1532||0|0|52822|T| +bdos.asm|1533||0|0|52825|T| +bdos.asm|1534||0|0|52826|T| +bdos.asm|1535||0|0|52827|T| +bdos.asm|1536||0|0|52828|T| +bdos.asm|1537||0|0|52829|T| +bdos.asm|1539||0|0|52832|F|BDOS.bdos_scandm.not_used +bdos.asm|1539||0|0|52832|L|BDOS,bdos_scandm,not_used,+used +bdos.asm|1540||0|0|52832|T| +bdos.asm|1541||0|0|52833|T| +bdos.asm|1542||0|0|52834|T| +bdos.asm|1543||0|0|52835|T| +bdos.asm|1550||0|0|52838|F|BDOS.bdos_initialize +bdos.asm|1550||0|0|52838|L|BDOS,bdos_initialize,,+used +bdos.asm|1552||0|0|52838|T| +bdos.asm|1553||0|0|52841|T| +bdos.asm|1554||0|0|52843|T| +bdos.asm|1555||0|0|52846|T| +bdos.asm|1556||0|0|52847|T| +bdos.asm|1557||0|0|52848|T| +bdos.asm|1558||0|0|52849|T| +bdos.asm|1560||0|0|52852|F|BDOS.bdos_initialize.alt_fill_0 +bdos.asm|1560||0|0|52852|L|BDOS,bdos_initialize,alt_fill_0,+used +bdos.asm|1561||0|0|52852|T| +bdos.asm|1562||0|0|52854|T| +bdos.asm|1563||0|0|52855|T| +bdos.asm|1564||0|0|52856|T| +bdos.asm|1565||0|0|52857|T| +bdos.asm|1566||0|0|52858|T| +bdos.asm|1568||0|0|52861|T| +bdos.asm|1569||0|0|52864|T| +bdos.asm|1570||0|0|52865|T| +bdos.asm|1571||0|0|52868|T| +bdos.asm|1572||0|0|52869|T| +bdos.asm|1573||0|0|52870|T| +bdos.asm|1574||0|0|52871|T| +bdos.asm|1576||0|0|52874|T| +bdos.asm|1577||0|0|52877|T| +bdos.asm|1578||0|0|52879|T| +bdos.asm|1579||0|0|52880|T| +bdos.asm|1580||0|0|52882|T| +bdos.asm|1582||0|0|52885|F|BDOS.bdos_initialize.rd_next_f +bdos.asm|1582||0|0|52885|L|BDOS,bdos_initialize,rd_next_f,+used +bdos.asm|1584||0|0|52885|T| +bdos.asm|1585||0|0|52887|T| +bdos.asm|1586||0|0|52890|T| +bdos.asm|1587||0|0|52893|T| +bdos.asm|1589||0|0|52894|T| +bdos.asm|1590||0|0|52897|T| +bdos.asm|1591||0|0|52899|T| +bdos.asm|1592||0|0|52900|T| +bdos.asm|1594||0|0|52903|T| +bdos.asm|1595||0|0|52906|T| +bdos.asm|1596||0|0|52907|T| +bdos.asm|1597||0|0|52910|T| +bdos.asm|1598||0|0|52911|T| +bdos.asm|1599||0|0|52912|T| +bdos.asm|1600||0|0|52914|T| +bdos.asm|1602||0|0|52917|T| +bdos.asm|1603||0|0|52918|T| +bdos.asm|1605||0|0|52921|F|BDOS.bdos_initialize.set_as_used +bdos.asm|1605||0|0|52921|L|BDOS,bdos_initialize,set_as_used,+used +bdos.asm|1606||0|0|52921|T| +bdos.asm|1607||0|0|52923|T| +bdos.asm|1608||0|0|52926|T| +bdos.asm|1609||0|0|52929|T| +bdos.asm|1615||0|0|52932|F|BDOS.bdos_ret_dirloc +bdos.asm|1615||0|0|52932|L|BDOS,bdos_ret_dirloc,,+used +bdos.asm|1616||0|0|52932|T| +bdos.asm|1617||0|0|52935|T| +bdos.asm|1623||0|0|52938|F|BDOS.bdos_compext +bdos.asm|1623||0|0|52938|L|BDOS,bdos_compext,,+used +bdos.asm|1624||0|0|52938|T| +bdos.asm|1625||0|0|52939|T| +bdos.asm|1626||0|0|52940|T| +bdos.asm|1627||0|0|52943|T| +bdos.asm|1628||0|0|52944|T| +bdos.asm|1629||0|0|52945|T| +bdos.asm|1630||0|0|52946|T| +bdos.asm|1631||0|0|52947|T| +bdos.asm|1632||0|0|52948|T| +bdos.asm|1633||0|0|52949|T| +bdos.asm|1634||0|0|52950|T| +bdos.asm|1635||0|0|52951|T| +bdos.asm|1636||0|0|52953|T| +bdos.asm|1637||0|0|52954|T| +bdos.asm|1642||0|0|52955|F|BDOS.bdos_search +bdos.asm|1642||0|0|52955|L|BDOS,bdos_search,,+used +bdos.asm|1643||0|0|52955|T| +bdos.asm|1644||0|0|52957|T| +bdos.asm|1645||0|0|52960|T| +bdos.asm|1646||0|0|52963|T| +bdos.asm|1647||0|0|52964|T| +bdos.asm|1648||0|0|52967|T| +bdos.asm|1649||0|0|52970|T| +bdos.asm|1650||0|0|52973|T| +bdos.asm|1657||0|0|52976|F|BDOS.bdos_search_nxt +bdos.asm|1657||0|0|52976|L|BDOS,bdos_search_nxt,,+used +bdos.asm|1658||0|0|52976|T| +bdos.asm|1659||0|0|52978|T| +bdos.asm|1660||0|0|52981|T| +bdos.asm|1661||0|0|52984|T| +bdos.asm|1663||0|0|52987|T| +bdos.asm|1664||0|0|52990|T| +bdos.asm|1666||0|0|52991|T| +bdos.asm|1667||0|0|52992|T| +bdos.asm|1668||0|0|52994|T| +bdos.asm|1670||0|0|52997|T| +bdos.asm|1671||0|0|52998|T| +bdos.asm|1672||0|0|53001|T| +bdos.asm|1673||0|0|53002|T| +bdos.asm|1675||0|0|53005|F|BDOS.bdos_search_nxt.search_next +bdos.asm|1675||0|0|53005|L|BDOS,bdos_search_nxt,search_next,+used +bdos.asm|1676||0|0|53005|T| +bdos.asm|1677||0|0|53008|T| +bdos.asm|1678||0|0|53011|T| +bdos.asm|1679||0|0|53012|T| +bdos.asm|1682||0|0|53014|F|BDOS.bdos_search_nxt.search_loop +bdos.asm|1682||0|0|53014|L|BDOS,bdos_search_nxt,search_loop,+used +bdos.asm|1683||0|0|53014|T| +bdos.asm|1684||0|0|53015|T| +bdos.asm|1685||0|0|53016|T| +bdos.asm|1687||0|0|53019|T| +bdos.asm|1688||0|0|53020|T| +bdos.asm|1689||0|0|53022|T| +bdos.asm|1690||0|0|53025|T| +bdos.asm|1691||0|0|53026|T| +bdos.asm|1692||0|0|53028|T| +bdos.asm|1693||0|0|53031|T| +bdos.asm|1694||0|0|53033|T| +bdos.asm|1695||0|0|53034|T| +bdos.asm|1696||0|0|53037|T| +bdos.asm|1697||0|0|53038|T| +bdos.asm|1698||0|0|53040|T| +bdos.asm|1699||0|0|53043|T| +bdos.asm|1702||0|0|53046|F|BDOS.bdos_search_nxt.search_ext +bdos.asm|1702||0|0|53046|L|BDOS,bdos_search_nxt,search_ext,+used +bdos.asm|1703||0|0|53046|T| +bdos.asm|1704||0|0|53047|T| +bdos.asm|1705||0|0|53048|T| +bdos.asm|1706||0|0|53051|T| +bdos.asm|1707||0|0|53052|T| +bdos.asm|1710||0|0|53055|F|BDOS.bdos_search_nxt.search_ok +bdos.asm|1710||0|0|53055|L|BDOS,bdos_search_nxt,search_ok,+used +bdos.asm|1711||0|0|53055|T| +bdos.asm|1712||0|0|53056|T| +bdos.asm|1713||0|0|53057|T| +bdos.asm|1714||0|0|53058|T| +bdos.asm|1715||0|0|53059|T| +bdos.asm|1718||0|0|53062|F|BDOS.bdos_search_nxt.search_end +bdos.asm|1718||0|0|53062|L|BDOS,bdos_search_nxt,search_end,+used +bdos.asm|1719||0|0|53062|T| +bdos.asm|1720||0|0|53065|T| +bdos.asm|1721||0|0|53067|T| +bdos.asm|1722||0|0|53070|T| +bdos.asm|1723||0|0|53073|T| +bdos.asm|1724||0|0|53074|T| +bdos.asm|1725||0|0|53075|T| +bdos.asm|1726||0|0|53076|T| +bdos.asm|1727||0|0|53077|T| +bdos.asm|1728||0|0|53078|T| +bdos.asm|1731||0|0|53079|F|BDOS.bdos_search_nxt.not_found +bdos.asm|1731||0|0|53079|L|BDOS,bdos_search_nxt,not_found,+used +bdos.asm|1732||0|0|53079|T| +bdos.asm|1733||0|0|53082|T| +bdos.asm|1734||0|0|53084|T| +bdos.asm|1739||0|0|53087|F|BDOS.bdos_era_file +bdos.asm|1739||0|0|53087|L|BDOS,bdos_era_file,,+used +bdos.asm|1740||0|0|53087|T| +bdos.asm|1741||0|0|53090|T| +bdos.asm|1742||0|0|53092|T| +bdos.asm|1743||0|0|53095|F|BDOS.bdos_era_file.del_next +bdos.asm|1743||0|0|53095|L|BDOS,bdos_era_file,del_next,+used +bdos.asm|1744||0|0|53095|T| +bdos.asm|1745||0|0|53098|T| +bdos.asm|1746||0|0|53099|T| +bdos.asm|1747||0|0|53102|T| +bdos.asm|1748||0|0|53105|T| +bdos.asm|1749||0|0|53107|T| +bdos.asm|1750||0|0|53109|T| +bdos.asm|1751||0|0|53112|T| +bdos.asm|1752||0|0|53115|T| +bdos.asm|1753||0|0|53118|T| +bdos.asm|1762||0|0|53121|F|BDOS.bdos_get_block +bdos.asm|1762||0|0|53121|L|BDOS,bdos_get_block,,+used +bdos.asm|1763||0|0|53121|T| +bdos.asm|1764||0|0|53122|T| +bdos.asm|1765||0|0|53123|F|BDOS.bdos_get_block.prev_test +bdos.asm|1765||0|0|53123|L|BDOS,bdos_get_block,prev_test,+used +bdos.asm|1766||0|0|53123|T| +bdos.asm|1767||0|0|53124|T| +bdos.asm|1768||0|0|53125|T| +bdos.asm|1770||0|0|53128|T| +bdos.asm|1771||0|0|53129|T| +bdos.asm|1772||0|0|53130|T| +bdos.asm|1773||0|0|53131|T| +bdos.asm|1774||0|0|53134|T| +bdos.asm|1775||0|0|53135|T| +bdos.asm|1778||0|0|53138|T| +bdos.asm|1779||0|0|53139|T| +bdos.asm|1782||0|0|53140|F|BDOS.bdos_get_block.next_test +bdos.asm|1782||0|0|53140|L|BDOS,bdos_get_block,next_test,+used +bdos.asm|1784||0|0|53140|T| +bdos.asm|1785||0|0|53143|T| +bdos.asm|1786||0|0|53144|T| +bdos.asm|1787||0|0|53145|T| +bdos.asm|1788||0|0|53146|T| +bdos.asm|1789||0|0|53147|T| +bdos.asm|1791||0|0|53150|T| +bdos.asm|1792||0|0|53151|T| +bdos.asm|1793||0|0|53152|T| +bdos.asm|1794||0|0|53153|T| +bdos.asm|1795||0|0|53154|T| +bdos.asm|1796||0|0|53155|T| +bdos.asm|1797||0|0|53158|T| +bdos.asm|1798||0|0|53159|T| +bdos.asm|1799||0|0|53162|T| +bdos.asm|1800||0|0|53163|T| +bdos.asm|1801||0|0|53164|T| +bdos.asm|1804||0|0|53167|F|BDOS.bdos_get_block.ret_block +bdos.asm|1804||0|0|53167|L|BDOS,bdos_get_block,ret_block,+used +bdos.asm|1805||0|0|53167|T| +bdos.asm|1806||0|0|53168|T| +bdos.asm|1807||0|0|53169|T| +bdos.asm|1808||0|0|53172|T| +bdos.asm|1809||0|0|53173|T| +bdos.asm|1810||0|0|53174|T| +bdos.asm|1813||0|0|53175|F|BDOS.bdos_get_block.ret_no_block +bdos.asm|1813||0|0|53175|L|BDOS,bdos_get_block,ret_no_block,+used +bdos.asm|1814||0|0|53175|T| +bdos.asm|1815||0|0|53176|T| +bdos.asm|1816||0|0|53177|T| +bdos.asm|1817||0|0|53180|T| +bdos.asm|1818||0|0|53183|T| +bdos.asm|1823||0|0|53184|F|BDOS.bdos_copy_fcb +bdos.asm|1823||0|0|53184|L|BDOS,bdos_copy_fcb,,+used +bdos.asm|1824||0|0|53184|T| +bdos.asm|1825||0|0|53186|T| +bdos.asm|1830||0|0|53188|F|BDOS.dbos_copy_dir +bdos.asm|1830||0|0|53188|L|BDOS,dbos_copy_dir,,+used +bdos.asm|1831||0|0|53188|T| +bdos.asm|1832||0|0|53189|T| +bdos.asm|1833||0|0|53191|T| +bdos.asm|1834||0|0|53194|T| +bdos.asm|1835||0|0|53195|T| +bdos.asm|1836||0|0|53196|T| +bdos.asm|1837||0|0|53199|T| +bdos.asm|1838||0|0|53200|T| +bdos.asm|1843||0|0|53203|F|BDOS.bdos_seek_copy +bdos.asm|1843||0|0|53203|L|BDOS,bdos_seek_copy,,+used +bdos.asm|1844||0|0|53203|T| +bdos.asm|1845||0|0|53206|T| +bdos.asm|1852||0|0|53209|F|BDOS.bdos_rename +bdos.asm|1852||0|0|53209|L|BDOS,bdos_rename,,+used +bdos.asm|1853||0|0|53209|T| +bdos.asm|1854||0|0|53212|T| +bdos.asm|1855||0|0|53214|T| +bdos.asm|1856||0|0|53217|T| +bdos.asm|1857||0|0|53220|T| +bdos.asm|1858||0|0|53221|T| +bdos.asm|1859||0|0|53224|T| +bdos.asm|1860||0|0|53225|T| +bdos.asm|1862||0|0|53226|F|BDOS.bdos_rename.ren_next +bdos.asm|1862||0|0|53226|L|BDOS,bdos_rename,ren_next,+used +bdos.asm|1863||0|0|53226|T| +bdos.asm|1864||0|0|53229|T| +bdos.asm|1866||0|0|53230|T| +bdos.asm|1867||0|0|53233|T| +bdos.asm|1868||0|0|53235|T| +bdos.asm|1869||0|0|53237|T| +bdos.asm|1870||0|0|53240|T| +bdos.asm|1871||0|0|53243|T| +bdos.asm|1876||0|0|53246|F|BDOS.bdos_update_attrs +bdos.asm|1876||0|0|53246|L|BDOS,bdos_update_attrs,,+used +bdos.asm|1877||0|0|53246|T| +bdos.asm|1878||0|0|53248|T| +bdos.asm|1879||0|0|53251|F|BDOS.bdos_update_attrs.set_next +bdos.asm|1879||0|0|53251|L|BDOS,bdos_update_attrs,set_next,+used +bdos.asm|1880||0|0|53251|T| +bdos.asm|1881||0|0|53254|T| +bdos.asm|1883||0|0|53255|T| +bdos.asm|1884||0|0|53257|T| +bdos.asm|1885||0|0|53259|T| +bdos.asm|1886||0|0|53262|T| +bdos.asm|1887||0|0|53265|T| +bdos.asm|1892||0|0|53268|F|BDOS.open +bdos.asm|1892||0|0|53268|L|BDOS,open,,+used +bdos.asm|1893||0|0|53268|T| +bdos.asm|1894||0|0|53270|T| +bdos.asm|1895||0|0|53273|T| +bdos.asm|1896||0|0|53276|T| +bdos.asm|1898||0|0|53277|F|BDOS.bdos_open_copy +bdos.asm|1898||0|0|53277|L|BDOS,bdos_open_copy,,+used +bdos.asm|1899||0|0|53277|T| +bdos.asm|1900||0|0|53280|T| +bdos.asm|1901||0|0|53281|T| +bdos.asm|1902||0|0|53282|T| +bdos.asm|1903||0|0|53283|T| +bdos.asm|1904||0|0|53286|T| +bdos.asm|1906||0|0|53287|T| +bdos.asm|1907||0|0|53290|T| +bdos.asm|1908||0|0|53292|T| +bdos.asm|1909||0|0|53293|T| +bdos.asm|1910||0|0|53296|T| +bdos.asm|1912||0|0|53299|T| +bdos.asm|1913||0|0|53300|T| +bdos.asm|1914||0|0|53303|T| +bdos.asm|1915||0|0|53304|T| +bdos.asm|1917||0|0|53305|T| +bdos.asm|1918||0|0|53308|T| +bdos.asm|1919||0|0|53309|T| +bdos.asm|1921||0|0|53310|T| +bdos.asm|1922||0|0|53311|T| +bdos.asm|1923||0|0|53312|T| +bdos.asm|1924||0|0|53313|T| +bdos.asm|1925||0|0|53314|T| +bdos.asm|1926||0|0|53315|T| +bdos.asm|1927||0|0|53316|T| +bdos.asm|1929||0|0|53319|T| +bdos.asm|1930||0|0|53321|T| +bdos.asm|1932||0|0|53324|T| +bdos.asm|1934||0|0|53326|F|BDOS.bdos_open_copy.set_rec_cnt +bdos.asm|1934||0|0|53326|L|BDOS,bdos_open_copy,set_rec_cnt,+used +bdos.asm|1936||0|0|53326|T| +bdos.asm|1937||0|0|53329|T| +bdos.asm|1938||0|0|53332|T| +bdos.asm|1939||0|0|53333|T| +bdos.asm|1940||0|0|53334|T| +bdos.asm|1946||0|0|53335|F|BDOS.bdos_mergezero +bdos.asm|1946||0|0|53335|L|BDOS,bdos_mergezero,,+used +bdos.asm|1947||0|0|53335|T| +bdos.asm|1948||0|0|53336|T| +bdos.asm|1949||0|0|53337|T| +bdos.asm|1950||0|0|53338|T| +bdos.asm|1951||0|0|53339|T| +bdos.asm|1952||0|0|53340|T| +bdos.asm|1953||0|0|53341|T| +bdos.asm|1954||0|0|53342|T| +bdos.asm|1955||0|0|53343|T| +bdos.asm|1956||0|0|53344|T| +bdos.asm|1957||0|0|53345|T| +bdos.asm|1958||0|0|53346|T| +bdos.asm|1959||0|0|53347|T| +bdos.asm|1960||0|0|53348|T| +bdos.asm|1965||0|0|53349|F|BDOS.bdos_close +bdos.asm|1965||0|0|53349|L|BDOS,bdos_close,,+used +bdos.asm|1966||0|0|53349|T| +bdos.asm|1968||0|0|53350|T| +bdos.asm|1969||0|0|53353|T| +bdos.asm|1970||0|0|53356|T| +bdos.asm|1971||0|0|53359|T| +bdos.asm|1972||0|0|53362|T| +bdos.asm|1974||0|0|53363|T| +bdos.asm|1975||0|0|53366|T| +bdos.asm|1976||0|0|53368|T| +bdos.asm|1978||0|0|53369|T| +bdos.asm|1979||0|0|53371|T| +bdos.asm|1980||0|0|53374|T| +bdos.asm|1981||0|0|53377|T| +bdos.asm|1983||0|0|53378|T| +bdos.asm|1984||0|0|53381|T| +bdos.asm|1985||0|0|53384|T| +bdos.asm|1986||0|0|53385|T| +bdos.asm|1988||0|0|53386|T| +bdos.asm|1989||0|0|53389|T| +bdos.asm|1990||0|0|53390|T| +bdos.asm|1992||0|0|53392|F|BDOS.bdos_merge0 +bdos.asm|1992||0|0|53392|L|BDOS,bdos_merge0,,+used +bdos.asm|1993||0|0|53392|T| +bdos.asm|1994||0|0|53395|T| +bdos.asm|1995||0|0|53396|T| +bdos.asm|1997||0|0|53399|T| +bdos.asm|1998||0|0|53400|T| +bdos.asm|1999||0|0|53401|T| +bdos.asm|2000||0|0|53402|T| +bdos.asm|2001||0|0|53405|T| +bdos.asm|2003||0|0|53406|F|BDOS.bdm_fcbnzero +bdos.asm|2003||0|0|53406|L|BDOS,bdm_fcbnzero,,+used +bdos.asm|2004||0|0|53406|T| +bdos.asm|2005||0|0|53407|T| +bdos.asm|2007||0|0|53410|T| +bdos.asm|2008||0|0|53411|T| +bdos.asm|2010||0|0|53412|F|BDOS.bdm_buffnzero +bdos.asm|2010||0|0|53412|L|BDOS,bdm_buffnzero,,+used +bdos.asm|2011||0|0|53412|T| +bdos.asm|2012||0|0|53413|T| +bdos.asm|2013||0|0|53416|T| +bdos.asm|2015||0|0|53419|F|BDOS.bdos_merge +bdos.asm|2015||0|0|53419|L|BDOS,bdos_merge,,+used +bdos.asm|2016||0|0|53419|T| +bdos.asm|2017||0|0|53422|T| +bdos.asm|2018||0|0|53423|T| +bdos.asm|2019||0|0|53426|T| +bdos.asm|2020||0|0|53427|T| +bdos.asm|2021||0|0|53428|T| +bdos.asm|2022||0|0|53429|T| +bdos.asm|2025||0|0|53432|T| +bdos.asm|2026||0|0|53433|T| +bdos.asm|2027||0|0|53434|T| +bdos.asm|2028||0|0|53435|T| +bdos.asm|2029||0|0|53436|T| +bdos.asm|2030||0|0|53439|T| +bdos.asm|2032||0|0|53440|F|BDOS.bdm_dmset +bdos.asm|2032||0|0|53440|L|BDOS,bdm_dmset,,+used +bdos.asm|2034||0|0|53440|T| +bdos.asm|2035||0|0|53441|T| +bdos.asm|2036||0|0|53442|T| +bdos.asm|2037||0|0|53443|T| +bdos.asm|2039||0|0|53446|T| +bdos.asm|2040||0|0|53449|T| +bdos.asm|2041||0|0|53450|T| +bdos.asm|2042||0|0|53451|T| +bdos.asm|2043||0|0|53452|T| +bdos.asm|2044||0|0|53453|T| +bdos.asm|2045||0|0|53454|T| +bdos.asm|2047||0|0|53457|T| +bdos.asm|2048||0|0|53458|T| +bdos.asm|2049||0|0|53461|T| +bdos.asm|2050||0|0|53462|T| +bdos.asm|2051||0|0|53463|T| +bdos.asm|2052||0|0|53464|T| +bdos.asm|2053||0|0|53465|T| +bdos.asm|2055||0|0|53466|F|BDOS.bdm_endmerge +bdos.asm|2055||0|0|53466|L|BDOS,bdm_endmerge,,+used +bdos.asm|2056||0|0|53466|T| +bdos.asm|2057||0|0|53468|T| +bdos.asm|2058||0|0|53471|T| +bdos.asm|2061||0|0|53474|F|BDOS.bdm_mergerr +bdos.asm|2061||0|0|53474|L|BDOS,bdm_mergerr,,+used +bdos.asm|2062||0|0|53474|T| +bdos.asm|2063||0|0|53477|T| +bdos.asm|2064||0|0|53478|T| +bdos.asm|2070||0|0|53479|F|BDOS.bdos_make +bdos.asm|2070||0|0|53479|L|BDOS,bdos_make,,+used +bdos.asm|2071||0|0|53479|T| +bdos.asm|2072||0|0|53482|T| +bdos.asm|2073||0|0|53485|T| +bdos.asm|2074||0|0|53486|T| +bdos.asm|2076||0|0|53489|T| +bdos.asm|2078||0|0|53492|T| +bdos.asm|2079||0|0|53494|T| +bdos.asm|2080||0|0|53497|T| +bdos.asm|2081||0|0|53500|T| +bdos.asm|2082||0|0|53501|T| +bdos.asm|2083||0|0|53504|T| +bdos.asm|2084||0|0|53505|T| +bdos.asm|2085||0|0|53506|T| +bdos.asm|2086||0|0|53509|T| +bdos.asm|2089||0|0|53510|T| +bdos.asm|2090||0|0|53512|T| +bdos.asm|2091||0|0|53513|F|BDOS.bdos_make.fcb_set_0 +bdos.asm|2091||0|0|53513|L|BDOS,bdos_make,fcb_set_0,+used +bdos.asm|2092||0|0|53513|T| +bdos.asm|2093||0|0|53514|T| +bdos.asm|2094||0|0|53515|T| +bdos.asm|2095||0|0|53516|T| +bdos.asm|2097||0|0|53519|T| +bdos.asm|2098||0|0|53522|T| +bdos.asm|2099||0|0|53523|T| +bdos.asm|2100||0|0|53524|T| +bdos.asm|2101||0|0|53527|T| +bdos.asm|2102||0|0|53530|T| +bdos.asm|2108||0|0|53533|F|BDOS.bdos_open_reel +bdos.asm|2108||0|0|53533|L|BDOS,bdos_open_reel,,+used +bdos.asm|2109||0|0|53533|T| +bdos.asm|2110||0|0|53534|T| +bdos.asm|2111||0|0|53537|T| +bdos.asm|2112||0|0|53540|T| +bdos.asm|2113||0|0|53543|T| +bdos.asm|2115||0|0|53544|T| +bdos.asm|2116||0|0|53547|T| +bdos.asm|2117||0|0|53550|T| +bdos.asm|2118||0|0|53551|T| +bdos.asm|2120||0|0|53552|T| +bdos.asm|2121||0|0|53553|T| +bdos.asm|2122||0|0|53555|T| +bdos.asm|2123||0|0|53556|T| +bdos.asm|2125||0|0|53559|T| +bdos.asm|2126||0|0|53560|T| +bdos.asm|2127||0|0|53563|T| +bdos.asm|2128||0|0|53564|T| +bdos.asm|2129||0|0|53567|T| +bdos.asm|2130||0|0|53568|T| +bdos.asm|2131||0|0|53571|T| +bdos.asm|2133||0|0|53574|F|BDOS.bdos_open_reel.overflow +bdos.asm|2133||0|0|53574|L|BDOS,bdos_open_reel,overflow,+used +bdos.asm|2134||0|0|53574|T| +bdos.asm|2135||0|0|53577|T| +bdos.asm|2136||0|0|53578|T| +bdos.asm|2137||0|0|53579|T| +bdos.asm|2138||0|0|53580|T| +bdos.asm|2139||0|0|53582|T| +bdos.asm|2141||0|0|53585|F|BDOS.bdos_open_reel.read_nxt_extent +bdos.asm|2141||0|0|53585|L|BDOS,bdos_open_reel,read_nxt_extent,+used +bdos.asm|2142||0|0|53585|T| +bdos.asm|2143||0|0|53587|T| +bdos.asm|2144||0|0|53590|T| +bdos.asm|2145||0|0|53593|T| +bdos.asm|2147||0|0|53596|T| +bdos.asm|2148||0|0|53599|T| +bdos.asm|2149||0|0|53600|T| +bdos.asm|2150||0|0|53603|T| +bdos.asm|2151||0|0|53606|T| +bdos.asm|2152||0|0|53609|T| +bdos.asm|2153||0|0|53612|T| +bdos.asm|2154||0|0|53615|F|BDOS.bdos_open_reel.extent_in_mem +bdos.asm|2154||0|0|53615|L|BDOS,bdos_open_reel,extent_in_mem,+used +bdos.asm|2156||0|0|53615|T| +bdos.asm|2157||0|0|53618|F|BDOS.bdos_open_reel.almost_done +bdos.asm|2157||0|0|53618|L|BDOS,bdos_open_reel,almost_done,+used +bdos.asm|2158||0|0|53618|T| +bdos.asm|2159||0|0|53621|T| +bdos.asm|2160||0|0|53622|T| +bdos.asm|2161||0|0|53625|F|BDOS.bdos_open_reel.error +bdos.asm|2161||0|0|53625|L|BDOS,bdos_open_reel,error,+used +bdos.asm|2162||0|0|53625|T| +bdos.asm|2163||0|0|53628|T| +bdos.asm|2168||0|0|53631|F|BDOS.bdos_seq_disk_read +bdos.asm|2168||0|0|53631|L|BDOS,bdos_seq_disk_read,,+used +bdos.asm|2169||0|0|53631|T| +bdos.asm|2170||0|0|53633|T| +bdos.asm|2173||0|0|53636|F|BDOS.bdos_disk_read +bdos.asm|2173||0|0|53636|L|BDOS,bdos_disk_read,,+used +bdos.asm|2174||0|0|53636|T| +bdos.asm|2175||0|0|53638|T| +bdos.asm|2176||0|0|53641|T| +bdos.asm|2177||0|0|53644|T| +bdos.asm|2178||0|0|53647|T| +bdos.asm|2180||0|0|53650|T| +bdos.asm|2181||0|0|53651|T| +bdos.asm|2183||0|0|53654|T| +bdos.asm|2184||0|0|53656|T| +bdos.asm|2186||0|0|53659|T| +bdos.asm|2187||0|0|53662|T| +bdos.asm|2189||0|0|53663|T| +bdos.asm|2191||0|0|53666|T| +bdos.asm|2192||0|0|53669|T| +bdos.asm|2193||0|0|53670|T| +bdos.asm|2194||0|0|53673|F|BDOS.bdos_disk_read.recordok +bdos.asm|2194||0|0|53673|L|BDOS,bdos_disk_read,recordok,+used +bdos.asm|2196||0|0|53673|T| +bdos.asm|2198||0|0|53676|T| +bdos.asm|2199||0|0|53679|T| +bdos.asm|2201||0|0|53682|T| +bdos.asm|2202||0|0|53685|T| +bdos.asm|2203||0|0|53688|T| +bdos.asm|2204||0|0|53691|T| +bdos.asm|2206||0|0|53694|F|BDOS.bdos_disk_read.error_opn +bdos.asm|2206||0|0|53694|L|BDOS,bdos_disk_read,error_opn,+used +bdos.asm|2207||0|0|53694|T| +bdos.asm|2212||0|0|53697|F|BDOS.bdos_seq_disk_write +bdos.asm|2212||0|0|53697|L|BDOS,bdos_seq_disk_write,,+used +bdos.asm|2213||0|0|53697|T| +bdos.asm|2214||0|0|53699|T| +bdos.asm|2215||0|0|53702|F|BDOS.bdos_disk_write +bdos.asm|2215||0|0|53702|L|BDOS,bdos_disk_write,,+used +bdos.asm|2216||0|0|53702|T| +bdos.asm|2217||0|0|53704|T| +bdos.asm|2218||0|0|53707|T| +bdos.asm|2219||0|0|53710|T| +bdos.asm|2220||0|0|53713|T| +bdos.asm|2221||0|0|53716|T| +bdos.asm|2222||0|0|53719|T| +bdos.asm|2223||0|0|53722|T| +bdos.asm|2224||0|0|53724|T| +bdos.asm|2225||0|0|53727|T| +bdos.asm|2226||0|0|53730|T| +bdos.asm|2227||0|0|53733|T| +bdos.asm|2228||0|0|53735|T| +bdos.asm|2229||0|0|53738|T| +bdos.asm|2230||0|0|53741|T| +bdos.asm|2231||0|0|53744|T| +bdos.asm|2232||0|0|53747|T| +bdos.asm|2233||0|0|53748|T| +bdos.asm|2235||0|0|53751|T| +bdos.asm|2236||0|0|53752|T| +bdos.asm|2237||0|0|53753|T| +bdos.asm|2238||0|0|53756|T| +bdos.asm|2239||0|0|53757|T| +bdos.asm|2240||0|0|53758|F|BDOS.bdos_disk_write.nop_block +bdos.asm|2240||0|0|53758|L|BDOS,bdos_disk_write,nop_block,+used +bdos.asm|2241||0|0|53758|T| +bdos.asm|2242||0|0|53761|T| +bdos.asm|2243||0|0|53762|T| +bdos.asm|2244||0|0|53763|T| +bdos.asm|2246||0|0|53766|T| +bdos.asm|2247||0|0|53768|T| +bdos.asm|2248||0|0|53771|F|BDOS.bdos_disk_write.block_ok +bdos.asm|2248||0|0|53771|L|BDOS,bdos_disk_write,block_ok,+used +bdos.asm|2249||0|0|53771|T| +bdos.asm|2250||0|0|53774|T| +bdos.asm|2251||0|0|53775|T| +bdos.asm|2252||0|0|53778|T| +bdos.asm|2253||0|0|53781|T| +bdos.asm|2255||0|0|53782|T| +bdos.asm|2256||0|0|53785|T| +bdos.asm|2257||0|0|53786|T| +bdos.asm|2258||0|0|53789|T| +bdos.asm|2259||0|0|53792|T| +bdos.asm|2260||0|0|53795|T| +bdos.asm|2261||0|0|53796|T| +bdos.asm|2263||0|0|53799|F|BDOS.bdos_disk_write.alloc_big +bdos.asm|2263||0|0|53799|L|BDOS,bdos_disk_write,alloc_big,+used +bdos.asm|2265||0|0|53799|T| +bdos.asm|2266||0|0|53800|T| +bdos.asm|2267||0|0|53802|T| +bdos.asm|2268||0|0|53803|T| +bdos.asm|2269||0|0|53804|T| +bdos.asm|2270||0|0|53805|T| +bdos.asm|2271||0|0|53806|T| +bdos.asm|2274||0|0|53807|F|BDOS.bdos_disk_write.disk_wru +bdos.asm|2274||0|0|53807|L|BDOS,bdos_disk_write,disk_wru,+used +bdos.asm|2275||0|0|53807|T| +bdos.asm|2276||0|0|53809|F|BDOS.bdos_disk_write.disk_wr1 +bdos.asm|2276||0|0|53809|L|BDOS,bdos_disk_write,disk_wr1,+used +bdos.asm|2277||0|0|53809|T| +bdos.asm|2278||0|0|53812|T| +bdos.asm|2279||0|0|53813|T| +bdos.asm|2281||0|0|53814|T| +bdos.asm|2282||0|0|53815|T| +bdos.asm|2283||0|0|53818|T| +bdos.asm|2284||0|0|53821|T| +bdos.asm|2285||0|0|53822|T| +bdos.asm|2286||0|0|53823|T| +bdos.asm|2288||0|0|53826|T| +bdos.asm|2289||0|0|53827|T| +bdos.asm|2290||0|0|53828|T| +bdos.asm|2291||0|0|53829|T| +bdos.asm|2292||0|0|53830|T| +bdos.asm|2293||0|0|53831|T| +bdos.asm|2295||0|0|53834|T| +bdos.asm|2296||0|0|53835|T| +bdos.asm|2297||0|0|53838|T| +bdos.asm|2298||0|0|53839|F|BDOS.bdos_disk_write.fill0 +bdos.asm|2298||0|0|53839|L|BDOS,bdos_disk_write,fill0,+used +bdos.asm|2299||0|0|53839|T| +bdos.asm|2300||0|0|53840|T| +bdos.asm|2301||0|0|53841|T| +bdos.asm|2302||0|0|53842|T| +bdos.asm|2303||0|0|53845|T| +bdos.asm|2304||0|0|53848|T| +bdos.asm|2305||0|0|53851|T| +bdos.asm|2306||0|0|53853|F|BDOS.bdos_disk_write.fill1 +bdos.asm|2306||0|0|53853|L|BDOS,bdos_disk_write,fill1,+used +bdos.asm|2307||0|0|53853|T| +bdos.asm|2308||0|0|53856|T| +bdos.asm|2309||0|0|53857|T| +bdos.asm|2310||0|0|53860|T| +bdos.asm|2311||0|0|53861|T| +bdos.asm|2312||0|0|53864|T| +bdos.asm|2313||0|0|53867|T| +bdos.asm|2314||0|0|53869|T| +bdos.asm|2316||0|0|53872|T| +bdos.asm|2317||0|0|53873|T| +bdos.asm|2318||0|0|53874|T| +bdos.asm|2319||0|0|53875|T| +bdos.asm|2320||0|0|53876|T| +bdos.asm|2322||0|0|53879|T| +bdos.asm|2323||0|0|53880|T| +bdos.asm|2324||0|0|53883|T| +bdos.asm|2327||0|0|53886|F|BDOS.bdos_disk_write.normal_wr +bdos.asm|2327||0|0|53886|L|BDOS,bdos_disk_write,normal_wr,+used +bdos.asm|2328||0|0|53886|T| +bdos.asm|2329||0|0|53889|T| +bdos.asm|2330||0|0|53890|T| +bdos.asm|2331||0|0|53891|T| +bdos.asm|2332||0|0|53894|T| +bdos.asm|2333||0|0|53895|T| +bdos.asm|2334||0|0|53898|T| +bdos.asm|2335||0|0|53901|T| +bdos.asm|2336||0|0|53902|T| +bdos.asm|2338||0|0|53905|T| +bdos.asm|2339||0|0|53906|T| +bdos.asm|2340||0|0|53907|T| +bdos.asm|2341||0|0|53909|F|BDOS.bdos_disk_write.disk_wr2 +bdos.asm|2341||0|0|53909|L|BDOS,bdos_disk_write,disk_wr2,+used +bdos.asm|2342||0|0|53909|T| +bdos.asm|2343||0|0|53910|T| +bdos.asm|2344||0|0|53911|T| +bdos.asm|2345||0|0|53914|T| +bdos.asm|2346||0|0|53915|T| +bdos.asm|2347||0|0|53918|T| +bdos.asm|2348||0|0|53920|T| +bdos.asm|2349||0|0|53921|T| +bdos.asm|2351||0|0|53922|F|BDOS.bdos_disk_write.no_update +bdos.asm|2351||0|0|53922|L|BDOS,bdos_disk_write,no_update,+used +bdos.asm|2353||0|0|53922|T| +bdos.asm|2354||0|0|53924|T| +bdos.asm|2356||0|0|53927|T| +bdos.asm|2357||0|0|53930|T| +bdos.asm|2358||0|0|53932|T| +bdos.asm|2360||0|0|53935|T| +bdos.asm|2361||0|0|53938|T| +bdos.asm|2362||0|0|53941|T| +bdos.asm|2363||0|0|53944|T| +bdos.asm|2364||0|0|53945|T| +bdos.asm|2365||0|0|53946|T| +bdos.asm|2367||0|0|53949|T| +bdos.asm|2368||0|0|53950|T| +bdos.asm|2370||0|0|53953|F|BDOS.bdos_disk_write.no_space +bdos.asm|2370||0|0|53953|L|BDOS,bdos_disk_write,no_space,+used +bdos.asm|2371||0|0|53953|T| +bdos.asm|2373||0|0|53955|F|BDOS.bdos_disk_write.set_nxt_rec +bdos.asm|2373||0|0|53955|L|BDOS,bdos_disk_write,set_nxt_rec,+used +bdos.asm|2374||0|0|53955|T| +bdos.asm|2381||0|0|53958|F|BDOS.bdos_rseek +bdos.asm|2381||0|0|53958|L|BDOS,bdos_rseek,,+used +bdos.asm|2382||0|0|53958|T| +bdos.asm|2383||0|0|53959|T| +bdos.asm|2385||0|0|53962|F|BDOS.bdos_rseek1 +bdos.asm|2385||0|0|53962|L|BDOS,bdos_rseek1,,+used +bdos.asm|2386||0|0|53962|T| +bdos.asm|2387||0|0|53963|T| +bdos.asm|2388||0|0|53966|T| +bdos.asm|2389||0|0|53967|T| +bdos.asm|2390||0|0|53970|T| +bdos.asm|2391||0|0|53971|T| +bdos.asm|2392||0|0|53972|T| +bdos.asm|2393||0|0|53974|T| +bdos.asm|2395||0|0|53975|T| +bdos.asm|2396||0|0|53976|T| +bdos.asm|2397||0|0|53977|T| +bdos.asm|2399||0|0|53978|T| +bdos.asm|2400||0|0|53979|T| +bdos.asm|2401||0|0|53980|T| +bdos.asm|2403||0|0|53982|T| +bdos.asm|2404||0|0|53983|T| +bdos.asm|2405||0|0|53984|T| +bdos.asm|2406||0|0|53985|T| +bdos.asm|2407||0|0|53986|T| +bdos.asm|2408||0|0|53987|T| +bdos.asm|2409||0|0|53988|T| +bdos.asm|2410||0|0|53990|T| +bdos.asm|2411||0|0|53991|T| +bdos.asm|2412||0|0|53992|T| +bdos.asm|2414||0|0|53993|T| +bdos.asm|2416||0|0|53994|T| +bdos.asm|2417||0|0|53995|T| +bdos.asm|2418||0|0|53996|T| +bdos.asm|2419||0|0|53998|T| +bdos.asm|2422||0|0|54001|T| +bdos.asm|2423||0|0|54004|T| +bdos.asm|2424||0|0|54005|T| +bdos.asm|2427||0|0|54006|T| +bdos.asm|2428||0|0|54009|T| +bdos.asm|2429||0|0|54010|T| +bdos.asm|2430||0|0|54011|T| +bdos.asm|2431||0|0|54012|T| +bdos.asm|2433||0|0|54015|T| +bdos.asm|2434||0|0|54018|T| +bdos.asm|2435||0|0|54019|T| +bdos.asm|2436||0|0|54020|T| +bdos.asm|2437||0|0|54021|T| +bdos.asm|2438||0|0|54023|T| +bdos.asm|2440||0|0|54026|F|BDOS.bdos_rseek1.close +bdos.asm|2440||0|0|54026|L|BDOS,bdos_rseek1,close,+used +bdos.asm|2441||0|0|54026|T| +bdos.asm|2442||0|0|54027|T| +bdos.asm|2443||0|0|54028|T| +bdos.asm|2444||0|0|54031|T| +bdos.asm|2445||0|0|54032|T| +bdos.asm|2446||0|0|54033|T| +bdos.asm|2447||0|0|54035|T| +bdos.asm|2448||0|0|54038|T| +bdos.asm|2449||0|0|54039|T| +bdos.asm|2451||0|0|54042|T| +bdos.asm|2452||0|0|54045|T| +bdos.asm|2453||0|0|54046|T| +bdos.asm|2455||0|0|54047|T| +bdos.asm|2456||0|0|54050|T| +bdos.asm|2457||0|0|54051|T| +bdos.asm|2459||0|0|54052|T| +bdos.asm|2460||0|0|54055|T| +bdos.asm|2461||0|0|54058|T| +bdos.asm|2462||0|0|54059|T| +bdos.asm|2463||0|0|54062|T| +bdos.asm|2464||0|0|54063|T| +bdos.asm|2465||0|0|54064|T| +bdos.asm|2466||0|0|54066|T| +bdos.asm|2467||0|0|54067|T| +bdos.asm|2468||0|0|54070|T| +bdos.asm|2469||0|0|54073|T| +bdos.asm|2470||0|0|54075|T| +bdos.asm|2471||0|0|54078|T| +bdos.asm|2472||0|0|54079|T| +bdos.asm|2473||0|0|54082|F|BDOS.bdos_rseek1.seek_ok +bdos.asm|2473||0|0|54082|L|BDOS,bdos_rseek1,seek_ok,+used +bdos.asm|2474||0|0|54082|T| +bdos.asm|2475||0|0|54083|T| +bdos.asm|2476||0|0|54084|T| +bdos.asm|2477||0|0|54087|F|BDOS.bdos_rseek1.bad_seek +bdos.asm|2477||0|0|54087|L|BDOS,bdos_rseek1,bad_seek,+used +bdos.asm|2478||0|0|54087|T| +bdos.asm|2479||0|0|54088|T| +bdos.asm|2480||0|0|54091|T| +bdos.asm|2481||0|0|54093|T| +bdos.asm|2482||0|0|54094|F|BDOS.bdos_rseek1.seek_err +bdos.asm|2482||0|0|54094|L|BDOS,bdos_rseek1,seek_err,+used +bdos.asm|2483||0|0|54094|T| +bdos.asm|2484||0|0|54095|T| +bdos.asm|2485||0|0|54096|T| +bdos.asm|2486||0|0|54099|T| +bdos.asm|2491||0|0|54102|F|BDOS.bdos_rand_disk_read +bdos.asm|2491||0|0|54102|L|BDOS,bdos_rand_disk_read,,+used +bdos.asm|2492||0|0|54102|T| +bdos.asm|2493||0|0|54104|T| +bdos.asm|2494||0|0|54107|T| +bdos.asm|2495||0|0|54110|T| +bdos.asm|2500||0|0|54111|F|BDOS.bdos_rand_disk_write +bdos.asm|2500||0|0|54111|L|BDOS,bdos_rand_disk_write,,+used +bdos.asm|2501||0|0|54111|T| +bdos.asm|2502||0|0|54113|T| +bdos.asm|2503||0|0|54116|T| +bdos.asm|2504||0|0|54119|T| +bdos.asm|2515||0|0|54120|F|BDOS.bdos_compute_rr +bdos.asm|2515||0|0|54120|L|BDOS,bdos_compute_rr,,+used +bdos.asm|2516||0|0|54120|T| +bdos.asm|2517||0|0|54121|T| +bdos.asm|2518||0|0|54122|T| +bdos.asm|2519||0|0|54123|T| +bdos.asm|2520||0|0|54125|T| +bdos.asm|2521||0|0|54128|T| +bdos.asm|2522||0|0|54129|T| +bdos.asm|2524||0|0|54130|T| +bdos.asm|2525||0|0|54131|T| +bdos.asm|2526||0|0|54133|T| +bdos.asm|2527||0|0|54134|T| +bdos.asm|2528||0|0|54135|T| +bdos.asm|2529||0|0|54137|T| +bdos.asm|2530||0|0|54138|T| +bdos.asm|2532||0|0|54139|T| +bdos.asm|2533||0|0|54140|T| +bdos.asm|2534||0|0|54141|T| +bdos.asm|2535||0|0|54143|T| +bdos.asm|2536||0|0|54144|T| +bdos.asm|2538||0|0|54145|T| +bdos.asm|2539||0|0|54148|T| +bdos.asm|2540||0|0|54149|T| +bdos.asm|2541||0|0|54150|T| +bdos.asm|2542||0|0|54151|T| +bdos.asm|2543||0|0|54152|T| +bdos.asm|2544||0|0|54153|T| +bdos.asm|2545||0|0|54154|T| +bdos.asm|2546||0|0|54155|T| +bdos.asm|2547||0|0|54156|T| +bdos.asm|2548||0|0|54157|T| +bdos.asm|2549||0|0|54158|T| +bdos.asm|2550||0|0|54159|T| +bdos.asm|2551||0|0|54160|T| +bdos.asm|2552||0|0|54161|T| +bdos.asm|2553||0|0|54162|T| +bdos.asm|2554||0|0|54164|T| +bdos.asm|2560||0|0|54165|F|BDOS.bdos_get_file_size +bdos.asm|2560||0|0|54165|L|BDOS,bdos_get_file_size,,+used +bdos.asm|2561||0|0|54165|T| +bdos.asm|2562||0|0|54167|T| +bdos.asm|2563||0|0|54170|T| +bdos.asm|2565||0|0|54173|T| +bdos.asm|2566||0|0|54176|T| +bdos.asm|2567||0|0|54177|T| +bdos.asm|2568||0|0|54178|T| +bdos.asm|2569||0|0|54179|T| +bdos.asm|2570||0|0|54180|T| +bdos.asm|2571||0|0|54181|T| +bdos.asm|2572||0|0|54182|T| +bdos.asm|2574||0|0|54183|F|BDOS.bdos_get_file_size.get_extent +bdos.asm|2574||0|0|54183|L|BDOS,bdos_get_file_size,get_extent,+used +bdos.asm|2575||0|0|54183|T| +bdos.asm|2576||0|0|54186|T| +bdos.asm|2577||0|0|54189|T| +bdos.asm|2578||0|0|54192|T| +bdos.asm|2579||0|0|54195|T| +bdos.asm|2580||0|0|54198|T| +bdos.asm|2581||0|0|54199|T| +bdos.asm|2583||0|0|54200|T| +bdos.asm|2584||0|0|54201|T| +bdos.asm|2585||0|0|54202|T| +bdos.asm|2586||0|0|54203|T| +bdos.asm|2587||0|0|54204|T| +bdos.asm|2588||0|0|54205|T| +bdos.asm|2589||0|0|54206|T| +bdos.asm|2590||0|0|54207|T| +bdos.asm|2591||0|0|54208|T| +bdos.asm|2592||0|0|54209|T| +bdos.asm|2594||0|0|54212|T| +bdos.asm|2595||0|0|54213|T| +bdos.asm|2596||0|0|54214|T| +bdos.asm|2597||0|0|54215|T| +bdos.asm|2598||0|0|54216|T| +bdos.asm|2599||0|0|54217|F|BDOS.bdos_get_file_size.less_size +bdos.asm|2599||0|0|54217|L|BDOS,bdos_get_file_size,less_size,+used +bdos.asm|2600||0|0|54217|T| +bdos.asm|2601||0|0|54220|T| +bdos.asm|2602||0|0|54223|F|BDOS.bdos_get_file_size.done +bdos.asm|2602||0|0|54223|L|BDOS,bdos_get_file_size,done,+used +bdos.asm|2603||0|0|54223|T| +bdos.asm|2604||0|0|54224|T| +bdos.asm|2611||0|0|54225|F|BDOS.bdos_set_random +bdos.asm|2611||0|0|54225|L|BDOS,bdos_set_random,,+used +bdos.asm|2612||0|0|54225|T| +bdos.asm|2613||0|0|54228|T| +bdos.asm|2614||0|0|54231|T| +bdos.asm|2615||0|0|54234|T| +bdos.asm|2616||0|0|54237|T| +bdos.asm|2618||0|0|54238|T| +bdos.asm|2619||0|0|54239|T| +bdos.asm|2620||0|0|54240|T| +bdos.asm|2621||0|0|54241|T| +bdos.asm|2622||0|0|54242|T| +bdos.asm|2623||0|0|54243|T| +bdos.asm|2629||0|0|54244|F|BDOS.bdos_select +bdos.asm|2629||0|0|54244|L|BDOS,bdos_select,,+used +bdos.asm|2630||0|0|54244|T| +bdos.asm|2631||0|0|54247|T| +bdos.asm|2632||0|0|54250|T| +bdos.asm|2633||0|0|54251|T| +bdos.asm|2634||0|0|54254|T| +bdos.asm|2635||0|0|54255|T| +bdos.asm|2636||0|0|54256|T| +bdos.asm|2637||0|0|54259|T| +bdos.asm|2638||0|0|54260|T| +bdos.asm|2640||0|0|54263|T| +bdos.asm|2641||0|0|54264|T| +bdos.asm|2642||0|0|54265|T| +bdos.asm|2644||0|0|54266|T| +bdos.asm|2645||0|0|54269|T| +bdos.asm|2646||0|0|54270|T| +bdos.asm|2647||0|0|54271|T| +bdos.asm|2648||0|0|54274|T| +bdos.asm|2650||0|0|54277|T| +bdos.asm|2658||0|0|54280|F|BDOS.bdos_select_disk +bdos.asm|2658||0|0|54280|L|BDOS,bdos_select_disk,,+used +bdos.asm|2660||0|0|54280|T| +bdos.asm|2661||0|0|54283|T| +bdos.asm|2662||0|0|54286|T| +bdos.asm|2663||0|0|54287|T| +bdos.asm|2665||0|0|54288|T| +bdos.asm|2666||0|0|54289|T| +bdos.asm|2671||0|0|54292|F|BDOS.bdos_reselect +bdos.asm|2671||0|0|54292|L|BDOS,bdos_reselect,,+used +bdos.asm|2672||0|0|54292|T| +bdos.asm|2673||0|0|54294|T| +bdos.asm|2674||0|0|54297|T| +bdos.asm|2675||0|0|54300|T| +bdos.asm|2676||0|0|54301|T| +bdos.asm|2677||0|0|54303|T| +bdos.asm|2678||0|0|54304|T| +bdos.asm|2679||0|0|54307|T| +bdos.asm|2680||0|0|54309|T| +bdos.asm|2682||0|0|54312|T| +bdos.asm|2683||0|0|54315|T| +bdos.asm|2685||0|0|54318|T| +bdos.asm|2686||0|0|54319|T| +bdos.asm|2688||0|0|54322|T| +bdos.asm|2689||0|0|54324|T| +bdos.asm|2690||0|0|54325|T| +bdos.asm|2692||0|0|54328|F|BDOS.bdos_reselect.no_select +bdos.asm|2692||0|0|54328|L|BDOS,bdos_reselect,no_select,+used +bdos.asm|2694||0|0|54328|T| +bdos.asm|2695||0|0|54331|T| +bdos.asm|2696||0|0|54334|T| +bdos.asm|2697||0|0|54335|T| +bdos.asm|2698||0|0|54336|T| +bdos.asm|2703||0|0|54337|F|BDOS.bdos_get_version +bdos.asm|2703||0|0|54337|L|BDOS,bdos_get_version,,+used +bdos.asm|2704||0|0|54337|T| +bdos.asm|2705||0|0|54339|T| +bdos.asm|2710||0|0|54342|F|BDOS.bdos_reset_disks +bdos.asm|2710||0|0|54342|L|BDOS,bdos_reset_disks,,+used +bdos.asm|2711||0|0|54342|T| +bdos.asm|2712||0|0|54345|T| +bdos.asm|2713||0|0|54348|T| +bdos.asm|2714||0|0|54351|T| +bdos.asm|2715||0|0|54352|T| +bdos.asm|2716||0|0|54355|T| +bdos.asm|2717||0|0|54358|T| +bdos.asm|2718||0|0|54361|T| +bdos.asm|2719||0|0|54364|T| +bdos.asm|2726||0|0|54367|F|BDOS.bdos_open_file +bdos.asm|2726||0|0|54367|L|BDOS,bdos_open_file,,+used +bdos.asm|2727||0|0|54367|T| +bdos.asm|2728||0|0|54370|T| +bdos.asm|2729||0|0|54373|T| +bdos.asm|2736||0|0|54376|F|BDOS.bdos_close_file +bdos.asm|2736||0|0|54376|L|BDOS,bdos_close_file,,+used +bdos.asm|2737||0|0|54376|T| +bdos.asm|2738||0|0|54379|T| +bdos.asm|2745||0|0|54382|F|BDOS.bdos_search_first +bdos.asm|2745||0|0|54382|L|BDOS,bdos_search_first,,+used +bdos.asm|2746||0|0|54382|T| +bdos.asm|2747||0|0|54384|T| +bdos.asm|2748||0|0|54385|T| +bdos.asm|2749||0|0|54386|T| +bdos.asm|2750||0|0|54388|T| +bdos.asm|2752||0|0|54391|T| +bdos.asm|2753||0|0|54394|T| +bdos.asm|2754||0|0|54395|T| +bdos.asm|2755||0|0|54397|T| +bdos.asm|2756||0|0|54400|T| +bdos.asm|2757||0|0|54403|T| +bdos.asm|2758||0|0|54405|F|BDOS.bdos_search_first.qselect +bdos.asm|2758||0|0|54405|L|BDOS,bdos_search_first,qselect,+used +bdos.asm|2759||0|0|54405|T| +bdos.asm|2760||0|0|54408|T| +bdos.asm|2766||0|0|54411|F|BDOS.bdos_search_next +bdos.asm|2766||0|0|54411|L|BDOS,bdos_search_next,,+used +bdos.asm|2767||0|0|54411|T| +bdos.asm|2768||0|0|54414|T| +bdos.asm|2769||0|0|54417|T| +bdos.asm|2770||0|0|54420|T| +bdos.asm|2771||0|0|54423|T| +bdos.asm|2778||0|0|54426|F|BDOS.bdos_rm_file +bdos.asm|2778||0|0|54426|L|BDOS,bdos_rm_file,,+used +bdos.asm|2779||0|0|54426|T| +bdos.asm|2780||0|0|54429|T| +bdos.asm|2781||0|0|54432|T| +bdos.asm|2793||0|0|54435|F|BDOS.bdos_read_file +bdos.asm|2793||0|0|54435|L|BDOS,bdos_read_file,,+used +bdos.asm|2794||0|0|54435|T| +bdos.asm|2795||0|0|54438|T| +bdos.asm|2808||0|0|54441|F|BDOS.bdos_write_file +bdos.asm|2808||0|0|54441|L|BDOS,bdos_write_file,,+used +bdos.asm|2809||0|0|54441|T| +bdos.asm|2810||0|0|54444|T| +bdos.asm|2819||0|0|54447|F|BDOS.bdos_make_file +bdos.asm|2819||0|0|54447|L|BDOS,bdos_make_file,,+used +bdos.asm|2820||0|0|54447|T| +bdos.asm|2821||0|0|54450|T| +bdos.asm|2822||0|0|54453|T| +bdos.asm|2831||0|0|54456|F|BDOS.bdos_ren_file +bdos.asm|2831||0|0|54456|L|BDOS,bdos_ren_file,,+used +bdos.asm|2832||0|0|54456|T| +bdos.asm|2833||0|0|54459|T| +bdos.asm|2834||0|0|54462|T| +bdos.asm|2840||0|0|54465|F|BDOS.bdos_get_login_vec +bdos.asm|2840||0|0|54465|L|BDOS,bdos_get_login_vec,,+used +bdos.asm|2841||0|0|54465|T| +bdos.asm|2842||0|0|54468|T| +bdos.asm|2848||0|0|54471|F|BDOS.bdos_get_cur_drive +bdos.asm|2848||0|0|54471|L|BDOS,bdos_get_cur_drive,,+used +bdos.asm|2849||0|0|54471|T| +bdos.asm|2850||0|0|54474|T| +bdos.asm|2856||0|0|54477|F|BDOS.bdos_set_dma_addr +bdos.asm|2856||0|0|54477|L|BDOS,bdos_set_dma_addr,,+used +bdos.asm|2857||0|0|54477|T| +bdos.asm|2858||0|0|54478|T| +bdos.asm|2859||0|0|54481|T| +bdos.asm|2865||0|0|54484|F|BDOS.bdos_get_alloc_addr +bdos.asm|2865||0|0|54484|L|BDOS,bdos_get_alloc_addr,,+used +bdos.asm|2866||0|0|54484|T| +bdos.asm|2867||0|0|54487|T| +bdos.asm|2872||0|0|54490|F|BDOS.bdos_get_wr_protect +bdos.asm|2872||0|0|54490|L|BDOS,bdos_get_wr_protect,,+used +bdos.asm|2873||0|0|54490|T| +bdos.asm|2874||0|0|54493|T| +bdos.asm|2879||0|0|54496|F|BDOS.bdos_set_attr +bdos.asm|2879||0|0|54496|L|BDOS,bdos_set_attr,,+used +bdos.asm|2880||0|0|54496|T| +bdos.asm|2881||0|0|54499|T| +bdos.asm|2882||0|0|54502|T| +bdos.asm|2888||0|0|54505|F|BDOS.bdos_get_dpb +bdos.asm|2888||0|0|54505|L|BDOS,bdos_get_dpb,,+used +bdos.asm|2889||0|0|54505|T| +bdos.asm|2894||0|0|54508|F|BDOS.sthl_ret +bdos.asm|2894||0|0|54508|L|BDOS,sthl_ret,,+used +bdos.asm|2895||0|0|54508|T| +bdos.asm|2896||0|0|54511|T| +bdos.asm|2903||0|0|54512|F|BDOS.bdos_set_user +bdos.asm|2903||0|0|54512|L|BDOS,bdos_set_user,,+used +bdos.asm|2904||0|0|54512|T| +bdos.asm|2905||0|0|54515|T| +bdos.asm|2906||0|0|54517|T| +bdos.asm|2907||0|0|54520|T| +bdos.asm|2908||0|0|54523|T| +bdos.asm|2909||0|0|54526|F|BDOS.bdos_set_user.set_user +bdos.asm|2909||0|0|54526|L|BDOS,bdos_set_user,set_user,+used +bdos.asm|2910||0|0|54526|T| +bdos.asm|2911||0|0|54528|T| +bdos.asm|2912||0|0|54531|T| +bdos.asm|2920||0|0|54532|F|BDOS.bdos_rand_read +bdos.asm|2920||0|0|54532|L|BDOS,bdos_rand_read,,+used +bdos.asm|2921||0|0|54532|T| +bdos.asm|2922||0|0|54535|T| +bdos.asm|2930||0|0|54538|F|BDOS.bdos_rand_write +bdos.asm|2930||0|0|54538|L|BDOS,bdos_rand_write,,+used +bdos.asm|2931||0|0|54538|T| +bdos.asm|2932||0|0|54541|T| +bdos.asm|2939||0|0|54544|F|BDOS.bdos_compute_fs +bdos.asm|2939||0|0|54544|L|BDOS,bdos_compute_fs,,+used +bdos.asm|2940||0|0|54544|T| +bdos.asm|2941||0|0|54547|T| +bdos.asm|2947||0|0|54550|F|BDOS.bdos_reset_drives +bdos.asm|2947||0|0|54550|L|BDOS,bdos_reset_drives,,+used +bdos.asm|2948||0|0|54550|T| +bdos.asm|2949||0|0|54553|T| +bdos.asm|2950||0|0|54554|T| +bdos.asm|2951||0|0|54555|T| +bdos.asm|2952||0|0|54556|T| +bdos.asm|2953||0|0|54557|T| +bdos.asm|2954||0|0|54558|T| +bdos.asm|2955||0|0|54561|T| +bdos.asm|2956||0|0|54562|T| +bdos.asm|2957||0|0|54563|T| +bdos.asm|2958||0|0|54564|T| +bdos.asm|2959||0|0|54565|T| +bdos.asm|2960||0|0|54566|T| +bdos.asm|2961||0|0|54569|T| +bdos.asm|2962||0|0|54570|T| +bdos.asm|2964||0|0|54573|T| +bdos.asm|2965||0|0|54574|T| +bdos.asm|2966||0|0|54575|T| +bdos.asm|2967||0|0|54576|T| +bdos.asm|2968||0|0|54577|T| +bdos.asm|2969||0|0|54578|T| +bdos.asm|2971||0|0|54579|T| +bdos.asm|2972||0|0|54582|T| +bdos.asm|2978||0|0|54583|F|BDOS.bdos_goback +bdos.asm|2978||0|0|54583|L|BDOS,bdos_goback,,+used +bdos.asm|2979||0|0|54583|T| +bdos.asm|2980||0|0|54586|T| +bdos.asm|2981||0|0|54587|T| +bdos.asm|2983||0|0|54590|T| +bdos.asm|2984||0|0|54593|T| +bdos.asm|2985||0|0|54595|T| +bdos.asm|2986||0|0|54598|T| +bdos.asm|2987||0|0|54599|T| +bdos.asm|2988||0|0|54602|T| +bdos.asm|2989||0|0|54603|T| +bdos.asm|2990||0|0|54606|T| +bdos.asm|2991||0|0|54609|T| +bdos.asm|2996||0|0|54612|F|BDOS.bdos_ret_mon +bdos.asm|2996||0|0|54612|L|BDOS,bdos_ret_mon,,+used +bdos.asm|2997||0|0|54612|T| +bdos.asm|2998||0|0|54615|T| +bdos.asm|2999||0|0|54616|T| +bdos.asm|3000||0|0|54619|T| +bdos.asm|3001||0|0|54620|T| +bdos.asm|3002||0|0|54621|T| +bdos.asm|3008||0|0|54622|F|BDOS.bdos_rand_write_z +bdos.asm|3008||0|0|54622|L|BDOS,bdos_rand_write_z,,+used +bdos.asm|3009||0|0|54622|T| +bdos.asm|3010||0|0|54625|T| +bdos.asm|3011||0|0|54627|T| +bdos.asm|3012||0|0|54630|T| +bdos.asm|3013||0|0|54632|T| +bdos.asm|3014||0|0|54635|T| +bdos.asm|3015||0|0|54638|T| +bdos.asm|3020||0|0|54639|F|BDOS.filler +bdos.asm|3020||0|0|54639|L|BDOS,filler, +bdos.asm|3026||0|-1|54641|D|BDOS.LAST +bdos.asm|3026||0|-1|54641|L|BDOS,LAST,,+equ,+used +bdos.asm|3027||0|-1|3441|D|BDOS.CODE_SIZE +bdos.asm|3027||0|-1|3441|L|BDOS,CODE_SIZE,,+equ,+used +bdos.asm|3028||0|-1|143|D|BDOS.FILL_SIZE +bdos.asm|3028||0|-1|143|L|BDOS,FILL_SIZE,,+equ,+used +bdos.asm|3035||0|0|54641|F|BDOS.FILLER +bdos.asm|3035||0|0|54641|L|BDOS,FILLER, +bdos.asm|3038||0|-1|54784|L|BDOS,,,+endmod +mon_entries.inc|12||0|-1|54784|L|MON,,,+module +mon_entries.inc|14||0|-1|57344|D|MON.mon_init +mon_entries.inc|14||0|-1|57344|L|MON,mon_init,,+equ +mon_entries.inc|15||0|-1|57347|D|MON.mon_hexb +mon_entries.inc|15||0|-1|57347|L|MON,mon_hexb,,+equ,+used +mon_entries.inc|16||0|-1|57350|D|MON.non_con_status +mon_entries.inc|16||0|-1|57350|L|MON,non_con_status,,+equ,+used +mon_entries.inc|17||0|-1|57353|D|MON.mon_con_in +mon_entries.inc|17||0|-1|57353|L|MON,mon_con_in,,+equ,+used +mon_entries.inc|18||0|-1|57356|D|MON.mon_con_out +mon_entries.inc|18||0|-1|57356|L|MON,mon_con_out,,+equ,+used +mon_entries.inc|19||0|-1|57359|D|MON.mon_serial_in +mon_entries.inc|19||0|-1|57359|L|MON,mon_serial_in,,+equ,+used +mon_entries.inc|20||0|-1|57362|D|MON.mon_serial_out +mon_entries.inc|20||0|-1|57362|L|MON,mon_serial_out,,+equ,+used +mon_entries.inc|21||0|-1|57365|D|MON.mon_char_print +mon_entries.inc|21||0|-1|57365|L|MON,mon_char_print,,+equ,+used +mon_entries.inc|22||0|-1|57368|D|MON.mon_tape_read +mon_entries.inc|22||0|-1|57368|L|MON,mon_tape_read,,+equ,+used +mon_entries.inc|23||0|-1|57371|D|MON.mon_tape_write +mon_entries.inc|23||0|-1|57371|L|MON,mon_tape_write,,+equ,+used +mon_entries.inc|24||0|-1|57374|D|MON.ram_disk_read +mon_entries.inc|24||0|-1|57374|L|MON,ram_disk_read,,+equ,+used +mon_entries.inc|25||0|-1|57377|D|MON.ram_disk_write +mon_entries.inc|25||0|-1|57377|L|MON,ram_disk_write,,+equ,+used +mon_entries.inc|26||0|-1|57380|D|MON.mon_res_f1 +mon_entries.inc|26||0|-1|57380|L|MON,mon_res_f1,,+equ +mon_entries.inc|27||0|-1|57383|D|MON.mon_res_f2 +mon_entries.inc|27||0|-1|57383|L|MON,mon_res_f2,,+equ +mon_entries.inc|28||0|-1|57386|D|MON.mon_tape_wait +mon_entries.inc|28||0|-1|57386|L|MON,mon_tape_wait,,+equ,+used +mon_entries.inc|29||0|-1|57389|D|MON.mon_tape_detect +mon_entries.inc|29||0|-1|57389|L|MON,mon_tape_detect,,+equ +mon_entries.inc|30||0|-1|57392|D|MON.read_floppy +mon_entries.inc|30||0|-1|57392|L|MON,read_floppy,,+equ,+used +mon_entries.inc|31||0|-1|57395|D|MON.write_floppy +mon_entries.inc|31||0|-1|57395|L|MON,write_floppy,,+equ,+used +mon_entries.inc|33||0|-1|54784|L|MON,,,+endmod +bios.asm|19||0|-1|54784|L|BIOS,,,+module +bios.asm|26||0|0|54784|F|BIOS.boot_f +bios.asm|26||0|0|54784|L|BIOS,boot_f,,+used +bios.asm|27||0|0|54784|T| +bios.asm|28||0|0|54787|F|BIOS.wboot_f +bios.asm|28||0|0|54787|L|BIOS,wboot_f,,+used +bios.asm|29||0|0|54787|T| +bios.asm|34||0|0|54790|F|BIOS.const_f +bios.asm|34||0|0|54790|L|BIOS,const_f,,+used +bios.asm|35||0|0|54790|T| +bios.asm|40||0|0|54793|F|BIOS.conin_f +bios.asm|40||0|0|54793|L|BIOS,conin_f,,+used +bios.asm|41||0|0|54793|T| +bios.asm|46||0|0|54796|F|BIOS.conout_f +bios.asm|46||0|0|54796|L|BIOS,conout_f,,+used +bios.asm|47||0|0|54796|T| +bios.asm|52||0|0|54799|F|BIOS.list_f +bios.asm|52||0|0|54799|L|BIOS,list_f,,+used +bios.asm|53||0|0|54799|T| +bios.asm|58||0|0|54802|F|BIOS.punch_f +bios.asm|58||0|0|54802|L|BIOS,punch_f,,+used +bios.asm|59||0|0|54802|T| +bios.asm|64||0|0|54805|F|BIOS.reader_f +bios.asm|64||0|0|54805|L|BIOS,reader_f,,+used +bios.asm|65||0|0|54805|T| +bios.asm|70||0|0|54808|F|BIOS.home_f +bios.asm|70||0|0|54808|L|BIOS,home_f,,+used +bios.asm|71||0|0|54808|T| +bios.asm|76||0|0|54811|F|BIOS.seldsk_f +bios.asm|76||0|0|54811|L|BIOS,seldsk_f,,+used +bios.asm|77||0|0|54811|T| +bios.asm|78||0|0|54814|F|BIOS.settrk_f +bios.asm|78||0|0|54814|L|BIOS,settrk_f,,+used +bios.asm|79||0|0|54814|T| +bios.asm|80||0|0|54817|F|BIOS.setsec_f +bios.asm|80||0|0|54817|L|BIOS,setsec_f,,+used +bios.asm|81||0|0|54817|T| +bios.asm|86||0|0|54820|F|BIOS.setdma_f +bios.asm|86||0|0|54820|L|BIOS,setdma_f,,+used +bios.asm|87||0|0|54820|T| +bios.asm|88||0|0|54823|F|BIOS.read_f +bios.asm|88||0|0|54823|L|BIOS,read_f,,+used +bios.asm|89||0|0|54823|T| +bios.asm|90||0|0|54826|F|BIOS.write_f +bios.asm|90||0|0|54826|L|BIOS,write_f,,+used +bios.asm|91||0|0|54826|T| +bios.asm|92||0|0|54829|F|BIOS.listst_f +bios.asm|92||0|0|54829|L|BIOS,listst_f, +bios.asm|93||0|0|54829|T| +bios.asm|94||0|0|54832|F|BIOS.sectran_f +bios.asm|94||0|0|54832|L|BIOS,sectran_f,,+used +bios.asm|95||0|0|54832|T| +bios.asm|100||0|0|54835|T| +bios.asm|101||0|0|54838|T| +bios.asm|106||0|0|54841|F|BIOS.tape_read_f +bios.asm|106||0|0|54841|L|BIOS,tape_read_f, +bios.asm|107||0|0|54841|T| +bios.asm|112||0|0|54844|F|BIOS.tape_write_f +bios.asm|112||0|0|54844|L|BIOS,tape_write_f,,+used +bios.asm|113||0|0|54844|T| +bios.asm|118||0|0|54847|F|BIOS.tape_wait_f +bios.asm|118||0|0|54847|L|BIOS,tape_wait_f, +bios.asm|119||0|0|54847|T| +bios.asm|121||0|0|54850|T| +bios.asm|123||0|0|54853|F|BIOS.disk_a_size +bios.asm|123||0|0|54853|L|BIOS,disk_a_size,,+used +bios.asm|124||0|0|54855|F|BIOS.disk_b_size +bios.asm|124||0|0|54855|L|BIOS,disk_b_size,,+used +bios.asm|125||0|0|54857|F|BIOS.disk_c_size +bios.asm|125||0|0|54857|L|BIOS,disk_c_size,,+used +bios.asm|126||0|0|54859|F|BIOS.disk_b_tracks +bios.asm|126||0|0|54859|L|BIOS,disk_b_tracks, +bios.asm|127||0|0|54860|F|BIOS.disk_c_tracks +bios.asm|127||0|0|54860|L|BIOS,disk_c_tracks,,+used +bios.asm|132||0|0|54861|F|BIOS.bios_boot +bios.asm|132||0|0|54861|L|BIOS,bios_boot,,+used +bios.asm|133||0|0|54861|T| +bios.asm|134||0|0|54864|T| +bios.asm|135||0|0|54867|T| +bios.asm|136||0|0|54868|T| +bios.asm|137||0|0|54869|T| +bios.asm|138||0|0|54870|T| +bios.asm|141||0|0|54873|T| +bios.asm|142||0|0|54876|T| +bios.asm|143||0|0|54879|T| +bios.asm|144||0|0|54880|T| +bios.asm|145||0|0|54881|T| +bios.asm|146||0|0|54882|T| +bios.asm|150||0|0|54885|T| +bios.asm|151||0|0|54888|T| +bios.asm|152||0|0|54890|F|BIOS.bios_boot.init_dma_buff +bios.asm|152||0|0|54890|L|BIOS,bios_boot,init_dma_buff,+used +bios.asm|153||0|0|54890|T| +bios.asm|154||0|0|54892|T| +bios.asm|155||0|0|54893|T| +bios.asm|156||0|0|54894|T| +bios.asm|159||0|0|54897|T| +bios.asm|160||0|0|54900|T| +bios.asm|161||0|0|54903|T| +bios.asm|163||0|0|54905|F|BIOS.bios_boot.init_ram_dsk +bios.asm|163||0|0|54905|L|BIOS,bios_boot,init_ram_dsk,+used +bios.asm|164||0|0|54905|T| +bios.asm|165||0|0|54906|T| +bios.asm|166||0|0|54909|T| +bios.asm|167||0|0|54910|T| +bios.asm|168||0|0|54911|T| +bios.asm|169||0|0|54912|T| +bios.asm|172||0|0|54915|T| +bios.asm|173||0|0|54916|T| +bios.asm|176||0|0|54919|T| +bios.asm|178||0|0|54922|F|BIOS.bios_signon +bios.asm|178||0|0|54922|L|BIOS,bios_signon,,+used +bios.asm|179||0|0|54922|T| +bios.asm|181||0|0|54925|T| +bios.asm|182||0|0|54928|T| +bios.asm|183||0|0|54931|T| +bios.asm|189||0|0|54934|F|BIOS.bios_init_ilv +bios.asm|189||0|0|54934|L|BIOS,bios_init_ilv,,+used +bios.asm|190||0|0|54934|T| +bios.asm|191||0|0|54937|T| +bios.asm|192||0|0|54940|T| +bios.asm|193||0|0|54942|T| +bios.asm|194||0|0|54945|T| +bios.asm|195||0|0|54948|T| +bios.asm|196||0|0|54951|T| +bios.asm|202||0|0|54952|F|BIOS.bios_wboot +bios.asm|202||0|0|54952|L|BIOS,bios_wboot,,+used +bios.asm|204||0|0|54952|T| +bios.asm|205||0|0|54955|T| +bios.asm|206||0|0|54958|T| +bios.asm|207||0|0|54959|T| +bios.asm|208||0|0|54960|T| +bios.asm|209||0|0|54961|T| +bios.asm|210||0|0|54964|T| +bios.asm|213||0|0|54967|T| +bios.asm|214||0|0|54970|T| +bios.asm|215||0|0|54973|T| +bios.asm|216||0|0|54976|F|BIOS.bios_wboot.move_ccp +bios.asm|216||0|0|54976|L|BIOS,bios_wboot,move_ccp,+used +bios.asm|217||0|0|54976|T| +bios.asm|218||0|0|54977|T| +bios.asm|219||0|0|54978|T| +bios.asm|220||0|0|54979|T| +bios.asm|221||0|0|54980|T| +bios.asm|222||0|0|54981|T| +bios.asm|223||0|0|54982|T| +bios.asm|224||0|0|54983|T| +bios.asm|227||0|0|54986|T| +bios.asm|228||0|0|54989|T| +bios.asm|230||0|0|54992|F|BIOS.bios_wboot.clr_cpm_vars +bios.asm|230||0|0|54992|L|BIOS,bios_wboot,clr_cpm_vars,+used +bios.asm|231||0|0|54992|T| +bios.asm|232||0|0|54994|T| +bios.asm|233||0|0|54995|T| +bios.asm|234||0|0|54996|T| +bios.asm|235||0|0|54997|T| +bios.asm|236||0|0|54998|T| +bios.asm|238||0|0|55001|T| +bios.asm|239||0|0|55003|T| +bios.asm|240||0|0|55006|T| +bios.asm|241||0|0|55008|T| +bios.asm|244||0|0|55011|T| +bios.asm|245||0|0|55014|T| +bios.asm|246||0|0|55017|T| +bios.asm|248||0|0|55020|F|BIOS.bios_wboot.move_dph +bios.asm|248||0|0|55020|L|BIOS,bios_wboot,move_dph,+used +bios.asm|249||0|0|55020|T| +bios.asm|250||0|0|55021|T| +bios.asm|251||0|0|55022|T| +bios.asm|252||0|0|55023|T| +bios.asm|253||0|0|55024|T| +bios.asm|254||0|0|55025|T| +bios.asm|255||0|0|55026|T| +bios.asm|256||0|0|55027|T| +bios.asm|258||0|0|55030|T| +bios.asm|259||0|0|55033|T| +bios.asm|262||0|0|55036|T| +bios.asm|263||0|0|55038|T| +bios.asm|264||0|0|55041|T| +bios.asm|265||0|0|55044|T| +bios.asm|268||0|0|55047|T| +bios.asm|269||0|0|55050|T| +bios.asm|270||0|0|55053|T| +bios.asm|273||0|0|55056|T| +bios.asm|274||0|0|55059|T| +bios.asm|275||0|0|55061|T| +bios.asm|276||0|0|55064|T| +bios.asm|277||0|0|55067|T| +bios.asm|278||0|0|55068|T| +bios.asm|279||0|0|55071|T| +bios.asm|280||0|0|55074|F|BIOS.bios_wboot.drv_a_192 +bios.asm|280||0|0|55074|L|BIOS,bios_wboot,drv_a_192,+used +bios.asm|281||0|0|55074|T| +bios.asm|284||0|0|55077|T| +bios.asm|285||0|0|55080|T| +bios.asm|286||0|0|55082|T| +bios.asm|287||0|0|55085|T| +bios.asm|288||0|0|55088|T| +bios.asm|289||0|0|55090|T| +bios.asm|290||0|0|55093|T| +bios.asm|291||0|0|55096|F|BIOS.bios_wboot.drv_b_360 +bios.asm|291||0|0|55096|L|BIOS,bios_wboot,drv_b_360,+used +bios.asm|292||0|0|55096|T| +bios.asm|295||0|0|55099|T| +bios.asm|296||0|0|55102|T| +bios.asm|297||0|0|55104|T| +bios.asm|298||0|0|55107|T| +bios.asm|299||0|0|55109|T| +bios.asm|300||0|0|55112|T| +bios.asm|302||0|0|55115|T| +bios.asm|303||0|0|55118|T| +bios.asm|304||0|0|55119|T| +bios.asm|306||0|0|55122|T| +bios.asm|307||0|0|55125|T| +bios.asm|308||0|0|55128|F|BIOS.bios_wboot.drv_c_720 +bios.asm|308||0|0|55128|L|BIOS,bios_wboot,drv_c_720,+used +bios.asm|309||0|0|55128|T| +bios.asm|311||0|0|55131|T| +bios.asm|312||0|0|55134|T| +bios.asm|313||0|0|55135|T| +bios.asm|315||0|0|55138|T| +bios.asm|316||0|0|55141|F|BIOS.bios_wboot.drv_c_mov +bios.asm|316||0|0|55141|L|BIOS,bios_wboot,drv_c_mov,+used +bios.asm|317||0|0|55141|T| +bios.asm|318||0|0|55144|T| +bios.asm|319||0|0|55145|T| +bios.asm|320||0|0|55148|T| +bios.asm|321||0|0|55151|T| +bios.asm|322||0|0|55154|T| +bios.asm|324||0|0|55155|T| +bios.asm|329||0|0|55158|F|BIOS.mov_dlhe_c +bios.asm|329||0|0|55158|L|BIOS,mov_dlhe_c,,+used +bios.asm|330||0|0|55158|T| +bios.asm|331||0|0|55159|T| +bios.asm|332||0|0|55160|T| +bios.asm|333||0|0|55161|T| +bios.asm|334||0|0|55162|T| +bios.asm|335||0|0|55163|T| +bios.asm|336||0|0|55166|T| +bios.asm|338||0|0|55167|F|BIOS.list_st +bios.asm|338||0|0|55167|L|BIOS,list_st,,+used +bios.asm|339||0|0|55167|T| +bios.asm|340||0|0|55168|T| +bios.asm|348||0|0|55169|F|BIOS.sel_disk +bios.asm|348||0|0|55169|L|BIOS,sel_disk,,+used +bios.asm|349||0|0|55169|T| +bios.asm|350||0|0|55172|T| +bios.asm|351||0|0|55173|T| +bios.asm|352||0|0|55175|T| +bios.asm|354||0|0|55176|T| +bios.asm|355||0|0|55179|T| +bios.asm|356||0|0|55180|T| +bios.asm|357||0|0|55183|T| +bios.asm|358||0|0|55184|T| +bios.asm|359||0|0|55186|T| +bios.asm|361||0|0|55189|T| +bios.asm|362||0|0|55192|T| +bios.asm|364||0|0|55195|F|BIOS.sel_disk.get_dph_addr +bios.asm|364||0|0|55195|L|BIOS,sel_disk,get_dph_addr,+used +bios.asm|365||0|0|55195|T| +bios.asm|366||0|0|55196|T| +bios.asm|367||0|0|55198|T| +bios.asm|368||0|0|55199|T| +bios.asm|369||0|0|55200|T| +bios.asm|370||0|0|55201|T| +bios.asm|371||0|0|55202|T| +bios.asm|372||0|0|55205|T| +bios.asm|373||0|0|55206|T| +bios.asm|378||0|0|55207|F|BIOS.home +bios.asm|378||0|0|55207|L|BIOS,home,,+used +bios.asm|379||0|0|55207|T| +bios.asm|380||0|0|55210|T| +bios.asm|381||0|0|55211|T| +bios.asm|382||0|0|55214|T| +bios.asm|383||0|0|55217|T| +bios.asm|384||0|0|55218|T| +bios.asm|385||0|0|55221|T| +bios.asm|387||0|0|55224|F|BIOS.home.is_default +bios.asm|387||0|0|55224|L|BIOS,home,is_default,+used +bios.asm|388||0|0|55224|T| +bios.asm|393||0|0|55226|F|BIOS.set_trk +bios.asm|393||0|0|55226|L|BIOS,set_trk,,+used +bios.asm|394||0|0|55226|T| +bios.asm|395||0|0|55229|T| +bios.asm|396||0|0|55230|T| +bios.asm|401||0|0|55231|F|BIOS.set_sec +bios.asm|401||0|0|55231|L|BIOS,set_sec,,+used +bios.asm|402||0|0|55231|T| +bios.asm|403||0|0|55234|T| +bios.asm|404||0|0|55235|T| +bios.asm|409||0|0|55236|F|BIOS.set_dma +bios.asm|409||0|0|55236|L|BIOS,set_dma,,+used +bios.asm|410||0|0|55236|T| +bios.asm|411||0|0|55237|T| +bios.asm|412||0|0|55238|T| +bios.asm|413||0|0|55241|T| +bios.asm|415||0|0|55242|F|BIOS.sec_tran +bios.asm|415||0|0|55242|L|BIOS,sec_tran,,+used +bios.asm|416||0|0|55242|T| +bios.asm|417||0|0|55243|T| +bios.asm|418||0|0|55244|T| +bios.asm|423||0|0|55245|F|BIOS.read +bios.asm|423||0|0|55245|L|BIOS,read,,+used +bios.asm|424||0|0|55245|T| +bios.asm|425||0|0|55248|T| +bios.asm|426||0|0|55249|T| +bios.asm|427||0|0|55252|T| +bios.asm|428||0|0|55255|T| +bios.asm|429||0|0|55258|T| +bios.asm|430||0|0|55259|T| +bios.asm|435||0|0|55260|F|BIOS.write +bios.asm|435||0|0|55260|L|BIOS,write,,+used +bios.asm|436||0|0|55260|T| +bios.asm|437||0|0|55263|T| +bios.asm|438||0|0|55264|T| +bios.asm|439||0|0|55267|T| +bios.asm|440||0|0|55270|T| +bios.asm|441||0|0|55273|T| +bios.asm|442||0|0|55274|T| +bios.asm|447||0|0|55275|F|BIOS.ram_disk_calc_addr +bios.asm|447||0|0|55275|L|BIOS,ram_disk_calc_addr,,+used +bios.asm|448||0|0|55275|T| +bios.asm|450||0|0|55278|T| +bios.asm|451||0|0|55279|T| +bios.asm|452||0|0|55281|T| +bios.asm|453||0|0|55282|T| +bios.asm|454||0|0|55283|T| +bios.asm|455||0|0|55284|T| +bios.asm|457||0|0|55285|T| +bios.asm|458||0|0|55286|T| +bios.asm|459||0|0|55289|T| +bios.asm|460||0|0|55290|T| +bios.asm|461||0|0|55292|T| +bios.asm|462||0|0|55293|T| +bios.asm|464||0|0|55294|T| +bios.asm|465||0|0|55297|T| +bios.asm|467||0|0|55298|F|BIOS.read_phys +bios.asm|467||0|0|55298|L|BIOS,read_phys,,+used +bios.asm|468||0|0|55298|T| +bios.asm|469||0|0|55301|T| +bios.asm|471||0|0|55302|F|BIOS.write_phys +bios.asm|471||0|0|55302|L|BIOS,write_phys,,+used +bios.asm|472||0|0|55302|T| +bios.asm|473||0|0|55305|T| +bios.asm|475||0|0|55306|F|BIOS.read_phys_op +bios.asm|475||0|0|55306|L|BIOS,read_phys_op,,+used +bios.asm|476||0|0|55306|T| +bios.asm|478||0|0|55307|T| +bios.asm|479||0|0|55310|T| +bios.asm|480||0|0|55312|T| +bios.asm|481||0|0|55315|T| +bios.asm|482||0|0|55318|T| +bios.asm|483||0|0|55320|T| +bios.asm|484||0|0|55323|T| +bios.asm|486||0|0|55326|F|BIOS.write_phys_op +bios.asm|486||0|0|55326|L|BIOS,write_phys_op,,+used +bios.asm|487||0|0|55326|T| +bios.asm|488||0|0|55327|T| +bios.asm|489||0|0|55330|T| +bios.asm|490||0|0|55331|T| +bios.asm|491||0|0|55334|T| +bios.asm|492||0|0|55336|T| +bios.asm|493||0|0|55339|T| +bios.asm|494||0|0|55341|T| +bios.asm|495||0|0|55344|T| +bios.asm|496||0|0|55347|T| +bios.asm|497||0|0|55350|T| +bios.asm|498||0|0|55353|T| +bios.asm|499||0|0|55356|T| +bios.asm|500||0|0|55359|T| +bios.asm|501||0|0|55362|F|BIOS.write_phys_op.mode_ne_2 +bios.asm|501||0|0|55362|L|BIOS,write_phys_op,mode_ne_2,+used +bios.asm|502||0|0|55362|T| +bios.asm|503||0|0|55365|T| +bios.asm|504||0|0|55366|T| +bios.asm|505||0|0|55369|T| +bios.asm|506||0|0|55370|T| +bios.asm|507||0|0|55373|T| +bios.asm|508||0|0|55376|T| +bios.asm|509||0|0|55379|T| +bios.asm|510||0|0|55380|T| +bios.asm|511||0|0|55383|T| +bios.asm|512||0|0|55386|T| +bios.asm|513||0|0|55389|T| +bios.asm|514||0|0|55390|T| +bios.asm|515||0|0|55393|T| +bios.asm|516||0|0|55396|T| +bios.asm|517||0|0|55399|T| +bios.asm|518||0|0|55400|T| +bios.asm|519||0|0|55403|T| +bios.asm|520||0|0|55404|T| +bios.asm|521||0|0|55405|T| +bios.asm|522||0|0|55407|T| +bios.asm|523||0|0|55410|T| +bios.asm|524||0|0|55412|T| +bios.asm|525||0|0|55415|T| +bios.asm|526||0|0|55416|T| +bios.asm|528||0|0|55419|F|BIOS.write_phys_op.no_inc_track +bios.asm|528||0|0|55419|L|BIOS,write_phys_op,no_inc_track,+used +bios.asm|529||0|0|55419|T| +bios.asm|530||0|0|55420|T| +bios.asm|531||0|0|55423|T| +bios.asm|534||0|0|55426|F|BIOS.slicer_read_write +bios.asm|534||0|0|55426|L|BIOS,slicer_read_write,,+used +bios.asm|535||0|0|55426|T| +bios.asm|536||0|0|55427|T| +bios.asm|537||0|0|55430|T| +bios.asm|538||0|0|55431|T| +bios.asm|541||0|0|55434|F|BIOS.base_read_write +bios.asm|541||0|0|55434|L|BIOS,base_read_write,,+used +bios.asm|542||0|0|55434|T| +bios.asm|543||0|0|55435|T| +bios.asm|544||0|0|55438|T| +bios.asm|545||0|0|55441|T| +bios.asm|546||0|0|55442|T| +bios.asm|547||0|0|55443|T| +bios.asm|548||0|0|55444|T| +bios.asm|549||0|0|55445|T| +bios.asm|550||0|0|55448|T| +bios.asm|551||0|0|55451|T| +bios.asm|552||0|0|55452|T| +bios.asm|553||0|0|55454|T| +bios.asm|554||0|0|55455|T| +bios.asm|555||0|0|55458|T| +bios.asm|556||0|0|55461|T| +bios.asm|557||0|0|55464|T| +bios.asm|558||0|0|55465|T| +bios.asm|559||0|0|55468|T| +bios.asm|560||0|0|55471|T| +bios.asm|561||0|0|55474|T| +bios.asm|562||0|0|55475|T| +bios.asm|563||0|0|55478|T| +bios.asm|564||0|0|55481|T| +bios.asm|565||0|0|55484|T| +bios.asm|566||0|0|55485|T| +bios.asm|567||0|0|55488|F|BIOS.base_read_write.pos_diff +bios.asm|567||0|0|55488|L|BIOS,base_read_write,pos_diff,+used +bios.asm|568||0|0|55488|T| +bios.asm|569||0|0|55491|T| +bios.asm|570||0|0|55492|T| +bios.asm|571||0|0|55495|F|BIOS.base_read_write.no_data +bios.asm|571||0|0|55495|L|BIOS,base_read_write,no_data,+used +bios.asm|572||0|0|55495|T| +bios.asm|573||0|0|55498|T| +bios.asm|574||0|0|55501|T| +bios.asm|575||0|0|55504|T| +bios.asm|576||0|0|55507|T| +bios.asm|577||0|0|55510|T| +bios.asm|578||0|0|55513|T| +bios.asm|579||0|0|55516|T| +bios.asm|580||0|0|55517|T| +bios.asm|581||0|0|55520|T| +bios.asm|582||0|0|55521|T| +bios.asm|585||0|0|55524|F|BIOS.calc_sec_addr_in_bfr +bios.asm|585||0|0|55524|L|BIOS,calc_sec_addr_in_bfr,,+used +bios.asm|586||0|0|55524|T| +bios.asm|587||0|0|55527|T| +bios.asm|588||0|0|55529|T| +bios.asm|589||0|0|55530|T| +bios.asm|590||0|0|55532|T| +bios.asm|591||0|0|55533|T| +bios.asm|592||0|0|55534|T| +bios.asm|593||0|0|55535|T| +bios.asm|594||0|0|55536|T| +bios.asm|595||0|0|55537|T| +bios.asm|596||0|0|55538|T| +bios.asm|597||0|0|55539|T| +bios.asm|598||0|0|55542|T| +bios.asm|599||0|0|55543|T| +bios.asm|600||0|0|55544|T| +bios.asm|601||0|0|55547|T| +bios.asm|602||0|0|55549|T| +bios.asm|603||0|0|55552|T| +bios.asm|604||0|0|55553|T| +bios.asm|605||0|0|55556|T| +bios.asm|606||0|0|55558|T| +bios.asm|607||0|0|55561|T| +bios.asm|608||0|0|55562|F|BIOS.calc_sec_addr_in_bfr.no_save +bios.asm|608||0|0|55562|L|BIOS,calc_sec_addr_in_bfr,no_save,+used +bios.asm|609||0|0|55562|T| +bios.asm|610||0|0|55563|T| +bios.asm|611||0|0|55564|T| +bios.asm|612||0|0|55565|T| +bios.asm|613||0|0|55566|T| +bios.asm|614||0|0|55567|T| +bios.asm|615||0|0|55570|T| +bios.asm|616||0|0|55573|T| +bios.asm|617||0|0|55575|T| +bios.asm|618||0|0|55578|T| +bios.asm|619||0|0|55579|T| +bios.asm|620||0|0|55580|T| +bios.asm|621||0|0|55581|T| +bios.asm|622||0|0|55582|T| +bios.asm|623||0|0|55585|T| +bios.asm|624||0|0|55588|T| +bios.asm|625||0|0|55591|T| +bios.asm|628||0|0|55592|F|BIOS.slicer_save_buffer +bios.asm|628||0|0|55592|L|BIOS,slicer_save_buffer,,+used +bios.asm|629||0|0|55592|T| +bios.asm|630||0|0|55595|T| +bios.asm|631||0|0|55597|T| +bios.asm|632||0|0|55600|T| +bios.asm|633||0|0|55603|T| +bios.asm|636||0|0|55604|F|BIOS.slicer_read_buffer +bios.asm|636||0|0|55604|L|BIOS,slicer_read_buffer,,+used +bios.asm|637||0|0|55604|T| +bios.asm|638||0|0|55607|T| +bios.asm|639||0|0|55609|T| +bios.asm|640||0|0|55612|T| +bios.asm|641||0|0|55615|T| +bios.asm|644||0|0|55616|F|BIOS.slicer_get_floppy_args +bios.asm|644||0|0|55616|L|BIOS,slicer_get_floppy_args,,+used +bios.asm|645||0|0|55616|T| +bios.asm|646||0|0|55619|T| +bios.asm|647||0|0|55622|T| +bios.asm|648||0|0|55623|T| +bios.asm|649||0|0|55626|T| +bios.asm|650||0|0|55629|F|BIOS.slicer_get_floppy_args.non_interleave +bios.asm|650||0|0|55629|L|BIOS,slicer_get_floppy_args,non_interleave,+used +bios.asm|651||0|0|55629|T| +bios.asm|652||0|0|55632|T| +bios.asm|653||0|0|55633|T| +bios.asm|654||0|0|55634|T| +bios.asm|655||0|0|55635|T| +bios.asm|656||0|0|55638|T| +bios.asm|657||0|0|55639|T| +bios.asm|658||0|0|55642|T| +bios.asm|659||0|0|55645|T| +bios.asm|666||0|0|55646|F|BIOS.print_strz +bios.asm|666||0|0|55646|L|BIOS,print_strz,,+used +bios.asm|667||0|0|55646|T| +bios.asm|668||0|0|55647|T| +bios.asm|669||0|0|55648|T| +bios.asm|670||0|0|55649|T| +bios.asm|671||0|0|55650|T| +bios.asm|672||0|0|55651|T| +bios.asm|673||0|0|55654|T| +bios.asm|674||0|0|55655|T| +bios.asm|675||0|0|55656|T| +bios.asm|677||0|0|55659|F|BIOS.msg_hello +bios.asm|677||0|0|55659|L|BIOS,msg_hello,,+used +bios.asm|718||0|0|55727|F|BIOS.dpb_ram +bios.asm|718||0|0|55727|L|BIOS,dpb_ram,,+used +bios.asm|730||0|0|55742|F|BIOS.dpb_empty +bios.asm|730||0|0|55742|L|BIOS,dpb_empty,,+used +bios.asm|734||0|0|55757|F|BIOS.dpb_flop_720k +bios.asm|734||0|0|55757|L|BIOS,dpb_flop_720k,,+used +bios.asm|747||0|0|55772|F|BIOS.dpb_flop_360k +bios.asm|747||0|0|55772|L|BIOS,dpb_flop_360k,,+used +bios.asm|759||0|0|55787|F|BIOS.bios_ini_vals +bios.asm|759||0|0|55787|L|BIOS,bios_ini_vals,,+used +bios.asm|766||0|0|55800|F|BIOS.dph_disk_a +bios.asm|766||0|0|55800|L|BIOS,dph_disk_a,,+used +bios.asm|775||0|0|55816|F|BIOS.dph_disk_b +bios.asm|775||0|0|55816|L|BIOS,dph_disk_b, +bios.asm|784||0|0|55832|F|BIOS.dph_disk_c +bios.asm|784||0|0|55832|L|BIOS,dph_disk_c, +bios.asm|792||0|0|55848|F|BIOS.res_data +bios.asm|792||0|0|55848|L|BIOS,res_data,,+used +bios.asm|795||0|-1|55857|D|BIOS.DPB_END +bios.asm|795||0|-1|55857|L|BIOS,DPB_END,,+equ,+used +bios.asm|802||0|-1|55859|D|BIOS.LAST +bios.asm|802||0|-1|55859|L|BIOS,LAST,,+equ,+used +bios.asm|803||0|-1|1075|D|BIOS.CODE_SIZE +bios.asm|803||0|-1|1075|L|BIOS,CODE_SIZE,,+equ,+used +bios.asm|804||0|-1|205|D|BIOS.FILL_SIZE +bios.asm|804||0|-1|205|L|BIOS,FILL_SIZE,,+equ,+used +bios.asm|825||0|0|55859|F|BIOS.FILLER +bios.asm|825||0|0|55859|L|BIOS,FILLER, +bios.asm|828||0|-1|56064|L|BIOS,,,+endmod +ccp_rom.asm|16||0|-1|56064|L|CCP_ROM,,,+module +ccp_rom.asm|20||0|0|56064|F|ccp_entry +ccp_rom.asm|20||0|0|56064|L|,ccp_entry,,+used +ccp_rom.asm|21||0|0|56064|T| +ccp_rom.asm|22||0|0|56067|T| +ccp_rom.asm|23||0|0|56068|T| +ccp_rom.asm|24||0|0|56071|T| +ccp_rom.asm|26||0|0|56074|T| +ccp_rom.asm|27||0|0|56077|T| +ccp_rom.asm|28||0|0|56080|T| +ccp_rom.asm|29||0|0|56081|T| +ccp_rom.asm|30||0|0|56083|T| +ccp_rom.asm|31||0|0|56084|T| +ccp_rom.asm|32||0|0|56085|T| +ccp_rom.asm|33||0|0|56086|T| +ccp_rom.asm|34||0|0|56087|T| +ccp_rom.asm|35||0|0|56088|T| +ccp_rom.asm|36||0|0|56089|T| +ccp_rom.asm|38||0|0|56090|F|CCP_ROM.ccp_commands_str +ccp_rom.asm|38||0|0|56090|L|CCP_ROM,ccp_commands_str,,+used +ccp_rom.asm|44||0|0|56105|F|CCP_ROM.get_cmd_index +ccp_rom.asm|44||0|0|56105|L|CCP_ROM,get_cmd_index,,+used +ccp_rom.asm|45||0|0|56105|T| +ccp_rom.asm|46||0|0|56108|T| +ccp_rom.asm|47||0|0|56110|F|CCP_ROM.get_cmd_index.cmd_next +ccp_rom.asm|47||0|0|56110|L|CCP_ROM,get_cmd_index,cmd_next,+used +ccp_rom.asm|48||0|0|56110|T| +ccp_rom.asm|49||0|0|56111|T| +ccp_rom.asm|50||0|0|56113|T| +ccp_rom.asm|51||0|0|56114|T| +ccp_rom.asm|52||0|0|56117|T| +ccp_rom.asm|53||0|0|56119|F|CCP_ROM.get_cmd_index.cmp_nxt +ccp_rom.asm|53||0|0|56119|L|CCP_ROM,get_cmd_index,cmp_nxt,+used +ccp_rom.asm|54||0|0|56119|T| +ccp_rom.asm|55||0|0|56120|T| +ccp_rom.asm|56||0|0|56121|T| +ccp_rom.asm|57||0|0|56124|T| +ccp_rom.asm|58||0|0|56125|T| +ccp_rom.asm|59||0|0|56126|T| +ccp_rom.asm|60||0|0|56127|T| +ccp_rom.asm|61||0|0|56130|T| +ccp_rom.asm|62||0|0|56131|T| +ccp_rom.asm|63||0|0|56133|T| +ccp_rom.asm|64||0|0|56136|T| +ccp_rom.asm|65||0|0|56137|T| +ccp_rom.asm|66||0|0|56138|F|CCP_ROM.get_cmd_index.no_eq +ccp_rom.asm|66||0|0|56138|L|CCP_ROM,get_cmd_index,no_eq,+used +ccp_rom.asm|67||0|0|56138|T| +ccp_rom.asm|68||0|0|56139|T| +ccp_rom.asm|69||0|0|56140|T| +ccp_rom.asm|70||0|0|56143|F|CCP_ROM.get_cmd_index.inc_next +ccp_rom.asm|70||0|0|56143|L|CCP_ROM,get_cmd_index,inc_next,+used +ccp_rom.asm|71||0|0|56143|T| +ccp_rom.asm|72||0|0|56144|T| +ccp_rom.asm|77||0|0|56147|F|CCP_ROM.ccp_commands +ccp_rom.asm|77||0|0|56147|L|CCP_ROM,ccp_commands,,+used +ccp_rom.asm|84||0|0|56155|F|CCP_ROM.ccp_ret +ccp_rom.asm|84||0|0|56155|L|CCP_ROM,ccp_ret,,+used +ccp_rom.asm|85||0|0|56155|T| +ccp_rom.asm|86||0|0|56158|T| +ccp_rom.asm|87||0|0|56159|T| +ccp_rom.asm|94||0|0|56162|F|CCP_ROM.ccp_dir +ccp_rom.asm|94||0|0|56162|L|CCP_ROM,ccp_dir,,+used +ccp_rom.asm|95||0|0|56162|T| +ccp_rom.asm|96||0|0|56165|T| +ccp_rom.asm|98||0|0|56168|T| +ccp_rom.asm|99||0|0|56171|T| +ccp_rom.asm|100||0|0|56172|T| +ccp_rom.asm|101||0|0|56174|T| +ccp_rom.asm|104||0|0|56177|T| +ccp_rom.asm|105||0|0|56179|F|CCP_ROM.ccp_dir.fill_wildcard +ccp_rom.asm|105||0|0|56179|L|CCP_ROM,ccp_dir,fill_wildcard,+used +ccp_rom.asm|106||0|0|56179|T| +ccp_rom.asm|107||0|0|56181|T| +ccp_rom.asm|108||0|0|56182|T| +ccp_rom.asm|109||0|0|56183|T| +ccp_rom.asm|112||0|0|56186|F|CCP_ROM.ccp_dir.has_par +ccp_rom.asm|112||0|0|56186|L|CCP_ROM,ccp_dir,has_par,+used +ccp_rom.asm|113||0|0|56186|T| +ccp_rom.asm|114||0|0|56189|T| +ccp_rom.asm|116||0|0|56192|T| +ccp_rom.asm|117||0|0|56195|T| +ccp_rom.asm|119||0|0|56198|F|CCP_ROM.ccp_dir.f_found +ccp_rom.asm|119||0|0|56198|L|CCP_ROM,ccp_dir,f_found,+used +ccp_rom.asm|120||0|0|56198|T| +ccp_rom.asm|121||0|0|56201|T| +ccp_rom.asm|122||0|0|56204|T| +ccp_rom.asm|123||0|0|56207|T| +ccp_rom.asm|125||0|0|56209|F|CCP_ROM.ccp_dir.do_next_direntry +ccp_rom.asm|125||0|0|56209|L|CCP_ROM,ccp_dir,do_next_direntry,+used +ccp_rom.asm|126||0|0|56209|T| +ccp_rom.asm|127||0|0|56210|T| +ccp_rom.asm|128||0|0|56213|T| +ccp_rom.asm|129||0|0|56214|T| +ccp_rom.asm|132||0|0|56215|F|CCP_ROM.ccp_dir.find_file_e +ccp_rom.asm|132||0|0|56215|L|CCP_ROM,ccp_dir,find_file_e,+used +ccp_rom.asm|133||0|0|56215|T| +ccp_rom.asm|134||0|0|56216|T| +ccp_rom.asm|135||0|0|56219|T| +ccp_rom.asm|136||0|0|56220|T| +ccp_rom.asm|137||0|0|56223|T| +ccp_rom.asm|138||0|0|56224|T| +ccp_rom.asm|139||0|0|56227|T| +ccp_rom.asm|141||0|0|56230|F|CCP_ROM.ccp_dir.file_out_next +ccp_rom.asm|141||0|0|56230|L|CCP_ROM,ccp_dir,file_out_next,+used +ccp_rom.asm|142||0|0|56230|T| +ccp_rom.asm|145||0|0|56233|T| +ccp_rom.asm|146||0|0|56234|T| +ccp_rom.asm|147||0|0|56235|T| +ccp_rom.asm|148||0|0|56236|T| +ccp_rom.asm|149||0|0|56238|T| +ccp_rom.asm|150||0|0|56239|T| +ccp_rom.asm|151||0|0|56240|T| +ccp_rom.asm|152||0|0|56243|T| +ccp_rom.asm|153||0|0|56246|T| +ccp_rom.asm|154||0|0|56247|T| +ccp_rom.asm|155||0|0|56250|T| +ccp_rom.asm|156||0|0|56251|T| +ccp_rom.asm|157||0|0|56253|T| +ccp_rom.asm|158||0|0|56256|T| +ccp_rom.asm|159||0|0|56257|T| +ccp_rom.asm|160||0|0|56258|T| +ccp_rom.asm|163||0|0|56259|T| +ccp_rom.asm|164||0|0|56261|F|CCP_ROM.ccp_dir.copy_next +ccp_rom.asm|164||0|0|56261|L|CCP_ROM,ccp_dir,copy_next,+used +ccp_rom.asm|165||0|0|56261|T| +ccp_rom.asm|166||0|0|56262|T| +ccp_rom.asm|167||0|0|56263|T| +ccp_rom.asm|168||0|0|56264|T| +ccp_rom.asm|169||0|0|56267|T| +ccp_rom.asm|170||0|0|56268|T| +ccp_rom.asm|171||0|0|56269|T| +ccp_rom.asm|172||0|0|56270|T| +ccp_rom.asm|173||0|0|56271|T| +ccp_rom.asm|174||0|0|56273|T| +ccp_rom.asm|176||0|0|56276|F|CCP_ROM.ccp_dir.zero_up_36 +ccp_rom.asm|176||0|0|56276|L|CCP_ROM,ccp_dir,zero_up_36,+used +ccp_rom.asm|177||0|0|56276|T| +ccp_rom.asm|178||0|0|56277|T| +ccp_rom.asm|179||0|0|56278|T| +ccp_rom.asm|180||0|0|56279|T| +ccp_rom.asm|181||0|0|56280|T| +ccp_rom.asm|182||0|0|56282|T| +ccp_rom.asm|185||0|0|56285|T| +ccp_rom.asm|186||0|0|56288|T| +ccp_rom.asm|187||0|0|56291|T| +ccp_rom.asm|190||0|0|56294|T| +ccp_rom.asm|191||0|0|56297|T| +ccp_rom.asm|192||0|0|56298|T| +ccp_rom.asm|193||0|0|56301|T| +ccp_rom.asm|194||0|0|56303|T| +ccp_rom.asm|196||0|0|56306|F|CCP_ROM.ccp_dir.no_dsk_a0 +ccp_rom.asm|196||0|0|56306|L|CCP_ROM,ccp_dir,no_dsk_a0,+used +ccp_rom.asm|197||0|0|56306|T| +ccp_rom.asm|198||0|0|56308|F|CCP_ROM.ccp_dir.dsk_a0 +ccp_rom.asm|198||0|0|56308|L|CCP_ROM,ccp_dir,dsk_a0,+used +ccp_rom.asm|199||0|0|56308|T| +ccp_rom.asm|202||0|0|56309|F|CCP_ROM.ccp_dir.mul_to_dsk_blk +ccp_rom.asm|202||0|0|56309|L|CCP_ROM,ccp_dir,mul_to_dsk_blk,+used +ccp_rom.asm|203||0|0|56309|T| +ccp_rom.asm|204||0|0|56310|T| +ccp_rom.asm|205||0|0|56311|T| +ccp_rom.asm|206||0|0|56312|T| +ccp_rom.asm|207||0|0|56313|T| +ccp_rom.asm|208||0|0|56314|T| +ccp_rom.asm|209||0|0|56315|T| +ccp_rom.asm|210||0|0|56316|T| +ccp_rom.asm|211||0|0|56317|T| +ccp_rom.asm|213||0|0|56320|T| +ccp_rom.asm|214||0|0|56323|T| +ccp_rom.asm|215||0|0|56324|T| +ccp_rom.asm|216||0|0|56327|T| +ccp_rom.asm|217||0|0|56329|T| +ccp_rom.asm|218||0|0|56332|F|CCP_ROM.ccp_dir.no_dsk_a1 +ccp_rom.asm|218||0|0|56332|L|CCP_ROM,ccp_dir,no_dsk_a1,+used +ccp_rom.asm|219||0|0|56332|T| +ccp_rom.asm|220||0|0|56334|F|CCP_ROM.ccp_dir.ds_skip1 +ccp_rom.asm|220||0|0|56334|L|CCP_ROM,ccp_dir,ds_skip1,+used +ccp_rom.asm|221||0|0|56334|T| +ccp_rom.asm|222||0|0|56335|T| +ccp_rom.asm|223||0|0|56338|T| +ccp_rom.asm|226||0|0|56339|F|CCP_ROM.ccp_dir.cvt_blk_kb +ccp_rom.asm|226||0|0|56339|L|CCP_ROM,ccp_dir,cvt_blk_kb,+used +ccp_rom.asm|227||0|0|56339|T| +ccp_rom.asm|228||0|0|56342|T| +ccp_rom.asm|229||0|0|56343|T| +ccp_rom.asm|230||0|0|56346|T| +ccp_rom.asm|233||0|0|56347|F|CCP_ROM.ccp_dir.ds_skip2 +ccp_rom.asm|233||0|0|56347|L|CCP_ROM,ccp_dir,ds_skip2,+used +ccp_rom.asm|234||0|0|56347|T| +ccp_rom.asm|235||0|0|56348|T| +ccp_rom.asm|236||0|0|56351|T| +ccp_rom.asm|237||0|0|56352|T| +ccp_rom.asm|240||0|0|56355|T| +ccp_rom.asm|241||0|0|56357|T| +ccp_rom.asm|242||0|0|56360|T| +ccp_rom.asm|243||0|0|56363|T| +ccp_rom.asm|244||0|0|56366|T| +ccp_rom.asm|245||0|0|56368|T| +ccp_rom.asm|246||0|0|56371|T| +ccp_rom.asm|247||0|0|56374|T| +ccp_rom.asm|248||0|0|56377|T| +ccp_rom.asm|249||0|0|56378|T| +ccp_rom.asm|250||0|0|56379|T| +ccp_rom.asm|252||0|0|56382|F|CCP_ROM.ccp_dir.file_e_found +ccp_rom.asm|252||0|0|56382|L|CCP_ROM,ccp_dir,file_e_found,+used +ccp_rom.asm|253||0|0|56382|T| +ccp_rom.asm|254||0|0|56383|T| +ccp_rom.asm|257||0|0|56386|T| +ccp_rom.asm|258||0|0|56389|T| +ccp_rom.asm|259||0|0|56392|T| +ccp_rom.asm|260||0|0|56393|T| +ccp_rom.asm|261||0|0|56396|T| +ccp_rom.asm|262||0|0|56399|T| +ccp_rom.asm|264||0|0|56402|F|CCP_ROM.ccp_dir.no_ram_dsk +ccp_rom.asm|264||0|0|56402|L|CCP_ROM,ccp_dir,no_ram_dsk,+used +ccp_rom.asm|265||0|0|56402|T| +ccp_rom.asm|266||0|0|56403|T| +ccp_rom.asm|267||0|0|56406|T| +ccp_rom.asm|269||0|0|56409|T| +ccp_rom.asm|270||0|0|56412|T| +ccp_rom.asm|271||0|0|56415|T| +ccp_rom.asm|272||0|0|56416|T| +ccp_rom.asm|274||0|0|56419|T| +ccp_rom.asm|275||0|0|56420|T| +ccp_rom.asm|276||0|0|56422|T| +ccp_rom.asm|277||0|0|56425|T| +ccp_rom.asm|278||0|0|56428|T| +ccp_rom.asm|279||0|0|56431|F|CCP_ROM.ccp_dir.d720 +ccp_rom.asm|279||0|0|56431|L|CCP_ROM,ccp_dir,d720,+used +ccp_rom.asm|280||0|0|56431|T| +ccp_rom.asm|283||0|0|56434|F|CCP_ROM.ccp_dir.calc_remanis_ds +ccp_rom.asm|283||0|0|56434|L|CCP_ROM,ccp_dir,calc_remanis_ds,+used +ccp_rom.asm|284||0|0|56434|T| +ccp_rom.asm|285||0|0|56435|T| +ccp_rom.asm|286||0|0|56438|T| +ccp_rom.asm|287||0|0|56439|T| +ccp_rom.asm|288||0|0|56440|T| +ccp_rom.asm|289||0|0|56441|T| +ccp_rom.asm|290||0|0|56442|T| +ccp_rom.asm|291||0|0|56443|T| +ccp_rom.asm|292||0|0|56444|T| +ccp_rom.asm|293||0|0|56447|T| +ccp_rom.asm|294||0|0|56449|T| +ccp_rom.asm|295||0|0|56452|T| +ccp_rom.asm|296||0|0|56455|T| +ccp_rom.asm|298||0|0|56458|F|CCP_ROM.msg_free_space +ccp_rom.asm|298||0|0|56458|L|CCP_ROM,msg_free_space,,+used +ccp_rom.asm|301||0|0|56474|F|CCP_ROM.ccp_cout_num +ccp_rom.asm|301||0|0|56474|L|CCP_ROM,ccp_cout_num,,+used +ccp_rom.asm|302||0|0|56474|T| +ccp_rom.asm|303||0|0|56475|T| +ccp_rom.asm|304||0|0|56477|T| +ccp_rom.asm|305||0|0|56480|T| +ccp_rom.asm|306||0|0|56482|T| +ccp_rom.asm|307||0|0|56485|T| +ccp_rom.asm|308||0|0|56488|T| +ccp_rom.asm|309||0|0|56491|T| +ccp_rom.asm|310||0|0|56494|T| +ccp_rom.asm|312||0|0|56495|F|CCP_ROM.ccp_cout_num.less_224 +ccp_rom.asm|312||0|0|56495|L|CCP_ROM,ccp_cout_num,less_224,+used +ccp_rom.asm|313||0|0|56495|T| +ccp_rom.asm|315||0|0|56498|T| +ccp_rom.asm|316||0|0|56499|T| +ccp_rom.asm|317||0|0|56500|T| +ccp_rom.asm|318||0|0|56503|T| +ccp_rom.asm|320||0|0|56505|F|CCP_ROM.ccp_cout_num.bc_rra +ccp_rom.asm|320||0|0|56505|L|CCP_ROM,ccp_cout_num,bc_rra,+used +ccp_rom.asm|321||0|0|56505|T| +ccp_rom.asm|322||0|0|56506|T| +ccp_rom.asm|324||0|0|56507|T| +ccp_rom.asm|325||0|0|56508|T| +ccp_rom.asm|326||0|0|56509|T| +ccp_rom.asm|327||0|0|56510|T| +ccp_rom.asm|328||0|0|56511|T| +ccp_rom.asm|329||0|0|56512|T| +ccp_rom.asm|330||0|0|56513|T| +ccp_rom.asm|331||0|0|56516|T| +ccp_rom.asm|332||0|0|56517|T| +ccp_rom.asm|333||0|0|56520|T| +ccp_rom.asm|335||0|0|56521|F|CCP_ROM.ccp_cout_num.bc_rra_ex +ccp_rom.asm|335||0|0|56521|L|CCP_ROM,ccp_cout_num,bc_rra_ex,+used +ccp_rom.asm|336||0|0|56521|T| +ccp_rom.asm|337||0|0|56522|T| +ccp_rom.asm|338||0|0|56523|T| +ccp_rom.asm|339||0|0|56526|T| +ccp_rom.asm|340||0|0|56527|T| +ccp_rom.asm|341||0|0|56528|T| +ccp_rom.asm|342||0|0|56529|T| +ccp_rom.asm|343||0|0|56530|T| +ccp_rom.asm|344||0|0|56533|T| +ccp_rom.asm|345||0|0|56535|T| +ccp_rom.asm|347||0|0|56537|F|CCP_ROM.ccp_cout_num.next_d +ccp_rom.asm|347||0|0|56537|L|CCP_ROM,ccp_cout_num,next_d,+used +ccp_rom.asm|348||0|0|56537|T| +ccp_rom.asm|350||0|0|56539|F|CCP_ROM.ccp_cout_num.next_e +ccp_rom.asm|350||0|0|56539|L|CCP_ROM,ccp_cout_num,next_e,+used +ccp_rom.asm|351||0|0|56539|T| +ccp_rom.asm|352||0|0|56540|T| +ccp_rom.asm|353||0|0|56541|T| +ccp_rom.asm|354||0|0|56542|T| +ccp_rom.asm|355||0|0|56543|T| +ccp_rom.asm|356||0|0|56544|T| +ccp_rom.asm|357||0|0|56545|T| +ccp_rom.asm|358||0|0|56546|T| +ccp_rom.asm|359||0|0|56547|T| +ccp_rom.asm|360||0|0|56548|T| +ccp_rom.asm|361||0|0|56549|T| +ccp_rom.asm|362||0|0|56552|T| +ccp_rom.asm|363||0|0|56553|T| +ccp_rom.asm|364||0|0|56555|T| +ccp_rom.asm|365||0|0|56557|T| +ccp_rom.asm|366||0|0|56559|T| +ccp_rom.asm|367||0|0|56562|T| +ccp_rom.asm|368||0|0|56563|T| +ccp_rom.asm|369||0|0|56564|T| +ccp_rom.asm|370||0|0|56567|T| +ccp_rom.asm|371||0|0|56568|T| +ccp_rom.asm|372||0|0|56569|T| +ccp_rom.asm|373||0|0|56572|T| +ccp_rom.asm|374||0|0|56574|T| +ccp_rom.asm|376||0|0|56577|F|CCP_ROM.ccp_cout_num.d_one +ccp_rom.asm|376||0|0|56577|L|CCP_ROM,ccp_cout_num,d_one,+used +ccp_rom.asm|377||0|0|56577|T| +ccp_rom.asm|378||0|0|56579|F|CCP_ROM.ccp_cout_num.no_zero +ccp_rom.asm|378||0|0|56579|L|CCP_ROM,ccp_cout_num,no_zero,+used +ccp_rom.asm|379||0|0|56579|T| +ccp_rom.asm|380||0|0|56581|F|CCP_ROM.ccp_cout_num.b_no_one +ccp_rom.asm|380||0|0|56581|L|CCP_ROM,ccp_cout_num,b_no_one,+used +ccp_rom.asm|381||0|0|56581|T| +ccp_rom.asm|382||0|0|56582|T| +ccp_rom.asm|383||0|0|56585|T| +ccp_rom.asm|384||0|0|56586|T| +ccp_rom.asm|385||0|0|56589|T| +ccp_rom.asm|390||0|0|56590|F|CCP_ROM.cpp_daa16 +ccp_rom.asm|390||0|0|56590|L|CCP_ROM,cpp_daa16,,+used +ccp_rom.asm|391||0|0|56590|T| +ccp_rom.asm|392||0|0|56591|T| +ccp_rom.asm|393||0|0|56592|T| +ccp_rom.asm|394||0|0|56593|T| +ccp_rom.asm|395||0|0|56594|T| +ccp_rom.asm|396||0|0|56595|T| +ccp_rom.asm|397||0|0|56596|T| +ccp_rom.asm|398||0|0|56597|T| +ccp_rom.asm|399||0|0|56598|T| +ccp_rom.asm|404||0|0|56599|F|CCP_ROM.cpp_bdos_f_size +ccp_rom.asm|404||0|0|56599|L|CCP_ROM,cpp_bdos_f_size,,+used +ccp_rom.asm|405||0|0|56599|T| +ccp_rom.asm|406||0|0|56601|T| +ccp_rom.asm|411||0|0|56604|F|CCP_ROM.ccp_read +ccp_rom.asm|411||0|0|56604|L|CCP_ROM,ccp_read,,+used +ccp_rom.asm|412||0|0|56604|T| +ccp_rom.asm|413||0|0|56607|T| +ccp_rom.asm|414||0|0|56610|T| +ccp_rom.asm|415||0|0|56613|T| +ccp_rom.asm|418||0|0|56616|F|CCP_ROM.ccp_read.wait_colon +ccp_rom.asm|418||0|0|56616|L|CCP_ROM,ccp_read,wait_colon,+used +ccp_rom.asm|419||0|0|56616|T| +ccp_rom.asm|420||0|0|56619|T| +ccp_rom.asm|421||0|0|56621|T| +ccp_rom.asm|424||0|0|56624|T| +ccp_rom.asm|425||0|0|56625|T| +ccp_rom.asm|427||0|0|56626|T| +ccp_rom.asm|428||0|0|56629|T| +ccp_rom.asm|429||0|0|56632|T| +ccp_rom.asm|430||0|0|56633|T| +ccp_rom.asm|431||0|0|56636|T| +ccp_rom.asm|432||0|0|56637|T| +ccp_rom.asm|433||0|0|56640|T| +ccp_rom.asm|434||0|0|56641|T| +ccp_rom.asm|437||0|0|56644|T| +ccp_rom.asm|438||0|0|56645|T| +ccp_rom.asm|439||0|0|56648|T| +ccp_rom.asm|440||0|0|56649|T| +ccp_rom.asm|441||0|0|56650|T| +ccp_rom.asm|442||0|0|56651|T| +ccp_rom.asm|443||0|0|56652|T| +ccp_rom.asm|444||0|0|56654|T| +ccp_rom.asm|445||0|0|56655|T| +ccp_rom.asm|446||0|0|56658|T| +ccp_rom.asm|448||0|0|56659|T| +ccp_rom.asm|451||0|0|56660|F|CCP_ROM.ccp_read.receive_rec +ccp_rom.asm|451||0|0|56660|L|CCP_ROM,ccp_read,receive_rec,+used +ccp_rom.asm|452||0|0|56660|T| +ccp_rom.asm|453||0|0|56663|T| +ccp_rom.asm|454||0|0|56664|T| +ccp_rom.asm|455||0|0|56665|T| +ccp_rom.asm|456||0|0|56666|T| +ccp_rom.asm|458||0|0|56669|T| +ccp_rom.asm|459||0|0|56672|T| +ccp_rom.asm|460||0|0|56675|T| +ccp_rom.asm|462||0|0|56678|F|CCP_ROM.ccp_read.end_of_file +ccp_rom.asm|462||0|0|56678|L|CCP_ROM,ccp_read,end_of_file,+used +ccp_rom.asm|464||0|0|56678|T| +ccp_rom.asm|465||0|0|56681|T| +ccp_rom.asm|466||0|0|56684|T| +ccp_rom.asm|467||0|0|56687|T| +ccp_rom.asm|468||0|0|56690|T| +ccp_rom.asm|470||0|0|56693|F|CCP_ROM.ccp_read.load_error +ccp_rom.asm|470||0|0|56693|L|CCP_ROM,ccp_read,load_error,+used +ccp_rom.asm|471||0|0|56693|T| +ccp_rom.asm|472||0|0|56696|T| +ccp_rom.asm|474||0|0|56699|F|CCP_ROM.ccp_read.load_complete +ccp_rom.asm|474||0|0|56699|L|CCP_ROM,ccp_read,load_complete,+used +ccp_rom.asm|476||0|0|56699|T| +ccp_rom.asm|477||0|0|56702|T| +ccp_rom.asm|478||0|0|56703|T| +ccp_rom.asm|479||0|0|56706|T| +ccp_rom.asm|480||0|0|56707|T| +ccp_rom.asm|481||0|0|56710|T| +ccp_rom.asm|482||0|0|56713|T| +ccp_rom.asm|484||0|0|56716|T| +ccp_rom.asm|485||0|0|56719|T| +ccp_rom.asm|486||0|0|56720|T| +ccp_rom.asm|487||0|0|56722|T| +ccp_rom.asm|488||0|0|56723|T| +ccp_rom.asm|489||0|0|56725|T| +ccp_rom.asm|490||0|0|56726|T| +ccp_rom.asm|492||0|0|56729|T| +ccp_rom.asm|493||0|0|56732|T| +ccp_rom.asm|494||0|0|56735|T| +ccp_rom.asm|497||0|0|56738|T| +ccp_rom.asm|498||0|0|56741|T| +ccp_rom.asm|499||0|0|56744|T| +ccp_rom.asm|500||0|0|56747|T| +ccp_rom.asm|501||0|0|56749|T| +ccp_rom.asm|504||0|0|56752|T| +ccp_rom.asm|505||0|0|56755|T| +ccp_rom.asm|506||0|0|56757|T| +ccp_rom.asm|507||0|0|56760|T| +ccp_rom.asm|508||0|0|56761|T| +ccp_rom.asm|509||0|0|56764|T| +ccp_rom.asm|510||0|0|56767|T| +ccp_rom.asm|512||0|0|56770|F|CCP_ROM.ccp_read.wr_sector +ccp_rom.asm|512||0|0|56770|L|CCP_ROM,ccp_read,wr_sector,+used +ccp_rom.asm|514||0|0|56770|T| +ccp_rom.asm|515||0|0|56773|T| +ccp_rom.asm|516||0|0|56774|T| +ccp_rom.asm|517||0|0|56776|T| +ccp_rom.asm|519||0|0|56779|T| +ccp_rom.asm|520||0|0|56782|T| +ccp_rom.asm|521||0|0|56784|T| +ccp_rom.asm|523||0|0|56787|T| +ccp_rom.asm|524||0|0|56788|T| +ccp_rom.asm|527||0|0|56791|T| +ccp_rom.asm|528||0|0|56794|T| +ccp_rom.asm|529||0|0|56797|T| +ccp_rom.asm|530||0|0|56798|T| +ccp_rom.asm|533||0|0|56801|T| +ccp_rom.asm|534||0|0|56804|T| +ccp_rom.asm|535||0|0|56805|T| +ccp_rom.asm|536||0|0|56808|T| +ccp_rom.asm|539||0|0|56811|T| +ccp_rom.asm|540||0|0|56814|T| +ccp_rom.asm|541||0|0|56816|T| +ccp_rom.asm|543||0|0|56819|T| +ccp_rom.asm|544||0|0|56821|T| +ccp_rom.asm|546||0|0|56824|F|CCP_ROM.ccp_read.warm_boot +ccp_rom.asm|546||0|0|56824|L|CCP_ROM,ccp_read,warm_boot,+used +ccp_rom.asm|547||0|0|56824|T| +ccp_rom.asm|548||0|0|56826|T| +ccp_rom.asm|550||0|0|56829|F|CCP_ROM.ccp_read.msg_bytes +ccp_rom.asm|550||0|0|56829|L|CCP_ROM,ccp_read,msg_bytes,+used +ccp_rom.asm|553||0|0|56839|F|CCP_ROM.ccp_read.msg_pages +ccp_rom.asm|553||0|0|56839|L|CCP_ROM,ccp_read,msg_pages,+used +ccp_rom.asm|556||0|0|56849|F|CCP_ROM.ccp_read.msg_error +ccp_rom.asm|556||0|0|56849|L|CCP_ROM,ccp_read,msg_error,+used +ccp_rom.asm|565||0|0|56858|F|CCP_ROM.ser_read_hexb +ccp_rom.asm|565||0|0|56858|L|CCP_ROM,ser_read_hexb,,+used +ccp_rom.asm|566||0|0|56858|T| +ccp_rom.asm|567||0|0|56859|T| +ccp_rom.asm|568||0|0|56862|T| +ccp_rom.asm|569||0|0|56865|T| +ccp_rom.asm|570||0|0|56866|T| +ccp_rom.asm|571||0|0|56867|T| +ccp_rom.asm|572||0|0|56868|T| +ccp_rom.asm|573||0|0|56869|T| +ccp_rom.asm|574||0|0|56870|T| +ccp_rom.asm|575||0|0|56873|T| +ccp_rom.asm|576||0|0|56876|T| +ccp_rom.asm|577||0|0|56877|T| +ccp_rom.asm|578||0|0|56878|T| +ccp_rom.asm|579||0|0|56879|T| +ccp_rom.asm|580||0|0|56880|T| +ccp_rom.asm|581||0|0|56881|T| +ccp_rom.asm|582||0|0|56882|T| +ccp_rom.asm|590||0|0|56883|F|CCP_ROM.hex_to_nibble +ccp_rom.asm|590||0|0|56883|L|CCP_ROM,hex_to_nibble,,+used +ccp_rom.asm|591||0|0|56883|T| +ccp_rom.asm|592||0|0|56885|T| +ccp_rom.asm|593||0|0|56886|T| +ccp_rom.asm|594||0|0|56888|T| +ccp_rom.asm|595||0|0|56889|T| +ccp_rom.asm|596||0|0|56891|T| +ccp_rom.asm|597||0|0|56894|T| +ccp_rom.asm|598||0|0|56896|T| +ccp_rom.asm|599||0|0|56897|F|CCP_ROM.hex_to_nibble.l1 +ccp_rom.asm|599||0|0|56897|L|CCP_ROM,hex_to_nibble,l1,+used +ccp_rom.asm|600||0|0|56897|T| +ccp_rom.asm|601||0|0|56899|T| +ccp_rom.asm|602||0|0|56900|T| +ccp_rom.asm|608||0|0|56901|F|CCP_ROM.out_dollar_str +ccp_rom.asm|608||0|0|56901|L|CCP_ROM,out_dollar_str,,+used +ccp_rom.asm|609||0|0|56901|T| +ccp_rom.asm|610||0|0|56903|T| +ccp_rom.asm|612||0|0|56906|F|CCP_ROM.msg_read_hex +ccp_rom.asm|612||0|0|56906|L|CCP_ROM,msg_read_hex,,+used +ccp_rom.asm|615||0|0|56932|F|CCP_ROM.filler1 +ccp_rom.asm|615||0|0|56932|L|CCP_ROM,filler1, +ccp_rom.asm|622||0|0|56994|F|CCP_ROM.ccp_out_str_z +ccp_rom.asm|622||0|0|56994|L|CCP_ROM,ccp_out_str_z,,+used +ccp_rom.asm|623||0|0|56994|T| +ccp_rom.asm|624||0|0|56995|T| +ccp_rom.asm|625||0|0|56996|T| +ccp_rom.asm|626||0|0|56997|T| +ccp_rom.asm|627||0|0|56998|T| +ccp_rom.asm|628||0|0|57001|T| +ccp_rom.asm|629||0|0|57002|T| +ccp_rom.asm|634||0|0|57005|F|CCP_ROM.ccp_del_f_no_space +ccp_rom.asm|634||0|0|57005|L|CCP_ROM,ccp_del_f_no_space, +ccp_rom.asm|635||0|0|57005|T| +ccp_rom.asm|636||0|0|57008|T| +ccp_rom.asm|637||0|0|57011|T| +ccp_rom.asm|643||0|0|57014|F|CCP_ROM.cpp_read_f_blk +ccp_rom.asm|643||0|0|57014|L|CCP_ROM,cpp_read_f_blk,,+used +ccp_rom.asm|644||0|0|57014|T| +ccp_rom.asm|645||0|0|57017|T| +ccp_rom.asm|647||0|0|57020|F|CCP_ROM.ccp_write +ccp_rom.asm|647||0|0|57020|L|CCP_ROM,ccp_write,,+used +ccp_rom.asm|648||0|0|57020|T| +ccp_rom.asm|649||0|0|57023|T| +ccp_rom.asm|650||0|0|57026|T| +ccp_rom.asm|651||0|0|57029|T| +ccp_rom.asm|652||0|0|57030|T| +ccp_rom.asm|653||0|0|57032|T| +ccp_rom.asm|654||0|0|57035|T| +ccp_rom.asm|656||0|0|57037|F|CCP_ROM.ccp_write.fill_with_wc +ccp_rom.asm|656||0|0|57037|L|CCP_ROM,ccp_write,fill_with_wc,+used +ccp_rom.asm|657||0|0|57037|T| +ccp_rom.asm|658||0|0|57039|T| +ccp_rom.asm|659||0|0|57040|T| +ccp_rom.asm|660||0|0|57041|T| +ccp_rom.asm|662||0|0|57044|F|CCP_ROM.ccp_write.find_f +ccp_rom.asm|662||0|0|57044|L|CCP_ROM,ccp_write,find_f,+used +ccp_rom.asm|663||0|0|57044|T| +ccp_rom.asm|664||0|0|57047|T| +ccp_rom.asm|665||0|0|57050|T| +ccp_rom.asm|666||0|0|57053|T| +ccp_rom.asm|668||0|0|57056|F|CCP_ROM.ccp_write.found_f +ccp_rom.asm|668||0|0|57056|L|CCP_ROM,ccp_write,found_f,+used +ccp_rom.asm|669||0|0|57056|T| +ccp_rom.asm|671||0|0|57058|F|CCP_ROM.ccp_write.do_next_f1 +ccp_rom.asm|671||0|0|57058|L|CCP_ROM,ccp_write,do_next_f1,+used +ccp_rom.asm|672||0|0|57058|T| +ccp_rom.asm|673||0|0|57059|T| +ccp_rom.asm|674||0|0|57062|T| +ccp_rom.asm|675||0|0|57063|T| +ccp_rom.asm|677||0|0|57064|F|CCP_ROM.ccp_write.do_next_f2 +ccp_rom.asm|677||0|0|57064|L|CCP_ROM,ccp_write,do_next_f2,+used +ccp_rom.asm|678||0|0|57064|T| +ccp_rom.asm|679||0|0|57065|T| +ccp_rom.asm|680||0|0|57068|T| +ccp_rom.asm|681||0|0|57069|T| +ccp_rom.asm|682||0|0|57072|T| +ccp_rom.asm|683||0|0|57073|T| +ccp_rom.asm|684||0|0|57076|T| +ccp_rom.asm|686||0|0|57079|F|CCP_ROM.ccp_write.do_file +ccp_rom.asm|686||0|0|57079|L|CCP_ROM,ccp_write,do_file,+used +ccp_rom.asm|687||0|0|57079|T| +ccp_rom.asm|688||0|0|57080|T| +ccp_rom.asm|689||0|0|57081|T| +ccp_rom.asm|690||0|0|57082|T| +ccp_rom.asm|691||0|0|57083|T| +ccp_rom.asm|692||0|0|57086|T| +ccp_rom.asm|695||0|0|57089|F|CCP_ROM.ccp_write.delay_1 +ccp_rom.asm|695||0|0|57089|L|CCP_ROM,ccp_write,delay_1,+used +ccp_rom.asm|696||0|0|57089|T| +ccp_rom.asm|697||0|0|57090|F|CCP_ROM.ccp_write.delay_2 +ccp_rom.asm|697||0|0|57090|L|CCP_ROM,ccp_write,delay_2,+used +ccp_rom.asm|698||0|0|57090|T| +ccp_rom.asm|699||0|0|57091|T| +ccp_rom.asm|700||0|0|57094|T| +ccp_rom.asm|701||0|0|57095|T| +ccp_rom.asm|702||0|0|57098|T| +ccp_rom.asm|703||0|0|57099|T| +ccp_rom.asm|704||0|0|57102|T| +ccp_rom.asm|705||0|0|57103|T| +ccp_rom.asm|706||0|0|57104|T| +ccp_rom.asm|707||0|0|57105|T| +ccp_rom.asm|709||0|0|57108|F|CCP_ROM.ccp_write.calc_addr +ccp_rom.asm|709||0|0|57108|L|CCP_ROM,ccp_write,calc_addr,+used +ccp_rom.asm|710||0|0|57108|T| +ccp_rom.asm|712||0|0|57111|T| +ccp_rom.asm|713||0|0|57112|T| +ccp_rom.asm|714||0|0|57113|T| +ccp_rom.asm|715||0|0|57114|T| +ccp_rom.asm|716||0|0|57116|T| +ccp_rom.asm|717||0|0|57117|T| +ccp_rom.asm|718||0|0|57118|T| +ccp_rom.asm|719||0|0|57121|T| +ccp_rom.asm|720||0|0|57124|T| +ccp_rom.asm|721||0|0|57125|T| +ccp_rom.asm|722||0|0|57128|T| +ccp_rom.asm|723||0|0|57129|T| +ccp_rom.asm|724||0|0|57131|T| +ccp_rom.asm|725||0|0|57134|T| +ccp_rom.asm|726||0|0|57135|T| +ccp_rom.asm|727||0|0|57138|T| +ccp_rom.asm|729||0|0|57140|F|CCP_ROM.ccp_write.copy_fn +ccp_rom.asm|729||0|0|57140|L|CCP_ROM,ccp_write,copy_fn,+used +ccp_rom.asm|730||0|0|57140|T| +ccp_rom.asm|731||0|0|57141|T| +ccp_rom.asm|732||0|0|57142|T| +ccp_rom.asm|733||0|0|57143|T| +ccp_rom.asm|734||0|0|57144|T| +ccp_rom.asm|735||0|0|57145|T| +ccp_rom.asm|736||0|0|57146|T| +ccp_rom.asm|737||0|0|57148|T| +ccp_rom.asm|739||0|0|57151|F|CCP_ROM.ccp_write.fillz_fn +ccp_rom.asm|739||0|0|57151|L|CCP_ROM,ccp_write,fillz_fn,+used +ccp_rom.asm|740||0|0|57151|T| +ccp_rom.asm|741||0|0|57152|T| +ccp_rom.asm|742||0|0|57153|T| +ccp_rom.asm|743||0|0|57154|T| +ccp_rom.asm|744||0|0|57155|T| +ccp_rom.asm|745||0|0|57156|T| +ccp_rom.asm|746||0|0|57158|T| +ccp_rom.asm|747||0|0|57161|T| +ccp_rom.asm|748||0|0|57164|T| +ccp_rom.asm|749||0|0|57167|T| +ccp_rom.asm|752||0|0|57170|T| +ccp_rom.asm|753||0|0|57172|F|CCP_ROM.ccp_write.clear_buf +ccp_rom.asm|753||0|0|57172|L|CCP_ROM,ccp_write,clear_buf,+used +ccp_rom.asm|754||0|0|57172|T| +ccp_rom.asm|755||0|0|57174|T| +ccp_rom.asm|756||0|0|57175|T| +ccp_rom.asm|757||0|0|57176|T| +ccp_rom.asm|760||0|0|57179|T| +ccp_rom.asm|761||0|0|57182|T| +ccp_rom.asm|762||0|0|57185|T| +ccp_rom.asm|764||0|0|57187|F|CCP_ROM.ccp_write.find_sp +ccp_rom.asm|764||0|0|57187|L|CCP_ROM,ccp_write,find_sp,+used +ccp_rom.asm|765||0|0|57187|T| +ccp_rom.asm|766||0|0|57188|T| +ccp_rom.asm|767||0|0|57190|T| +ccp_rom.asm|768||0|0|57193|T| +ccp_rom.asm|769||0|0|57194|T| +ccp_rom.asm|770||0|0|57195|T| +ccp_rom.asm|771||0|0|57196|T| +ccp_rom.asm|772||0|0|57199|F|CCP_ROM.ccp_write.sp_rep_dot +ccp_rom.asm|772||0|0|57199|L|CCP_ROM,ccp_write,sp_rep_dot,+used +ccp_rom.asm|773||0|0|57199|T| +ccp_rom.asm|774||0|0|57201|T| +ccp_rom.asm|775||0|0|57202|T| +ccp_rom.asm|777||0|0|57205|F|CCP_ROM.ccp_write.cont_copy_fn +ccp_rom.asm|777||0|0|57205|L|CCP_ROM,ccp_write,cont_copy_fn,+used +ccp_rom.asm|778||0|0|57205|T| +ccp_rom.asm|779||0|0|57206|T| +ccp_rom.asm|780||0|0|57207|T| +ccp_rom.asm|781||0|0|57208|T| +ccp_rom.asm|782||0|0|57211|T| +ccp_rom.asm|783||0|0|57212|T| +ccp_rom.asm|784||0|0|57213|T| +ccp_rom.asm|786||0|0|57216|F|CCP_ROM.ccp_write.end_copy +ccp_rom.asm|786||0|0|57216|L|CCP_ROM,ccp_write,end_copy,+used +ccp_rom.asm|787||0|0|57216|T| +ccp_rom.asm|788||0|0|57219|T| +ccp_rom.asm|789||0|0|57222|T| +ccp_rom.asm|790||0|0|57225|T| +ccp_rom.asm|791||0|0|57228|T| +ccp_rom.asm|792||0|0|57231|T| +ccp_rom.asm|793||0|0|57234|T| +ccp_rom.asm|796||0|0|57237|F|CCP_ROM.ccp_write.read_f_write_t +ccp_rom.asm|796||0|0|57237|L|CCP_ROM,ccp_write,read_f_write_t,+used +ccp_rom.asm|797||0|0|57237|T| +ccp_rom.asm|798||0|0|57238|T| +ccp_rom.asm|800||0|0|57241|T| +ccp_rom.asm|801||0|0|57242|T| +ccp_rom.asm|802||0|0|57245|T| +ccp_rom.asm|803||0|0|57248|T| +ccp_rom.asm|804||0|0|57250|T| +ccp_rom.asm|805||0|0|57252|T| +ccp_rom.asm|807||0|0|57255|T| +ccp_rom.asm|808||0|0|57258|T| +ccp_rom.asm|809||0|0|57261|T| +ccp_rom.asm|811||0|0|57264|F|CCP_ROM.ccp_write.write_once +ccp_rom.asm|811||0|0|57264|L|CCP_ROM,ccp_write,write_once,+used +ccp_rom.asm|812||0|0|57264|T| +ccp_rom.asm|813||0|0|57267|T| +ccp_rom.asm|814||0|0|57270|T| +ccp_rom.asm|815||0|0|57271|T| +ccp_rom.asm|816||0|0|57274|T| +ccp_rom.asm|818||0|0|57277|T| +ccp_rom.asm|819||0|0|57278|T| +ccp_rom.asm|821||0|0|57281|F|CCP_ROM.ccp_write.eof +ccp_rom.asm|821||0|0|57281|L|CCP_ROM,ccp_write,eof,+used +ccp_rom.asm|822||0|0|57281|T| +ccp_rom.asm|823||0|0|57282|T| +ccp_rom.asm|824||0|0|57283|T| +ccp_rom.asm|825||0|0|57286|T| +ccp_rom.asm|828||0|0|57287|T| +ccp_rom.asm|830||0|0|57290|T| +ccp_rom.asm|831||0|0|57293|T| +ccp_rom.asm|832||0|0|57296|T| +ccp_rom.asm|833||0|0|57297|T| +ccp_rom.asm|834||0|0|57298|T| +ccp_rom.asm|836||0|0|57301|F|CCP_ROM.ccp_write.no_more_f +ccp_rom.asm|836||0|0|57301|L|CCP_ROM,ccp_write,no_more_f,+used +ccp_rom.asm|837||0|0|57301|T| +ccp_rom.asm|838||0|0|57302|T| +ccp_rom.asm|839||0|0|57305|T| +ccp_rom.asm|844||0|0|57308|F|CCP_ROM.cpp_pause_tape_wr_blk +ccp_rom.asm|844||0|0|57308|L|CCP_ROM,cpp_pause_tape_wr_blk,,+used +ccp_rom.asm|845||0|0|57308|T| +ccp_rom.asm|846||0|0|57311|F|CCP_ROM.cpp_pause_tape_wr_blk.delay +ccp_rom.asm|846||0|0|57311|L|CCP_ROM,cpp_pause_tape_wr_blk,delay,+used +ccp_rom.asm|847||0|0|57311|T| +ccp_rom.asm|848||0|0|57312|T| +ccp_rom.asm|849||0|0|57313|T| +ccp_rom.asm|850||0|0|57314|T| +ccp_rom.asm|851||0|0|57317|T| +ccp_rom.asm|858||0|-1|57321|D|CCP_ROM.LAST +ccp_rom.asm|858||0|-1|57321|L|CCP_ROM,LAST,,+equ,+used +ccp_rom.asm|859||0|-1|1257|D|CCP_ROM.CODE_SIZE +ccp_rom.asm|859||0|-1|1257|L|CCP_ROM,CODE_SIZE,,+equ,+used +ccp_rom.asm|860||0|-1|23|D|CCP_ROM.FILL_SIZE +ccp_rom.asm|860||0|-1|23|L|CCP_ROM,FILL_SIZE,,+equ,+used +ccp_rom.asm|874||0|0|57321|F|CCP_ROM.FILLER +ccp_rom.asm|874||0|0|57321|L|CCP_ROM,FILLER, +ccp_rom.asm|878||0|-1|57344|L|CCP_ROM,,,+endmod +cpm_vars.inc|12||0|-1|57344|L|CPM_VARS,,,+module +cpm_vars.inc|15||0|-1|47625|D|CPM_VARS.cpm_vars_start +cpm_vars.inc|15||0|-1|47625|L|CPM_VARS,cpm_vars_start,,+equ,+used +cpm_vars.inc|20||0|0|47625|F|CPM_VARS.bdos_no_outflag +cpm_vars.inc|20||0|0|47625|L|CPM_VARS,bdos_no_outflag,,+used +cpm_vars.inc|21||0|0|47626|F|CPM_VARS.bdos_strtcol +cpm_vars.inc|21||0|0|47626|L|CPM_VARS,bdos_strtcol,,+used +cpm_vars.inc|22||0|0|47627|F|CPM_VARS.bdos_column +cpm_vars.inc|22||0|0|47627|L|CPM_VARS,bdos_column,,+used +cpm_vars.inc|25||0|0|47628|F|CPM_VARS.bdos_prnflag +cpm_vars.inc|25||0|0|47628|L|CPM_VARS,bdos_prnflag,,+used +cpm_vars.inc|26||0|0|47629|F|CPM_VARS.bdos_kbchar +cpm_vars.inc|26||0|0|47629|L|CPM_VARS,bdos_kbchar,,+used +cpm_vars.inc|29||0|0|47630|F|CPM_VARS.bdos_usersp +cpm_vars.inc|29||0|0|47630|L|CPM_VARS,bdos_usersp,,+used +cpm_vars.inc|33||0|-1|47680|D|CPM_VARS.bdos_stack +cpm_vars.inc|33||0|-1|47680|L|CPM_VARS,bdos_stack,,+equ,+used +cpm_vars.inc|40||0|0|47680|F|CPM_VARS.bdos_userno +cpm_vars.inc|40||0|0|47680|L|CPM_VARS,bdos_userno,,+used +cpm_vars.inc|43||0|0|47681|F|CPM_VARS.bdos_curdsk +cpm_vars.inc|43||0|0|47681|L|CPM_VARS,bdos_curdsk,,+used +cpm_vars.inc|46||0|0|47682|F|CPM_VARS.bdos_info +cpm_vars.inc|46||0|0|47682|L|CPM_VARS,bdos_info,,+used +cpm_vars.inc|49||0|0|47684|F|CPM_VARS.bdos_aret +cpm_vars.inc|49||0|0|47684|L|CPM_VARS,bdos_aret,,+used +cpm_vars.inc|51||0|0|47686|F|CPM_VARS.bdos_efcb +cpm_vars.inc|51||0|0|47686|L|CPM_VARS,bdos_efcb,,+used +cpm_vars.inc|53||0|0|47687|F|CPM_VARS.bdos_rodsk +cpm_vars.inc|53||0|0|47687|L|CPM_VARS,bdos_rodsk,,+used +cpm_vars.inc|55||0|0|47689|F|CPM_VARS.bdos_dlog +cpm_vars.inc|55||0|0|47689|L|CPM_VARS,bdos_dlog,,+used +cpm_vars.inc|57||0|0|47691|F|CPM_VARS.bdos_dmaad +cpm_vars.inc|57||0|0|47691|L|CPM_VARS,bdos_dmaad,,+used +cpm_vars.inc|58||0|0|47693|F|CPM_VARS.bdos_cdrmax +cpm_vars.inc|58||0|0|47693|L|CPM_VARS,bdos_cdrmax,,+used +cpm_vars.inc|60||0|0|47695|F|CPM_VARS.bdos_curtrk +cpm_vars.inc|60||0|0|47695|L|CPM_VARS,bdos_curtrk,,+used +cpm_vars.inc|62||0|0|47697|F|CPM_VARS.bdos_currec +cpm_vars.inc|62||0|0|47697|L|CPM_VARS,bdos_currec,,+used +cpm_vars.inc|64||0|0|47699|F|CPM_VARS.bdos_buffa +cpm_vars.inc|64||0|0|47699|L|CPM_VARS,bdos_buffa,,+used +cpm_vars.inc|67||0|0|47701|F|CPM_VARS.bdos_dpbaddr +cpm_vars.inc|67||0|0|47701|L|CPM_VARS,bdos_dpbaddr,,+used +cpm_vars.inc|69||0|0|47703|F|CPM_VARS.bdos_cksum +cpm_vars.inc|69||0|0|47703|L|CPM_VARS,bdos_cksum,,+used +cpm_vars.inc|71||0|0|47705|F|CPM_VARS.bdos_alloca +cpm_vars.inc|71||0|0|47705|L|CPM_VARS,bdos_alloca,,+used +cpm_vars.inc|73||0|0|47707|F|CPM_VARS.bdos_sectpt +cpm_vars.inc|73||0|0|47707|L|CPM_VARS,bdos_sectpt,,+used +cpm_vars.inc|74||0|0|47709|F|CPM_VARS.bdos_blkshf +cpm_vars.inc|74||0|0|47709|L|CPM_VARS,bdos_blkshf,,+used +cpm_vars.inc|75||0|0|47710|F|CPM_VARS.bdos_blmsk +cpm_vars.inc|75||0|0|47710|L|CPM_VARS,bdos_blmsk,,+used +cpm_vars.inc|76||0|0|47711|F|CPM_VARS.bdos_extmsk +cpm_vars.inc|76||0|0|47711|L|CPM_VARS,bdos_extmsk,,+used +cpm_vars.inc|78||0|0|47712|F|CPM_VARS.bdos_maxall +cpm_vars.inc|78||0|0|47712|L|CPM_VARS,bdos_maxall,,+used +cpm_vars.inc|79||0|0|47714|F|CPM_VARS.bdos_dirmax +cpm_vars.inc|79||0|0|47714|L|CPM_VARS,bdos_dirmax,,+used +cpm_vars.inc|81||0|0|47716|F|CPM_VARS.bdos_dirblk +cpm_vars.inc|81||0|0|47716|L|CPM_VARS,bdos_dirblk,,+used +cpm_vars.inc|82||0|0|47718|F|CPM_VARS.bdos_alloc1 +cpm_vars.inc|82||0|0|47718|L|CPM_VARS,bdos_alloc1,,+used +cpm_vars.inc|84||0|0|47720|F|CPM_VARS.bdos_offset +cpm_vars.inc|84||0|0|47720|L|CPM_VARS,bdos_offset,,+used +cpm_vars.inc|86||0|0|47722|F|CPM_VARS.bdos_tranv +cpm_vars.inc|86||0|0|47722|L|CPM_VARS,bdos_tranv,,+used +cpm_vars.inc|88||0|0|47724|F|CPM_VARS.bdos_fcb_closed +cpm_vars.inc|88||0|0|47724|L|CPM_VARS,bdos_fcb_closed,,+used +cpm_vars.inc|90||0|0|47725|F|CPM_VARS.bdos_rfm +cpm_vars.inc|90||0|0|47725|L|CPM_VARS,bdos_rfm,,+used +cpm_vars.inc|91||0|0|47726|F|CPM_VARS.bdos_dirloc +cpm_vars.inc|91||0|0|47726|L|CPM_VARS,bdos_dirloc,,+used +cpm_vars.inc|93||0|0|47727|F|CPM_VARS.bdos_seqio +cpm_vars.inc|93||0|0|47727|L|CPM_VARS,bdos_seqio,,+used +cpm_vars.inc|95||0|0|47728|F|CPM_VARS.bdos_linfo +cpm_vars.inc|95||0|0|47728|L|CPM_VARS,bdos_linfo,,+used +cpm_vars.inc|96||0|0|47729|F|CPM_VARS.bdos_dminx +cpm_vars.inc|96||0|0|47729|L|CPM_VARS,bdos_dminx,,+used +cpm_vars.inc|98||0|0|47730|F|CPM_VARS.bdos_searchl +cpm_vars.inc|98||0|0|47730|L|CPM_VARS,bdos_searchl,,+used +cpm_vars.inc|100||0|0|47731|F|CPM_VARS.bdos_searcha +cpm_vars.inc|100||0|0|47731|L|CPM_VARS,bdos_searcha,,+used +cpm_vars.inc|103||0|0|47735|F|CPM_VARS.bdos_small_disk +cpm_vars.inc|103||0|0|47735|L|CPM_VARS,bdos_small_disk,,+used +cpm_vars.inc|105||0|0|47736|F|CPM_VARS.bdos_resel +cpm_vars.inc|105||0|0|47736|L|CPM_VARS,bdos_resel,,+used +cpm_vars.inc|106||0|0|47737|F|CPM_VARS.bdos_olddsk +cpm_vars.inc|106||0|0|47737|L|CPM_VARS,bdos_olddsk,,+used +cpm_vars.inc|108||0|0|47738|F|CPM_VARS.bdos_fcbdsk +cpm_vars.inc|108||0|0|47738|L|CPM_VARS,bdos_fcbdsk,,+used +cpm_vars.inc|110||0|0|47739|F|CPM_VARS.bdos_rcount +cpm_vars.inc|110||0|0|47739|L|CPM_VARS,bdos_rcount,,+used +cpm_vars.inc|111||0|0|47740|F|CPM_VARS.bdos_extval +cpm_vars.inc|111||0|0|47740|L|CPM_VARS,bdos_extval,,+used +cpm_vars.inc|113||0|0|47741|F|CPM_VARS.bdos_vrecord +cpm_vars.inc|113||0|0|47741|L|CPM_VARS,bdos_vrecord,,+used +cpm_vars.inc|115||0|0|47743|F|CPM_VARS.bdos_arecord +cpm_vars.inc|115||0|0|47743|L|CPM_VARS,bdos_arecord,,+used +cpm_vars.inc|116||0|0|47745|F|CPM_VARS.bdos_arecord1 +cpm_vars.inc|116||0|0|47745|L|CPM_VARS,bdos_arecord1,,+used +cpm_vars.inc|117||0|0|47747|F|CPM_VARS.bdos_dptr +cpm_vars.inc|117||0|0|47747|L|CPM_VARS,bdos_dptr,,+used +cpm_vars.inc|118||0|0|47748|F|CPM_VARS.bdos_dcnt +cpm_vars.inc|118||0|0|47748|L|CPM_VARS,bdos_dcnt,,+used +cpm_vars.inc|119||0|0|47750|F|CPM_VARS.bdos_drec +cpm_vars.inc|119||0|0|47750|L|CPM_VARS,bdos_drec,,+used +cpm_vars.inc|120||0|0|47770|F|CPM_VARS.tmp_dir_total +cpm_vars.inc|120||0|0|47770|L|CPM_VARS,tmp_dir_total,,+used +cpm_vars.inc|122||0|0|47772|F|CPM_VARS.saved_stack_ptr +cpm_vars.inc|122||0|0|47772|L|CPM_VARS,saved_stack_ptr,,+used +cpm_vars.inc|124||0|0|47796|F|CPM_VARS.ccp_safe_stack +cpm_vars.inc|124||0|0|47796|L|CPM_VARS,ccp_safe_stack,,+used +cpm_vars.inc|130||0|0|47798|F|CPM_VARS.ccp_fcb +cpm_vars.inc|130||0|0|47798|L|CPM_VARS,ccp_fcb,,+used +cpm_vars.inc|131||0|0|47798|F|CPM_VARS.ccp_fcb_dr +cpm_vars.inc|131||0|0|47798|L|CPM_VARS,ccp_fcb_dr,,+used +cpm_vars.inc|132||0|0|47799|F|CPM_VARS.ccp_fcb_fn +cpm_vars.inc|132||0|0|47799|L|CPM_VARS,ccp_fcb_fn,,+used +cpm_vars.inc|133||0|0|47807|F|CPM_VARS.ccp_fcb_ft +cpm_vars.inc|133||0|0|47807|L|CPM_VARS,ccp_fcb_ft, +cpm_vars.inc|134||0|0|47810|F|CPM_VARS.ccp_fcb_ext +cpm_vars.inc|134||0|0|47810|L|CPM_VARS,ccp_fcb_ext, +cpm_vars.inc|135||0|0|47811|F|CPM_VARS.ccp_fcb_s1 +cpm_vars.inc|135||0|0|47811|L|CPM_VARS,ccp_fcb_s1, +cpm_vars.inc|136||0|0|47812|F|CPM_VARS.ccp_fcb_s2 +cpm_vars.inc|136||0|0|47812|L|CPM_VARS,ccp_fcb_s2, +cpm_vars.inc|137||0|0|47813|F|CPM_VARS.ccp_fcb_rc +cpm_vars.inc|137||0|0|47813|L|CPM_VARS,ccp_fcb_rc, +cpm_vars.inc|138||0|0|47814|F|CPM_VARS.ccp_fcb_al +cpm_vars.inc|138||0|0|47814|L|CPM_VARS,ccp_fcb_al, +cpm_vars.inc|139||0|0|47830|F|CPM_VARS.ccp_fcb_cr +cpm_vars.inc|139||0|0|47830|L|CPM_VARS,ccp_fcb_cr,,+used +cpm_vars.inc|140||0|0|47831|F|CPM_VARS.ccp_fcb_rn +cpm_vars.inc|140||0|0|47831|L|CPM_VARS,ccp_fcb_rn, +cpm_vars.inc|145||0|-1|47838|D|CPM_VARS.ccp_vars_end +cpm_vars.inc|145||0|-1|47838|L|CPM_VARS,ccp_vars_end,,+equ,+used +cpm_vars.inc|150||0|0|47838|F|CPM_VARS.DPH_RAM +cpm_vars.inc|150||0|0|47838|L|CPM_VARS,DPH_RAM,,+used +cpm_vars.inc|151||0|0|47854|F|CPM_VARS.DPH1_RAM +cpm_vars.inc|151||0|0|47854|L|CPM_VARS,DPH1_RAM, +cpm_vars.inc|152||0|0|47870|F|CPM_VARS.DPH2_RAM +cpm_vars.inc|152||0|0|47870|L|CPM_VARS,DPH2_RAM, +cpm_vars.inc|153||0|0|47886|F|CPM_VARS.tmp_buff9 +cpm_vars.inc|153||0|0|47886|L|CPM_VARS,tmp_buff9,,+used +cpm_vars.inc|154||0|0|47895|F|CPM_VARS.DPB_A_RAM +cpm_vars.inc|154||0|0|47895|L|CPM_VARS,DPB_A_RAM,,+used +cpm_vars.inc|155||0|0|47910|F|CPM_VARS.DPB_B_RAM +cpm_vars.inc|155||0|0|47910|L|CPM_VARS,DPB_B_RAM,,+used +cpm_vars.inc|156||0|0|47925|F|CPM_VARS.DPB_C_RAM +cpm_vars.inc|156||0|0|47925|L|CPM_VARS,DPB_C_RAM,,+used +cpm_vars.inc|159||0|0|47940|F|CPM_VARS.cur_disk +cpm_vars.inc|159||0|0|47940|L|CPM_VARS,cur_disk,,+used +cpm_vars.inc|160||0|0|47941|F|CPM_VARS.dma_addr +cpm_vars.inc|160||0|0|47941|L|CPM_VARS,dma_addr,,+used +cpm_vars.inc|161||0|0|47943|F|CPM_VARS.curr_track +cpm_vars.inc|161||0|0|47943|L|CPM_VARS,curr_track,,+used +cpm_vars.inc|162||0|0|47944|F|CPM_VARS.curr_sec +cpm_vars.inc|162||0|0|47944|L|CPM_VARS,curr_sec,,+used +cpm_vars.inc|163||0|0|47945|F|CPM_VARS.slicer_disk +cpm_vars.inc|163||0|0|47945|L|CPM_VARS,slicer_disk,,+used +cpm_vars.inc|164||0|0|47946|F|CPM_VARS.slicer_track +cpm_vars.inc|164||0|0|47946|L|CPM_VARS,slicer_track,,+used +cpm_vars.inc|165||0|0|47947|F|CPM_VARS.slicer_real_sector +cpm_vars.inc|165||0|0|47947|L|CPM_VARS,slicer_real_sector,,+used +cpm_vars.inc|166||0|0|47948|F|CPM_VARS.tmp_slicer_real_sector +cpm_vars.inc|166||0|0|47948|L|CPM_VARS,tmp_slicer_real_sector,,+used +cpm_vars.inc|167||0|0|47949|F|CPM_VARS.slicer_has_data +cpm_vars.inc|167||0|0|47949|L|CPM_VARS,slicer_has_data,,+used +cpm_vars.inc|168||0|0|47950|F|CPM_VARS.slicer_need_save +cpm_vars.inc|168||0|0|47950|L|CPM_VARS,slicer_need_save,,+used +cpm_vars.inc|169||0|0|47951|F|CPM_VARS.slicer_uninited_count +cpm_vars.inc|169||0|0|47951|L|CPM_VARS,slicer_uninited_count,,+used +cpm_vars.inc|170||0|0|47952|F|CPM_VARS.slicer_uninited_disk +cpm_vars.inc|170||0|0|47952|L|CPM_VARS,slicer_uninited_disk,,+used +cpm_vars.inc|171||0|0|47953|F|CPM_VARS.slicer_uninited_track +cpm_vars.inc|171||0|0|47953|L|CPM_VARS,slicer_uninited_track,,+used +cpm_vars.inc|172||0|0|47954|F|CPM_VARS.slicer_uninited_sector_128 +cpm_vars.inc|172||0|0|47954|L|CPM_VARS,slicer_uninited_sector_128,,+used +cpm_vars.inc|173||0|0|47955|F|CPM_VARS.tmp_slicer_result +cpm_vars.inc|173||0|0|47955|L|CPM_VARS,tmp_slicer_result,,+used +cpm_vars.inc|174||0|0|47956|F|CPM_VARS.tmp_slicer_can_read +cpm_vars.inc|174||0|0|47956|L|CPM_VARS,tmp_slicer_can_read,,+used +cpm_vars.inc|175||0|0|47957|F|CPM_VARS.tmp_slicer_operation +cpm_vars.inc|175||0|0|47957|L|CPM_VARS,tmp_slicer_operation,,+used +cpm_vars.inc|176||0|0|47958|F|CPM_VARS.tmp_slicer_flush +cpm_vars.inc|176||0|0|47958|L|CPM_VARS,tmp_slicer_flush,,+used +cpm_vars.inc|179||0|0|47959|F|CPM_VARS.dir_buffer +cpm_vars.inc|179||0|0|47959|L|CPM_VARS,dir_buffer,,+used +cpm_vars.inc|182||0|0|48087|F|CPM_VARS.AL_MAP_A +cpm_vars.inc|182||0|0|48087|L|CPM_VARS,AL_MAP_A,,+used +cpm_vars.inc|184||0|0|48118|F|CPM_VARS.CHK_VEC_A +cpm_vars.inc|184||0|0|48118|L|CPM_VARS,CHK_VEC_A,,+used +cpm_vars.inc|187||0|0|48134|F|CPM_VARS.AL_MAP_B +cpm_vars.inc|187||0|0|48134|L|CPM_VARS,AL_MAP_B,,+used +cpm_vars.inc|189||0|0|48179|F|CPM_VARS.CHK_VEC_B +cpm_vars.inc|189||0|0|48179|L|CPM_VARS,CHK_VEC_B,,+used +cpm_vars.inc|192||0|0|48211|F|CPM_VARS.AL_MAP_C +cpm_vars.inc|192||0|0|48211|L|CPM_VARS,AL_MAP_C,,+used +cpm_vars.inc|194||0|0|48256|F|CPM_VARS.CHK_VEC_C +cpm_vars.inc|194||0|0|48256|L|CPM_VARS,CHK_VEC_C,,+used +cpm_vars.inc|197||0|0|48384|F|CPM_VARS.slicer_buffer +cpm_vars.inc|197||0|0|48384|L|CPM_VARS,slicer_buffer,,+used +cpm_vars.inc|199||0|-1|48896|D|CPM_VARS.cpm_vars_end +cpm_vars.inc|199||0|-1|48896|L|CPM_VARS,cpm_vars_end,,+equ,+used +cpm_vars.inc|201||0|-1|213|D|CPM_VARS.ccp_vars_size +cpm_vars.inc|201||0|-1|213|L|CPM_VARS,ccp_vars_size,,+equ,+used +cpm_vars.inc|202||0|-1|1271|D|CPM_VARS.cpm_vars_size +cpm_vars.inc|202||0|-1|1271|L|CPM_VARS,cpm_vars_size,,+equ,+used +cpm_vars.inc|217||0|-1|48896|L|CPM_VARS,,,+endmod +cpm.asm|46||0|0|48896|F|END +cpm.asm|46||0|0|48896|L|,END, diff --git a/examples/hello/main.asm b/examples/hello/main.asm new file mode 100644 index 0000000..0341fb4 --- /dev/null +++ b/examples/hello/main.asm @@ -0,0 +1,43 @@ +; ================================================== +; Simple CP/M program +; By Romych +; ================================================== + DEVICE NOSLOT64K + SLDOPT COMMENT WPMEM, ASSERTION, LOGPOINT + +; INCLUDE "ok240/equates.inc" + INCLUDE "ok240/bdos.inc" + + OUTPUT main.com + + ORG 0x100 + + LD B, 10 + LD SP, stack +AGAIN: + LD DE, message + ; ASSERTION B < 11 + LD A, 10 + SUB B + OR 0x30 + LD (DE), A + LD C, C_WRITESTR + PUSH BC + CALL BDOS_ENTER + POP BC + DEC B ; LOGPOINT + JP NZ, AGAIN + JP WARM_BOOT + +message: ; WPMEM, 1, w + DB "n - Welcome to OK240.2!\r\n$" + + OUTEND + + ;DS 1024 +stack EQU 0xbfc0 + + ;DISPLAY "message: EQU\t| ",/H,message + + +END diff --git a/examples/hello/mon/monitor.asm b/examples/hello/mon/monitor.asm new file mode 100644 index 0000000..ec8314d --- /dev/null +++ b/examples/hello/mon/monitor.asm @@ -0,0 +1,5671 @@ +; ====================================================== +; Ocean-240.2 +; Monitor V8 +; crc32: 9c6c6546 +; +; Disassembled by Romych 2026-02-17 +; ====================================================== + + DEVICE NOSLOT64K + + INCLUDE "io.inc" + INCLUDE "equates.inc" + INCLUDE "ram.inc" + INCLUDE "bios_entries.inc" + + DEFINE CHECK_INTEGRITY + + OUTPUT mon_E000.bin + + + MODULE MONITOR + + ORG 0xe000 + +; ------------------------------------------------------ +; Monitor Entry points +; ------------------------------------------------------ + +mon_start: JP m_start ; E000 +mon_hexb: JP m_hexb ; E003 +non_con_status: JP m_con_status ; E006 +mon_con_in: JP m_con_in ; E009 +mon_con_out: JP m_con_out ; E00C +mon_serial_in: JP m_serial_in ; E00F +mon_serial_out: JP m_serial_out ; E012 +mon_char_print: JP m_char_print ; E015 +mon_tape_read: JP m_tape_read ; E018 +mon_tape_write: JP m_tape_write ; E01B +mon_ram_disk_read: JP m_ramdisk_read ; E01E +mon_ram_disk_write: JP m_ramdisk_write ; E021 +mon_tape_read_ram: JP m_tape_read_ram2 ; E024 +mon_tape_write_ram: JP m_tape_write_ram2 ; E027 +mon_tape_wait: JP m_tape_wait ; E02A +mon_tape_detect: JP m_tape_blk_detect ; E02D +mon_read_floppy: JP m_read_floppy ; E030 +mon_write_floppy: JP m_write_floppy ; E033 +mon_out_str_z: JP m_out_strz ; E036 + JP m_fn_39 ; E039 + JP get_image_hdr ; E03C + JP esc_picture ; E03F + JP m_print_at_xy ; E042 + JP esc_draw_fill_rect ; E045 + JP esc_paint ; E048 + JP esc_draw_line ; E04B + JP esc_draw_circle ; E04E + + +; ------------------------------------------------------ +; Init system devices +; ------------------------------------------------------ +m_start: + DI + LD A, 10000000b ; DD17 all ports to out + OUT (SYS_DD17CTR), A ; VV55 Sys CTR + OUT (DD67CTR), A ; VV55 Video CTR + + ; init_kbd_tape + LD A, 0x93 + OUT (KBD_DD78CTR), A + + + LD A, 01111111b ; VSU=0, C/M=1, FL=111, COL=111 + OUT (VID_DD67PB), A ; color mode + LD A, 00000001b + OUT (SYS_DD17PB), A ; Access to VRAM + LD B, 0x0 ; TODO: replace to LD HL, 0x3f00 LD B,L + LD HL, 0x3f00 + LD A, H + ADD A, 0x41 ; A=128 0x80 + + ; Clear memory from 0x3F00 to 0x7FFF +.fill_video: + LD (HL), B + INC HL + CP H + JP NZ, .fill_video + + ;XOR A + LD A, 0 + OUT (SYS_DD17PB), A ; Disable VRAM + LD A, 00000111b + OUT (SYS_DD17PC), A ; pix shift to 7 + LD (M_VARS.pix_shift), A + + XOR A + LD (M_VARS.screen_mode), A + LD (M_VARS.row_shift), A + + ; Set color mode and palette + LD (M_VARS.curr_color+1), A + CPL + LD (M_VARS.curr_color), A + LD A, 00000011b + LD (M_VARS.cur_palette), A + ; VSU=0, C/M=1, FL=000, COL=011 + ; color mode, black border + ; 00-black, 01-red, 10-purple, 11-white + LD A, 01000011b + OUT (VID_DD67PB), A + + ; config LPT + LD A, 0x4 + OUT (DD67PC), A ; bell=1, strobe=0 + LD (M_VARS.strobe_state), A ; store strobe + LD HL, 1024 ; 683us + LD (M_VARS.beep_period), HL + LD HL, 320 ; 213us + LD (M_VARS.beep_duration), HL + +.conf_uart: + ; Config UART + LD A, 11001110b + OUT (UART_DD72RR), A + LD A, 00100101b + OUT (UART_DD72RR), A + + ; Config Timer#1 for UART clock + LD A, 01110110b ; tmr#1, load l+m bin, sq wave + OUT (TMR_DD70CTR), A + + ; 1.5M/20 = 75kHz + LD A, 20 + OUT (TMR_DD70C2), A + XOR A + OUT (TMR_DD70C2), A +.conf_pic: + ; Config PIC + LD A,00010010b ; ICW1 edge trigger, interval 8, single, no ICW4 + OUT (PIC_DD75RS), A + XOR A + OUT (PIC_DD75RM), A ; ICW2 Interrupt vector address + CPL + OUT (PIC_DD75RM), A ; ICW3 no slave + LD A,00100000b + OUT (PIC_DD75RS), A ; Non-specific EOI command, End of I... + LD A, PIC_POLL_MODE ; 00001010 + OUT (PIC_DD75RS), A ; Poll mode, Read IRR by next #RD + + LD A, 0x80 + OUT (KBD_DD78PC), A ; TODO: - Check using this 7th bit + NOP + NOP + XOR A + OUT (KBD_DD78PC), A + + ; Init cursor + LD SP, M_VARS.stack1 + CALL m_draw_cursor + + ; Beep + LD C, ASCII_BELL + CALL m_con_out + + LD A, (BIOS.boot_f) + CP JP_OPCODE + JP Z, BIOS.boot_f + LD HL, mgs_system_nf + CALL m_out_strz + JP m_sys_halt + +; -------------------------------------------------- +; Output ASCIIZ string +; Inp: HL -> string +; -------------------------------------------------- +m_out_strz: + LD C, (HL) + LD A, C + OR A + RET Z + CALL m_con_out + INC HL + JP m_out_strz + +mgs_system_nf: + DB "\r\nSYSTEM NOT FOUND\r\n", 0 + +m_sys_halt: + HALT + +; ------------------------------------------------------ +; Console status +; Out: A = 0 - not ready +; A = 0xFF - ready (key pressed) +; ------------------------------------------------------ +m_con_status: + IN A, (PIC_DD75RS) ; Read PIC status + NOP + AND KBD_IRQ ; Check keyboard request RST1 + LD A, 0 + RET Z ; no key pressed + CPL + RET ; key pressed + +; ------------------------------------------------------ +; Wait and read data from UART +; Out: A - 7 bit data +; ------------------------------------------------------ +m_serial_in: + IN A, (UART_DD72RR) + AND RX_READY + JP Z, m_serial_in ; wait for rx data ready + IN A, (UART_DD72RD) + AND 0x7f ; leave 7 bits + RET + +; ------------------------------------------------------ +; Read key +; Out: A +; ------------------------------------------------------ +m_con_in: + CALL m_con_status + OR A + JP Z, m_con_in ; wait key + IN A, (KBD_DD78PA) ; get key + ;AND 0x7f ; reset hi bit, leave 0..127 code + NOP ; do not reset hi bit + NOP + PUSH AF + ; PC7 Set Hi - ACK + LD A, KBD_ACK + OUT (KBD_DD78PC), A + ; PC7 Set Lo + XOR A + OUT (KBD_DD78PC), A + POP AF + RET + +; ------------------------------------------------------ +; Send data by UART +; Inp: C - data to transmitt +; ------------------------------------------------------ +m_serial_out: + IN A, (UART_DD72RR) + AND TX_READY + JP Z, m_serial_out ; Wait for TX ready + LD A, C + OUT (UART_DD72RD), A + RET + +; ------------------------------------------------------ +; Send character to printer +; Inp: C - character +; ------------------------------------------------------ +m_char_print: + ; wait printer ready + IN A, (PIC_DD75RS) + AND PRINTER_IRQ + JP Z, m_char_print + + LD A, C + NOP + OUT (LPT_DD67PA), A + ; set LP strobe + LD A, 00010100b + OUT (DD67PC),A + +.wait_lp: + ; wait printer ack + IN A, (PIC_DD75RS) + AND PRINTER_IRQ + JP NZ, .wait_lp + ; remove LP strobe + LD A, 00000100b + OUT (DD67PC), A + RET + +; ------------------------------------------------------ +; Out char to console +; Inp: C - char +; ------------------------------------------------------ +m_con_out: + PUSH HL + PUSH DE + PUSH BC + CALL m_con_out_int + POP BC + POP DE + POP HL + RET + +; ------------------------------------------------------ +; Out char C to console +; ------------------------------------------------------ +m_con_out_int: + LD DE, M_VARS.esc_mode + LD A, (DE) + DEC A + OR A ; TODO: unused (save 1b 4t) + JP M, m_print_no_esc ; esc_mode=0 - standart print no ESC mode + JP NZ, m_print_at_xy ; esc_mode=2 (graphics) + + ; handle ESC param (esc_mode=1) + INC DE ; TODO: replace to INC E E=0xd3 save 2t + LD A, (DE) + OR A + JP P, get_esc_param + LD A, C + AND 0xf ; convert char to command code + LD (DE), A + INC DE ; TODO: replace to INC E E=0xd3 save 2t + XOR A + LD (DE), A + RET + +get_esc_param: + LD HL, M_VARS.esc_cmd + LD B, (HL) ; TODO: replace to INC L L=0xd4 save 2t + INC HL ; HL -> param count + LD A, (HL) + INC A + LD (HL), A + ; store new param + LD E, A + LD D, 0x0 + ADD HL, DE ; HL -> parameter[param_count] + LD (HL), C ; store letter as esc parameter + ; get params count for esc command + LD HL, esc_params_tab + LD E, B ; d=0, b = cmd + ADD HL, DE ; DE - command offset + CP (HL) + ; return if enough + RET M + +;esc_set_mode: + LD HL, M_VARS.esc_cmd + LD A, (HL) + AND 0x0f ; mask (cmd=0..15) + LD E, A + DEC HL ; HL -> esc_mode + OR A + LD (HL), 2 ; mode=2 for cmd=0 + RET Z ; just return, no handler there + + LD D, 0 ; TODO: remove, D already 0 + LD (HL), D ; reset mode to 0 for other + DEC DE ; DE = cmd-1 + +;co_get_hdlr: + ; Calc ESC command handler offset + LD HL, esc_handler_tab + ADD HL, DE + ADD HL, DE + LD E, (HL) + INC HL + LD D, (HL) + ; HL = addr of handler func + EX DE, HL + ; It is 1..4 func DRAW_* func? + CP 0x4 + JP P, esc_no_draw_fn + LD A, (M_VARS.screen_mode) + AND 00000011b + ; If not in graphics mode - exit + JP NZ, esc_exit + +esc_no_draw_fn: + LD DE, esc_exit + PUSH DE + + ; Jump to ESC func handler + JP (HL) + +esc_exit: + XOR A + LD (M_VARS.esc_mode), A + RET + + ; Count of parameters for ESC commands + ; 0xe1cb +esc_params_tab: + DB 3, 5, 4, 3, 1, 2, 1, 1 + DB 1, 2, 1, 5, 5, 7, 6, 4 + +esc_handler_tab: + DW esc_draw_fill_rect ;5 1x1y1x2y2m + DW esc_draw_line ;4 2x1y1x2y2 + DW esc_draw_dot ;3 3xxyy + DW esc_set_color ;1 4N N=1..4 + DW esc_set_cursor ;2 5rc r-Row, c-Col + DW esc_set_vmode ;1 6m m-mode: + ; C 0 - 40x25 cursor on + ; M 1,2 - 64x25 cursor on + ; M 3 - 80x25 cursor on + ; C 4 - 40x25 cursor off + ; M 5,6 - 64x25 cursor off + ; M 7 - 80x25 cursor off + ; M 8 - 20rows mode + ; 9 - cursor off + ; 10 - cursor on + DW esc_set_charset ;1 7n where n is: + ; 0 - LAT Both cases + ; 1 - RUS Both cases + ; 2 - LAT+RUS Upper case + DW esc_set_palette ;1 8c c - Foreground+Backgound + DW esc_set_cursor2 ;2 9xy + DW esc_print_screen ;1 : + DW esc_draw_circle ;5 ;xyraxay X,Y, Radius, aspect ratio X, aspect ratio Y + DW esc_paint ;5 = + DW esc_picture ;6 > + DW esc_set_beep ;4 ?ppdd pp-period (word), dd - duration (word) + +esc_set_beep: + ; param byte 1+2 -> period + LD DE, M_VARS.esc_param + LD A, (DE) + LD H, A + INC DE + LD A, (DE) + LD L, A + LD (M_VARS.beep_period), HL + ; param byte 3+4 -> duration + INC DE + LD A, (DE) + LD H, A + INC DE + LD A, (DE) + LD L, A + LD (M_VARS.beep_duration), HL + RET + +esc_set_cursor2: + JP esc_set_cursor + +esc_print_screen: + LD A, (M_VARS.screen_mode) + AND 00000011b + RET NZ ; ret if not 0-3 mode + LD DE, 0x30ff + CALL m_print_hor_line + DEC E + LD D, 0xf0 + +.chk_keys: + CALL m_con_status + OR A + JP Z, .no_keys + CALL m_con_in + CP ASCII_ESC + RET Z + +.no_keys: + CALL m_print_hor_line + DEC E + JP NZ, .chk_keys + LD D, 0xe0 ; 224d + CALL m_print_hor_line + RET + +; ------------------------------------------------------ +; Print line to printer +; D - width +; ------------------------------------------------------ +m_print_hor_line: + LD HL, cmd_esc_set_X0 + + ; Set printer X coordinate = 0 + CALL m_print_cmd + LD HL, 4 + LD (M_VARS.prn_start_x), HL ; Set start coord X = 4 + LD B, 0x0 ; TODO: LD B, H (save 1b 3t) + +.print_next_col: + LD C, 0x0 + ; 1 + CALL m_get_7vpix + AND D + CALL NZ, m_print_vert_7pix + LD HL, (M_VARS.prn_start_x) + INC HL + + ; inc X + LD (M_VARS.prn_start_x), HL + LD C, 0x1 + ; 2 + CALL m_get_7vpix + AND D + CALL NZ, m_print_vert_7pix + LD HL, (M_VARS.prn_start_x) + INC HL + ; inc X + LD (M_VARS.prn_start_x), HL + INC B + LD A, B + CP 236 + JP C, .print_next_col + LD HL, cmd_esc_inc_Y2 + CALL m_print_cmd + RET + +; ------------------------------------------------------ +; Send command to printer +; Inp: HL -> command bytes array +; ------------------------------------------------------ +m_print_cmd: + PUSH BC +.print_nxt: + LD A, (HL) + CP ESC_CMD_END + JP Z, .cmd_end + LD C, A + CALL m_char_print + INC HL + JP .print_nxt +.cmd_end: + POP BC + RET + +; ------------------------------------------------------ +; Print 7 vertical pixels to printer +; Inp: A - value to print +; ------------------------------------------------------ +m_print_vert_7pix: + PUSH AF + ; Set coordinate X to 0 + LD HL, cmd_esc_set_X + CALL m_print_cmd + LD HL, (M_VARS.prn_start_x) + LD C,H + CALL m_char_print + LD C,L + CALL m_char_print + ; Set column print mode + LD HL, cmd_esc_print_col + CALL m_print_cmd + POP AF + ; Print 7 vertical pixels + LD C, A + CALL m_char_print + RET + +; ------------------------------------------------------ +; Control codes for printer УВВПЧ-30-004 +; ------------------------------------------------------ +; Zn - Increment Y coordinate +; 0xe2a5 +cmd_esc_inc_Y2: + DB ASCII_ESC + DB 'Z' + DB 2h + DB ESC_CMD_END + +; Xnn - Set X coordinate +cmd_esc_set_X0: + DB ASCII_ESC + DB 'X' + DB 0h ; 0..479 + DB 0h + DB ESC_CMD_END + +; ------------------------------------------------------ +; X - Start on "Set X coordinate" command +; ------------------------------------------------------ +cmd_esc_set_X: + DB ASCII_ESC + DB 'X' + DB ESC_CMD_END + +; O - Column print (vertical 7 bit) +cmd_esc_print_col: + DB ASCII_ESC + DB 'O' + DB ESC_CMD_END + +; ------------------------------------------------------ +; Get 7 vertical pixels from screen +; Inp: C - sheet +; Out: A - byte +; ------------------------------------------------------ +m_get_7vpix: + LD A, (M_VARS.row_shift) + ADD A, B + ADD A, 19 ; skip first 20pix + LD L, A + PUSH DE + PUSH BC + LD A, E + +.calc_pix_no: + AND 0x7 + LD B, A + LD A, E + ; calc hi addr + RRA ; /8 + RRA + RRA + AND 0x1f + ADD A, A ; *2 + ADD A, 64 ; bytes per row + LD H, A + ; select sheet 0|1 + LD A, C + AND 0x1 + ADD A, H + LD H, A + ; HL = pix addr, turn on VRAM access + LD A, 0x1 + OUT (SYS_DD17PB), A + LD E, (HL) ; read pixel + INC H ; HL += 512 + INC H + LD D, (HL) ; read pixel row+1 + + ; turn off VRAM access + ;v8 XOR A + LD A, 0 + OUT (SYS_DD17PB), A +.for_all_pix: + DEC B + JP M, .all_shifted + ; shift pixels D >> [CF] >> E + LD A, D + RRA + LD D, A + LD A, E + RRA + LD E, A + JP .for_all_pix +.all_shifted: + LD A, E + LD D, 0 + RRA + JP NC,.not_1_1 + LD D,00110000b +.not_1_1: + RRA + JP NC, .not_1_2 + LD A, D + OR 11000000b + LD D, A +.not_1_2: + LD A, D + POP BC + POP DE + RET + +esc_set_palette: + LD A, (M_VARS.esc_param) + AND 00111111b ; bgcol[2,1,0],pal[2,1,0] + LD (M_VARS.cur_palette), A + LD B, A + LD A, (M_VARS.screen_mode) + AND 00000011b + LD A, 0x0 + JP NZ, esp_no_colr + LD A, 0x40 + +esp_no_colr: + OR B + OUT (VID_DD67PB), A + RET + +esc_set_charset: + LD A, (M_VARS.esc_param) + AND 0x3 ; charset 0..3 + LD (M_VARS.codepage), A + RET + +; ------------------------------------------------------ +; Get address for draw symbol glyph +; Inp: A - ascii code +; Out: HL -> glyph offset +; ------------------------------------------------------ +m_get_glyph: + LD L, A ; L = ascii code + LD E, A ; E = ascii code + XOR A + LD D, A + LD H, A + ; HL = DE = ascii code + ADD HL, HL + ADD HL, DE + ADD HL, HL + ADD HL, DE + ; HL = A * 7 + LD A, E ; A = A at proc entry + CP '@' + ; First 64 symbols is same for all codepages + JP M, .cp_common + LD A, (M_VARS.codepage) + OR A + ; cp=0 - Latin letters + JP Z, .cp_common + DEC A + ; cp=1 - Russian letters + JP Z, .cp_rus + ; cp=2 - 0x40..0x5F - displayed as Lat + ; 0x60 - 0x7F - displayed as Rus + LD A, E + CP 0x60 + JP M, .cp_common +.cp_rus: + LD DE, 448 ; +448=64*7 Offset for cp1 + ADD HL, DE + +.cp_common: + LD DE, m_font_cp0-224 ; m_font_cp0-32*7 + ADD HL, DE ; add symbol glyph offset + RET + + +; -------------------------------------------------- +; Console output +; Inp: C - char +; -------------------------------------------------- +m_print_no_esc: + LD A, C + AND 0x7f ; C = 0..127 ASCII code + CP ASCII_SP ; C < ' '? + JP M, m_handle_esc_code ; jump if less + CALL m_get_glyph + EX DE, HL + LD A, (M_VARS.screen_mode) + AND 0x3 + JP NZ, mp_mode_64 ; jump to non color modes + + CALL calc_addr_40 + INC L + ; Access to VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + DEC H + DEC H + ; one or two bytes + LD A, B + OR B + JP Z, .l1 + DEC B + JP Z, .l2 + DEC B + JP Z, .l3 + JP .l4 +.l1: + INC H + INC H + LD BC, 0xffc0 + LD A, 0x0 + JP .l5 +.l2: + LD BC, 0xf03f + LD A, 0x6 + JP .l5 +.l3: + LD BC, 0xfc0f + LD A, 0x4 + JP .l5 +.l4: + LD BC, 0xff03 + LD A, 0x2 +.l5: + LD (M_VARS.esc_var1), A + EX DE, HL + +.sym_draw: + LD A, (M_VARS.esc_var1) + PUSH HL + LD L, (HL) + LD H, 0x0 + OR A + JP Z, .pne_l8 + +.pne_l7: + ADD HL, HL + DEC A + JP NZ, .pne_l7 + +.pne_l8: + EX DE, HL + LD A, (HL) + AND C + LD (HL), A + LD A, (M_VARS.curr_color) + AND E + OR (HL) + LD (HL), A + INC H + LD A, (HL) + AND C + LD (HL), A + LD A, (M_VARS.curr_color+1) + AND E + OR (HL) + LD (HL), A + INC H + LD A, (HL) + AND B + LD (HL), A + LD A, (M_VARS.curr_color) + AND D + OR (HL) + LD (HL), A + INC H + LD A, (HL) + AND B + LD (HL), A + LD A, (M_VARS.curr_color+1) + AND D + OR (HL) + LD (HL), A + INC L + DEC H + DEC H + DEC H + EX DE, HL + POP HL + INC HL + LD A, (M_VARS.esc_var0) + DEC A + LD (M_VARS.esc_var0), A + JP NZ, .sym_draw + + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + + ; draw cursor on return + LD HL, m_draw_cursor + PUSH HL + LD HL, M_VARS.cursor_row + +; -------------------------------------------------- +; Handle ASCII_CAN (cursor right) +; Inp: HL - cursor pos +; -------------------------------------------------- +m40_rt: + INC HL + LD A, (HL) ; a = col + ADD A, 1 ; col+1 + AND 0x3f ; screen column 0..63 + LD (HL), A ; save new col + CP 40 + DEC HL + RET M ; Return if no wrap + +m40_wrap_rt: + INC HL + XOR A + LD (HL), A + DEC HL + LD A, (M_VARS.screen_mode) + AND 0x08 ; screen_mode=8? + JP NZ, m2_lf + +; -------------------------------------------------- +; Handle ASCII_LF (cursor down) +; Inp: HL - cursor pos +; -------------------------------------------------- +m40_lf: + LD A, (HL) + ADD A, 10 + CP 248 + JP NC, scroll_up + LD (HL), A + RET + +; -------------------------------------------------- +; Handle ASCII_BS (cursor left) +; Inp: HL - cursor pos +; -------------------------------------------------- +m40_bksp: + INC HL + LD A, (HL) + SUB 1 ; TODO: DEC A + AND 0x3f ; A=0..63 + CP 0x3f + JP Z, .wrap + LD (HL), A + DEC HL + RET + +.wrap: + LD A, 39 + LD (HL), A + DEC HL + ; and cursor up + +; -------------------------------------------------- +; Handle ASCII_EM (cursor up) +; Inp: HL - cursor pos +; -------------------------------------------------- +m40_up: + LD A, (HL) + SUB 10 ; 10 rows per symbol + JP NC, .up_no_minus + LD A, 240 ; wrap to bottom +.up_no_minus: + LD (HL), A + RET + +; -------------------------------------------------- +; Handle ASCII_TAB (cursor right 8 pos) 20rows mode +; Inp: HL - cursor pos +; -------------------------------------------------- +m20_tab: + INC HL + LD A, (HL) + ADD A, 8 + AND 0x3f ; wrap A=0..63 + LD (HL), A + CP 40 + DEC HL + RET M ; ret if column <40 + JP m40_wrap_rt ; or wrap to next line + +; -------------------------------------------------- +; Calculate VRAM address in 40 column mode +; -------------------------------------------------- +calc_addr_40: + LD HL, (M_VARS.cursor_row) + LD A, (M_VARS.row_shift) + ADD A, L + LD L, A + LD A, H + CP 4 + LD B, A + JP M, .l2 + AND 0x3 + LD B, A + LD A, H + OR A + RRA + OR A + RRA + LD C, A + LD H, 0x6 + XOR A + +.l1: + ADD A, H + DEC C + JP NZ, .l1 + ADD A, B + +.l2: + ADD A, B + ADD A, 66 + LD H, A + LD A, 0x7 + LD (M_VARS.esc_var0),A + RET + +m2_lf: + LD A, (HL) + ADD A, 10 + CP 15 + JP NC, .lf_nowr + LD (HL), A + RET + +.lf_nowr: + LD A, (M_VARS.row_shift) + LD L, A + ADD A, ASCII_LF + LD E, A + LD C, ASCII_BS + ; Access to VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + +.cas_l5: + LD B, 0x40 + LD H, 0x40 ; TODO: LD H, B save 1b 3t + LD D, H + +.cas_l6: + LD A, (DE) + LD (HL), A + INC H + INC D + DEC B + JP NZ, .cas_l6 + INC L + INC E + DEC C + JP NZ, .cas_l5 + LD C, 10 + LD A, (M_VARS.row_shift) + ADD A, 8 + LD E, A + +.cas_l7: + LD B, 0x40 + LD D, 0x40 ; TODO: LD D, B save 1b 3t + XOR A + +.cas_l8: + LD (DE),A + INC D + DEC B + JP NZ,.cas_l8 + INC E + DEC C + JP NZ,.cas_l7 + LD A,0x0 + OUT (SYS_DD17PB),A + RET + + +; --------------------------------------------------- +; Handle ASCII_BS (cursor left) in 20row mode +; --------------------------------------------------- +m20_bksp: + INC HL + LD A, (HL) + OR A + DEC HL + RET Z + + INC HL + SUB 1 ; TODO: DEC A - save 1b 2t + AND 0x3f + LD (HL), A + DEC HL + RET + +; --------------------------------------------------- +; Print symbol in 64x25 mode +; --------------------------------------------------- +mp_mode_64: + CP 3 ; + JP Z, mp_mode_80 ; jump for screen_mode=3 + ; calc symbol address in VRAM + LD HL, (M_VARS.cursor_row) + LD A, (M_VARS.row_shift) + ADD A, L + LD L, A + LD A, H + ADD A, 0x40 + LD H, A + ; + LD C, 7 ; symbol height + + ; Access VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + + EX DE, HL + XOR A + LD (DE), A + INC E + +.next_row: + LD A, (HL) + ADD A, A + LD (DE), A + INC HL + INC E + DEC C + JP NZ, .next_row + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + ; draw cursor at end + LD HL, m_draw_cursor + PUSH HL + LD HL, M_VARS.cursor_row + +; -------------------------------------------------- +; Handle ASCII_CAN (cursor right) in 64x25 mode +; Inp: HL - cursor pos +; -------------------------------------------------- +m64_rt: + INC HL + LD A, (HL) + ADD A, 1 + AND 0x3f ; wrap + LD (HL), A + DEC HL + RET NZ ; ret if no wrap + +; -------------------------------------------------- +; Handle ASCII_LF (cursor down) in 64x25 mode +; Inp: HL - cursor pos +; -------------------------------------------------- +m64_lf: + LD A, (HL) + ADD A, 10 + CP 248 + JP NC, scroll_up + LD (HL), A + RET + +; -------------------------------------------------- +; Scroll Up for 10 rows +; -------------------------------------------------- +scroll_up: + LD A, (M_VARS.row_shift) + ADD A, 10 + OUT (SYS_DD17PA), A ; Scroll via VShift register + LD (M_VARS.row_shift), A ; store new VShift value + ; calc bottom 16 rows address in VRAM + LD HL, 0x40f0 ; 240th VRAM byte + ADD A, L + LD L, A + LD C, H + + ; Access to VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + + XOR A + LD DE, 0x1040 ; D=16 E=64 (512/8 bytes in row) + +.next_row: + LD H, C + LD B, E + + ; clear 64 bytes (512px in mono or 256px in color mode) +.next_col: + LD (HL), A + INC H ; next column + DEC B + JP NZ, .next_col + INC L ; next row address + DEC D ; row counter - 1 + JP NZ, .next_row + + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + RET + +; -------------------------------------------------- +; Handle ASCII_BS (cursor left) in 64x25 mode +; Inp: HL - cursor pos +; -------------------------------------------------- +m64_bs: + INC HL + LD A, (HL) + SUB 1 ; TODO: DEC A - save 1b 2t + AND 0x3f ; wrap column (0..63) + LD (HL), A + CP 63 + DEC HL + RET NZ + ; cursor up if wrapped + +; -------------------------------------------------- +; Handle ASCII_EM (cursor up) in 64x25 mode +; Inp: HL - cursor pos +; -------------------------------------------------- +m64_up: + LD A, (HL) + SUB 10 + JP NC, .no_wrap + LD A, 240 + +.no_wrap: + LD (HL), A + RET + +; -------------------------------------------------- +; Handle ASCII_TAB (cursor column + 8) in 64x25 mode +; Inp: HL - cursor pos +; -------------------------------------------------- +m64_tab: + INC HL + LD A, (HL) + ADD A, 8 + AND 0x38 + LD (HL), A + DEC HL + RET NZ ; return if no wrap + ; cursor down if wrap + JP m64_lf + +; -------------------------------------------------- +; Print symbols in 80x25 mode +; -------------------------------------------------- +mp_mode_80: + CALL calc_addr_80 + ; Access to VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + + ; fix address + EX DE, HL + INC E + ; make bitmask + LD A, B + OR A + JP Z, .l1 + DEC A + JP Z, .l2 + DEC A + JP Z, .l3 + JP .l4 + +.l1: + LD B, (HL) + LD A, (DE) + AND 0xc0 + OR B + LD (DE), A + INC HL + INC E + DEC C + JP NZ, .l1 + JP .l6 +.l2: + LD A, (HL) + RRCA + RRCA + AND 0x7 + LD B, A + LD A, (DE) + AND 0xf0 + OR B + LD (DE), A + LD A, (HL) + RRCA + RRCA + AND 0xc0 + LD B, A + DEC D + LD A, (DE) + AND 0x1f + OR B + LD (DE), A + INC D + INC HL + INC E + DEC C + JP NZ, .l2 + JP .l6 +.l3: + LD A, (HL) + RRCA + RRCA + RRCA + RRCA + AND 0x1 + LD B, A + LD A, (DE) + AND 0xfc + OR B + LD (DE), A + LD A, (HL) + RRCA + RRCA + RRCA + RRCA + AND 0xf0 + LD B, A + DEC D + LD A, (DE) + AND 0x7 + OR B + LD (DE), A + INC D + INC HL + INC E + DEC C + JP NZ, .l3 + JP .l6 +.l4: + DEC D +.l5: + LD A, (HL) + RLCA + RLCA + LD B, A + LD A, (DE) + AND 0x1 + OR B + LD (DE), A + INC HL + INC E + DEC C + JP NZ, .l5 + INC D + +.l6: + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + ; Draw cursor after symbol + LD HL, m_draw_cursor + PUSH HL + LD HL, M_VARS.cursor_row + +; -------------------------------------------------- +; Handle ASCII_CAN (cursor right) in 80x25 mode +; Inp: HL - cursor pos +; -------------------------------------------------- +m80_rt: + INC HL + LD A, (HL) + ADD A, 1 ; inc column + AND 0x7f + LD (HL), A + CP 80 + DEC HL + RET M ; return if no wrap + +m80_col_wrap: + INC HL + XOR A + LD (HL), A + DEC HL + ; and move cursor to next row + +; -------------------------------------------------- +; Handle ASCII_LF (cursor down) in 80x25 mode +; Inp: HL - cursor pos +; -------------------------------------------------- +m80_lf: + LD A, (HL) + ADD A, 10 + CP 248 + JP NC, scroll_up + LD (HL), A + RET + +; -------------------------------------------------- +; Handle ASCII_BS (cursor left) in 80x25 mode +; Inp: HL - cursor pos +; -------------------------------------------------- +m80_bs: + INC HL + LD A, (HL) + SUB 1 ; TODO: DEC A - save 1b 2t + AND 0x7f ; mask [0..127] + CP 127 + JP Z, .wrap + LD (HL), A + DEC HL + RET + +.wrap: + LD A, 79 + LD (HL), A + DEC HL + ; and move cursor to previous line + +; -------------------------------------------------- +; Handle ASCII_EM (cursor up) in 80x25 mode +; Inp: HL - cursor pos +; -------------------------------------------------- +m80_up: + LD A, (HL) + SUB 10 + JP NC, .no_wrap + LD A, 240 + +.no_wrap: + LD (HL), A + RET + +; -------------------------------------------------- +; Handle ASCII_TAB (cursor column + 8) in 80x25 mode +; Inp: HL - cursor pos +; -------------------------------------------------- +m80_tab: + INC HL + LD A, (HL) + ADD A, 8 + AND 0x7f + LD (HL), A + CP 80 + DEC HL + RET M ; return if no cursor wrap + JP m80_col_wrap + +; -------------------------------------------------- +; Calculate address for cursor pos for 80x25 mode +; Out: HL -> VRAM +; B -> pixel pos in byte +; -------------------------------------------------- +calc_addr_80: + LD HL, (M_VARS.cursor_row) + LD A, (M_VARS.row_shift) + ADD A, L + LD L, A + LD A, H + CP 4 + LD B, A + JP M, mns_ep_fm_0 + AND 3 + LD B, A + LD A, H + OR A + RRA + OR A + RRA + LD C, A + LD H, 3 + XOR A +mns_l1: + ADD A, H + DEC C + JP NZ, mns_l1 + ADD A, B +mns_ep_fm_0: + ADD A, 0x42 + LD H, A + LD C, 0x7 + RET + +; -------------------------------------------------- +; Clear screen and set cursor to 0,0 +; Inp: HL -> cursor position +; -------------------------------------------------- +m_clear_screen: + LD A, (M_VARS.screen_mode) + AND 0x8 + JP NZ, m_clear_20_rows ; for bit 4 is set, clear only 20 rows + ; all in black + LD A, 01111111b + OUT (VID_DD67PB), A ; C/M=1 FL=111 CL=111 All black + ; Access VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + LD DE, video_ram + EX DE, HL + LD A, H + ADD A, 0x40 ; A=0x80 + LD B, 0 + +.fill_scrn: + LD (HL), B + INC HL + CP H + JP NZ, .fill_scrn ; fill while HL<0x8000 + + EX DE, HL + LD A, (M_VARS.cur_palette) + LD B, A ; B = current palette + LD A, (M_VARS.screen_mode) + AND 0x3 ; color? + LD A, 0x0 + JP NZ, .mono_mode + LD A, 01000000b +.mono_mode: + OR B + ; Restore mode and palette + OUT (VID_DD67PB), A + + ; And set cursor to home position + +; -------------------------------------------------- +; Set cursor to 0,0 and close VRAM access +; Inp: HL -> cursor_row +; -------------------------------------------------- +m_cursor_home: + XOR A + NOP + NOP + LD (HL), A + INC HL + XOR A + LD (HL), A + DEC HL + ;XOR A + LD A, 0 + ; Disable VRAM access + OUT (SYS_DD17PB), A + RET + +; Clear only 20 rows +m_clear_20_rows: + ; take row shift in account + LD A, (M_VARS.row_shift) + LD L, A + LD C, 20 + + ; Access VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + +.next_row: + LD H, 0x40 ; HL = 0x4000 + shift_row + LD B, 64 ; 64 bytes at row + XOR A +.next_col: + LD (HL), A + INC H ; next column + DEC B + JP NZ, .next_col + INC L ; next row + DEC C + JP NZ, .next_row + ; Disabe VRAM access + LD A, 0 + OUT (SYS_DD17PB), A + JP m_cursor_home + +; -------------------------------------------------- +; Draw cursor at current cursor position +; if not hidden +; -------------------------------------------------- +m_draw_cursor: + LD A, (M_VARS.screen_mode) + AND 0x4 ; check hidden cursor bit + RET NZ ; return if hidden + LD A, (M_VARS.screen_mode) + AND 0x3 ; check color mode (40 column mode 6x7 font) + JP NZ, .dc_mode_64 + + EX DE, HL + LD HL, (M_VARS.cursor_row) + LD A, H ; cursor column + CP 40 ; > 40? + EX DE, HL + RET P ; ret if column out of screen + + PUSH HL + EX DE, HL + CALL calc_addr_40 + ; Access to VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + ; previous address + DEC H + DEC H + INC L + LD C, 7 ; cursor size + ; build masks + LD A, B + OR B + JP Z, .dc_rt2 + DEC B + JP Z, .dc_mid + DEC B + JP Z, .dc_lt + JP .dc_rt1 +.dc_rt2: + INC H + INC H + LD DE, 0x001f + JP .dc_put +.dc_mid: + LD DE, 0x07c0 + JP .dc_put +.dc_lt: + LD DE, 0x01f0 + JP .dc_put +.dc_rt1: + LD DE, 0x007c + +.dc_put: + ; xor cursor mask with VRAM[HL] value + ; left bytes + LD A, (HL) + XOR E + LD (HL), A + INC H + LD A, (HL) + XOR E + LD (HL), A + ; right bytes + INC H + LD A, (HL) + XOR D + LD (HL), A + INC H + LD A, (HL) + XOR D + LD (HL), A + ; next cursor row address + INC L + DEC H + DEC H + DEC H + DEC C + JP NZ, .dc_put ; draw next cursor row if c>0 + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + POP HL + RET + + ; draw cursor in 64 column mode +.dc_mode_64: + CP 3 ; screen_mode = 3 - 80 rows + JP Z, .dc_mode_80 + EX DE, HL + LD HL, (M_VARS.cursor_row) ; H - col, L - row + ; take into account the vertical shift + LD A, (M_VARS.row_shift) + ADD A, L + LD L, A + ; + LD A, H + CP 64 ; check column + EX DE, HL + RET P ; return if column out of screen + EX DE, HL + ; calc VRAM address + ADD A, 0x40 + LD H, A + ; Access to VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + + LD BC, 0x7f08 ; B=01111111b - mask, C=8 - cursor size +.cur_64_next: + ; xor with VRAM content + LD A, (HL) + XOR B + LD (HL), A + ; next row address + INC L + DEC C + JP NZ, .cur_64_next + EX DE, HL + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + RET + + ; draw cursor in 80 column mode +.dc_mode_80 + EX DE, HL + LD HL, (M_VARS.cursor_row) + + LD A, H + CP 80 + EX DE, HL + RET P ; return if column > 80 + + PUSH HL + CALL calc_addr_80 + LD C, 7 ; cursor size + INC L + + ; Access to VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + ; mask + LD A, B + OR A + LD B, 0x1f + JP Z, .dc_1_byte + DEC A + LD DE, 0xc007 + JP Z, .dc_2_byte + DEC A + LD DE, 0xf001 + JP Z, .dc_2_byte + LD B, 0x7c + DEC H + JP .dc_1_byte ; TODO: unused + +.dc_1_byte: + ; xor with VRAM byte + LD A, (HL) + XOR B + LD (HL), A + INC L + DEC C + JP NZ, .dc_1_byte + JP .dc_80_end + +.dc_2_byte: + ; xor with previous byte + DEC H + LD A, (HL) + XOR D + LD (HL), A + ; xor with current byte + INC H + LD A, (HL) + XOR E + LD (HL), A + ; next cursor address + INC L + DEC C + JP NZ, .dc_2_byte + +.dc_80_end: + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + POP HL + RET + +; -------------------------------------------------- +; If ESC character, turn esc_mode ON +; Inp: A - ASCII symbol +; -------------------------------------------------- +m_handle_esc_code: + CP ASCII_ESC + JP NZ, m_handle_control_code + ; turn on ESC mode for next chars + LD HL, M_VARS.esc_mode + LD (HL), 0x1 ; turn on ESC mode + INC HL + LD (HL), 0xff ; esc_cmd = 0xff + RET + +; -------------------------------------------------- +; Handle one byte ASCII control code +; Inp: A - ASCII symbol +; -------------------------------------------------- +m_handle_control_code: + CP ASCII_BELL + JP Z, m_beep + LD HL, m_draw_cursor + PUSH HL + LD HL, M_VARS.cursor_row + PUSH AF + CALL m_draw_cursor + LD A, (M_VARS.screen_mode) + AND 0x08 ; 20-rows mode? + JP Z, handle_cc_common ; jump for normal screen modes + + ; for hidden cursor modes + POP AF + CP ASCII_TAB ; TAB + JP Z, m20_tab + CP ASCII_BS ; BKSP + JP Z, m20_bksp + CP ASCII_CAN ; Cancel + JP Z, m40_rt + CP ASCII_US ; ASCII Unit separator + JP Z, m_clear_20_rows + CP ASCII_LF ; LF + JP Z, m2_lf + CP ASCII_CR ; CR + RET NZ ; ret on unknown + INC HL + LD (HL), 0x0 + DEC HL + RET + +; -------------------------------------------------- +; Handle cursor for 40x25, 64x25, 80x25 modes +; -------------------------------------------------- +handle_cc_common: + POP AF + CP ASCII_US + JP Z, m_clear_screen + CP ASCII_FF + JP Z, m_cursor_home + PUSH AF + LD A, (M_VARS.screen_mode) + AND 3 ; check for color modes + JP NZ, .handle_cc_mono + ; 32x25 text mode + POP AF + CP ASCII_TAB ; cursor right +8 + JP Z, m20_tab + CP ASCII_BS ; cursor left + JP Z, m40_bksp + CP ASCII_CAN ; cursor right + JP Z, m40_rt + CP ASCII_EM ; cursor up + JP Z, m40_up + CP ASCII_SUB + JP Z, m40_lf ; cursor down + CP ASCII_LF + JP Z, m40_lf + CP ASCII_CR + RET NZ + INC HL + LD (HL), 0x0 ; move cursor to first column for CR + DEC HL + RET + +; -------------------------------------------------- +; Handle control chars for 64x25 or 80x25 modes +; -------------------------------------------------- +.handle_cc_mono: + LD A, (M_VARS.screen_mode) + CP 3 + JP Z, handle_cc_80x25 + CP 7 + JP Z, handle_cc_80x25 + ; 64x25 screen mode + POP AF + CP ASCII_TAB + JP Z, m64_tab + CP ASCII_BS + JP Z, m64_bs + CP ASCII_CAN + JP Z, m64_rt + CP ASCII_EM + JP Z, m64_up + CP ASCII_SUB + JP Z, m64_lf + CP ASCII_LF + JP Z, m64_lf + CP ASCII_CR + RET NZ + INC HL + LD (HL), 0x0 + DEC HL + RET + +; -------------------------------------------------- +; Handle control chars for 80x25 modes +; -------------------------------------------------- +handle_cc_80x25: + POP AF + CP ASCII_TAB + JP Z, m80_tab + CP ASCII_BS + JP Z, m80_bs + CP ASCII_CAN + JP Z, m80_rt + CP ASCII_EM + JP Z, m80_up + CP ASCII_SUB + JP Z, m80_lf + CP ASCII_LF + JP Z, m80_lf + CP ASCII_CR + RET NZ + INC HL + LD (HL), 0x0 + DEC HL + RET + +; -------------------------------------------------- +; +; -------------------------------------------------- +m_beep: + LD HL, (M_VARS.beep_duration) + EX DE, HL + LD HL, (M_VARS.beep_period) + LD A, 00110110b ; TMR#0 LSB+MSB Square Wave Generator + OUT (TMR_DD70CTR), A + LD A, L ; LSB + OUT (TMR_DD70C1), A + LD A, H ; MSB + OUT (TMR_DD70C1), A + LD A, (M_VARS.strobe_state) + LD B, A +m_bell_cont: + LD A, D ; DE=duration + OR E + RET Z ; ret if enough + DEC DE + LD A, B + XOR BELL_PIN + LD B, A + OUT (DD67PC), A ; Invert bell pin +m_bell_wait_tmr1: + IN A, (PIC_DD75RS) + AND TIMER_IRQ ; 0x10 + JP NZ, m_bell_wait_tmr1 + LD A, B + XOR BELL_PIN ; Flip pin again + LD B, A + OUT (DD67PC), A +m_bell_wait_tmr2: + IN A, (PIC_DD75RS) + AND TIMER_IRQ + JP Z,m_bell_wait_tmr2 + JP m_bell_cont + + +; ------------------------------------------------------ +; 5 Set cursor position +; ------------------------------------------------------ +esc_set_cursor: + CALL m_draw_cursor + LD DE, M_VARS.esc_param + LD HL, M_VARS.cursor_col + INC DE + LD A, (DE) ; column + SUB 32 + LD B, A + LD A, (M_VARS.screen_mode) + CP 3 + JP Z, .mode_80 + CP 7 + JP Z, .mode_80 + OR A + JP Z, .mode_40 + CP 4 + JP Z, .mode_40 + ; mode 64x25 + LD A, B + CP 64 + JP M, .common + LD A, 64 + JP .common + ; mode 40x25 +.mode_40: + LD A, B + CP 40 + JP M, .common + LD A, 40 + JP .common + ; mode 80x25 +.mode_80: + LD A, B + CP 80 + JP M, .common + LD A, 80 +.common: + LD (HL), A + DEC DE + DEC HL + LD A, (DE) + SUB 32 + CP 24 + JP C, esc_le_24 + LD A, 24 +esc_le_24: + LD B, A + ADD A, A + ADD A, A + ADD A, B + ADD A, A + LD (HL), A + CALL m_draw_cursor ; TODO change call+ret to jp + RET ; + +; ------------------------------------------------------ +; 6n Set video mode or cursor visibility +; Inp: n is +; 0 - C 32x25 with cursor; 0000 +; 1 - M 64x25 with cursor; 0001 +; 2 - M 64x25 with cursor; 0010 +; 3 - M 80x25 with cursor; 0011 +; 4 - C 32x25 no cursor; 0100 +; 5 - M 64x25 no cursor; 0101 +; 6 - M 64x25 no cursor; 0110 +; 7 - M 80x25 no cursor; 0111 +; 8 - M 20rows mode 1000 +; 9 - hide cursor 1001 +; 10 - show cursor 1010 +; ------------------------------------------------------ +esc_set_vmode: + LD HL, M_VARS.screen_mode + LD A, (M_VARS.cur_palette) + LD B, A + LD A, (M_VARS.esc_param) ; first parameter - video mode + AND 0xf + CP 11 + RET NC ; return if not valid input parameter + CP 9 + JP Z, .cursor_hide + CP 10 + JP Z, .cursor_show + LD (HL), A ; store new mode + CP 4 + JP Z, .set_color_mode + AND 0x3 ; monochrome (80x25, 64x25) mode? + LD A, 0 ; mode 512x254 mono + JP NZ, .skip_for_mono_mode + ; mode=0 or 4 -> 256x256px color +.set_color_mode: + LD A, 0x40 ; color mode +.skip_for_mono_mode: + OR B ; color mode with palette + OUT (VID_DD67PB), A ; configure screen mode + + LD HL, M_VARS.cursor_row + CALL m_clear_screen + +.draw_cursor: + CALL m_draw_cursor ; TODO change call+ret to jp + RET + +.cursor_hide: + LD A, (HL) ; screen_mode + OR 00000100b ; cursor hide + LD (HL), A + LD HL, M_VARS.cursor_row + JP .draw_cursor + +.cursor_show: + LD A, (HL) ; screen_mode + AND 11111011b ; cursor show + LD (HL), A + JP .draw_cursor + + +; ------------------------------------------------------ +; 4n n=1..4 Set drawing color +; ------------------------------------------------------ +esc_set_color: + LD A, (M_VARS.esc_param) +m_set_color: + AND 0x3 + RRA + LD B, A + LD A, 0x0 ; TODO: unused + SBC A, A + LD (M_VARS.curr_color), A + LD A, B + DEC A + CPL + LD (M_VARS.curr_color+1), A + RET + +;--------------------------------------------------- +; Print symbol or print sprite at X,Y coordinates +; Inp: param x,y +; C - character or sprite_no to draw +;--------------------------------------------------- +m_print_at_xy: + ; check video mode + LD A, (M_VARS.screen_mode) + AND 0x3 ; color? + JP NZ, esc_exit ; exit for mono modes + + LD A, C + AND 0x7f + LD C, A ; C = C with 7th bit reset + CP 0x1 + JP Z, .sprites_en ; enable sprite mode + + CP ASCII_SP + JP M, mode2_exit ; codes 0..31 - turm off game_mode + + ; check X, Y range to prevent drawing symbols out of screen + LD HL, M_VARS.esc_param + LD A, (HL) + LD E, A + ADD A, 8 + JP C, mode2_exit ; exit if esc_param[0]>247 + LD (HL), A + INC HL ; HL -> esc_param[1] + LD A, 247 + CP (HL) + JP C, mode2_exit ; exit if esc_param[1]>247 + ; calculate X,Y pixel address in VRAN + LD D, (HL) + CALL calc_px_addr + ; HL - address, B - pixel pos in byte + LD A, L + SUB 8 + LD L, A + PUSH HL ; save address + + LD A, (M_VARS.esc_var2) + OR A + JP NZ, .mode_sp + + ; font + LD A, C + CALL m_get_glyph + LD C, 7 + POP DE + INC E + JP .out_sp + + ; sprite mode +.mode_sp: + LD A, C + SUB 32 + CP 35 + JP NC, co_ex_l08 + + ; Calc sprite address + LD L, A ; HL=A - sprite_no + XOR A + LD H, A + ADD HL, HL + ADD HL, HL + ADD HL, HL ; HL=HL*8 + LD DE, game_sprite_tab + ADD HL, DE ; HL -> sprite + LD C, 8 ; bytes count + POP DE + + ; Out sprite + ; DE -> VRAM address + ; C - height +.out_sp: + LD A, (M_VARS.esc_param+2) + DEC A + JP Z, out_no_xor + +.next_line: + PUSH HL + ; Access Video RAM + LD A, 0x1 + OUT (SYS_DD17PB), A + LD L, (HL) ; load from table + LD H, 0x0 + LD A, B + OR A + JP Z, .l05 +.l04: + ADD HL, HL + DEC A + JP NZ, .l04 +.l05: + EX DE, HL + LD A, (M_VARS.curr_color) + AND E + XOR (HL) + LD (HL), A + INC H + INC H + LD A, (M_VARS.curr_color) + AND D + XOR (HL) + LD (HL), A + DEC H + LD A, (M_VARS.curr_color+1) + AND E + XOR (HL) + LD (HL), A + INC H + INC H + LD A, (M_VARS.curr_color+1) + AND D + XOR (HL) + LD (HL), A + DEC H + DEC H + DEC H + INC L + EX DE, HL + ; Disable VRAM + LD A, 0x0 + OUT (SYS_DD17PB), A + POP HL + INC HL + DEC C + JP NZ, .next_line + RET + +.sprites_en: + LD (M_VARS.esc_var2), A + RET + +mode2_exit: + XOR A + LD (M_VARS.esc_var2), A + JP esc_exit + +co_ex_l08: + POP DE + JP mode2_exit + +out_no_xor: + PUSH HL + ; Acess to VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + + LD L, (HL) + LD H, 0x0 + LD A, B + OR A + JP Z, .l11 +.l10: + ADD HL, HL + DEC A + JP NZ, .l10 +.l11: + EX DE, HL + PUSH BC + LD A, (M_VARS.curr_color) + CPL + LD B, A + LD A, (HL) + XOR B + OR E + XOR B + LD (HL), A + INC H + INC H + LD A, (HL) + XOR B + OR D + XOR B + LD (HL), A + DEC H + LD A, (M_VARS.curr_color+1) + CPL + LD B, A + LD A, (HL) + XOR B + OR E + XOR B + LD (HL), A + INC H + INC H + LD A, (HL) + XOR B + OR D + XOR B + LD (HL), A + DEC H + DEC H + DEC H + INC L + EX DE, HL + POP BC + + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + + POP HL + INC HL + DEC C + JP NZ, out_no_xor + RET + +game_sprite_tab: + DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; 0x00 + DB 0x7E, 0x81, 0xA5, 0x81, 0xBD, 0x99, 0x81, 0x7E ; 0x01 + DB 0x7E, 0xFF, 0xDB, 0xFF, 0xC3, 0xE7, 0xFF, 0x7E ; 0x02 + DB 0x00, 0x08, 0x08, 0x14, 0x63, 0x14, 0x08, 0x08 ; 0x03 + DB 0x36, 0x7F, 0x7F, 0x7F, 0x3E, 0x1C, 0x08, 0x00 ; 0x04 + DB 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x1C, 0x08, 0x00 ; 0x05 + DB 0x1C, 0x3E, 0x1C, 0x7F, 0x7F, 0x6B, 0x08, 0x1C ; 0x06 + DB 0x08, 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x08, 0x1C ; 0x07 + DB 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18 ; 0x08 + DB 0x18, 0xDB, 0x3C, 0xE7, 0xE7, 0x3C, 0xDB, 0x18 ; 0x09 + DB 0xE7, 0xE7, 0x00, 0x7E, 0x7E, 0x00, 0xE7, 0xE7 ; 0x0a + DB 0x7E, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x7E ; 0x0b + DB 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18 ; 0x0c + DB 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00 ; 0x0d + DB 0x00, 0x10, 0x30, 0x7F, 0x7F, 0x30, 0x10, 0x00 ; 0x0e + DB 0x00, 0x08, 0x0C, 0xFE, 0xFE, 0x0C, 0x08, 0x00 ; 0x0f + DB 0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11 ; 0x10 + DB 0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88 ; 0x11 + DB 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0 ; 0x12 + DB 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F ; 0x13 + DB 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ; 0x14 + DB 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF ; 0x15 + DB 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F ; 0x16 + DB 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0 ; 0x17 + DB 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 ; 0x18 + DB 0xCC, 0xCC, 0x33, 0x33, 0xCC, 0xCC, 0x33, 0x33 ; 0x19 + DB 0x70, 0x08, 0x76, 0xFF, 0xFF, 0xFF, 0x7E, 0x18 ; 0x1a + DB 0xC3, 0xDB, 0xDB, 0x18, 0x18, 0xDB, 0xDB, 0xC3 ; 0x1b + DB 0xFC, 0xCC, 0xFC, 0x0C, 0x0C, 0x0E, 0x0F, 0x07 ; 0x1c + DB 0xFE, 0xC6, 0xFE, 0xC6, 0xC6, 0xE6, 0x67, 0x03 ; 0x1d + DB 0x18, 0x3C, 0x3C, 0x18, 0x7E, 0x18, 0x24, 0x66 ; 0x1e + DB 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 ; 0x1f + DB 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 ; 0x20 + DB 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 ; 0x21 + DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF ; 0x22 + +; -------------------------------------------------- +; Calculate address of pixel in Video RAM +; Inp: DE - Y, X +; Out: HL - address +; B - offset in byte +; -------------------------------------------------- +calc_px_addr: + ; take into account the vertical displacement + LD A, (M_VARS.row_shift) + SUB D + DEC A + LD L, A + + LD A, E + AND 0x07 ; X mod 8 - offset in byte + LD B, A + + LD A, E + RRA + RRA + AND 00111110b + ADD A, 0x40 ; VRAM at 0x4000 + LD H, A + RET + + +;--------------------------------------------------- +; Draw filled rectanger +; Inp: esc param X1,Y2,X2,Y2 +; -------------------------------------------------- +esc_draw_fill_rect: + LD HL, M_VARS.esc_param + LD E, (HL) ; E=X1 + INC HL + LD C, (HL) ; C=Y1 + INC HL + INC HL + LD D, (HL) ; D=Y2 + LD A, D + SUB C ; delta Y + JP NZ, .non_zero_h + INC A ; 1 as minimum +.non_zero_h: + LD C, A ; C = height + ; DE = Y2, X1 + CALL calc_px_addr + ; HL -> videomem offset, b - pixel offset + + ; build pixel mask + XOR A +.shift_mask_l: + SCF + RLA + DEC B + JP P, .shift_mask_l + RRA + LD (M_VARS.pixel_mask_l), A + CPL ; invert + LD (M_VARS.pixel_mask_l_i), A + LD A, (M_VARS.esc_param+2) ; X2 + AND 0x7 ; 0..7 + LD B, A + XOR A +.shift_mask_r: + SCF + RLA + DEC B + JP P, .shift_mask_r + LD (M_VARS.pixel_mask_r_i), A + LD B, C + ; calc end address + LD A, (M_VARS.esc_param+2) ; X2 + RRA + RRA + AND 00111110b + ADD A, 0x40 + SUB H + RRCA + LD C, A ; C - width + INC B + LD A, (M_VARS.esc_param+4) + DEC A + JP NZ, .rectangle_xor + LD A, (M_VARS.pixel_mask_r_i) + CPL + LD (M_VARS.pixel_mask_r), A + LD D, A + LD A, (M_VARS.pixel_mask_l) + LD E, A + ; draw B horisontal lines +.next_line: + PUSH DE + PUSH HL + PUSH BC + CALL draw_line_h + POP BC + POP HL + POP DE + INC L + DEC B + JP NZ, .next_line + RET + + ; draw B horisontal lines (xor) +.rectangle_xor: + LD A, (M_VARS.pixel_mask_r_i) + LD (M_VARS.pixel_mask_r), A + LD D, A + LD A, (M_VARS.pixel_mask_l_i) + LD E, A + ; Access to VideoRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + +.edf_l6: + PUSH DE + PUSH HL + PUSH BC + LD A, C + OR A + JP NZ, .w_ne_0 ; jump if width != 0 + LD A, E ; merge masks E=E or D + OR D +.next_8px: + LD E, A +.w_ne_0: + LD B, E ; B - mask + EX DE, HL + LD HL, (M_VARS.curr_color) ; color + EX DE, HL + ; Set pixels - VideoRAM[HL] = color xor VideoRAM[HL] + LD A, E + AND B + XOR (HL) + LD (HL), A + ; And next byte + INC H + LD A, D + AND B + XOR (HL) + LD (HL), A + ; ---------- + INC H + LD A, C + OR A + JP Z, .complete + DEC C + ; right tail of line, use right mask +.r_mask: + LD A, (M_VARS.pixel_mask_r) + JP Z, .next_8px + ; full 8 bits without mask at middle of line +.next_full: + LD A, (HL) + XOR E + LD (HL), A + INC H + LD A, (HL) + XOR D + LD (HL), A + INC H + DEC C + JP NZ, .next_full + JP .r_mask +.complete: + POP BC + POP HL + POP DE + INC L + DEC B + JP NZ, .edf_l6 + ; Disable VideoRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + RET + +;--------------------------------------------------- +; Paint screen +; Inp: params X,Y,Color,repColor +;--------------------------------------------------- +esc_paint: + ; Save stack + LD HL, 0x0 + ADD HL, SP + LD (M_VARS.paint_sp_save), HL + + ; Set our own stack + LD HL, M_VARS.paint_stack ; TODO: Z80 LD SP,var i800 - LXI SP,nn + LD SP, HL + + ; save current color + LD HL, (M_VARS.curr_color) + LD (M_VARS.tmp_color), HL + + ; set color from param 3 + LD A, (M_VARS.esc_param+2) + DEC A + CALL m_set_color + + ; color to replace, from param 4 + LD A, (M_VARS.esc_param+3) + DEC A + LD (M_VARS.cmp_color), A + + ; HL - Y,X + LD A, (M_VARS.esc_param) + LD L, A + LD A, (M_VARS.esc_param+1) + LD H, A + LD (M_VARS.paint_y), A + + LD A, (M_VARS.esc_param+4) ; 0 - full fill, 1 - fast fill + DEC A + LD (M_VARS.esc_param), A + + LD A, 0x2 + LD (M_VARS.paint_var5), A ; task_no=2 + + EX DE, HL + CALL calc_px_addr + LD (M_VARS.esc_param+1), HL ; temporary ctore address of start fill point + ; make mask + LD A, 10000000b +.l1: + RLCA + DEC B + JP P, .l1 + + LD B, A + LD (M_VARS.esc_param+3), A ; store mask + + ; find left border + LD A, (M_VARS.cmp_color) + LD C, A + LD D, E ; D = X + CALL paint_find_left + ; find right border + LD HL, (M_VARS.esc_param+1) ; restore HL + LD A, (M_VARS.esc_param+3) ; restore mask + LD B, A + CALL paint_find_right + ; + LD HL, 0x0 + PUSH HL + PUSH HL + ; + LD A, (M_VARS.esc_param) ; A = fill mode + OR A + JP Z, ep_fm_0 + ; push fill task parameters + LD A, (M_VARS.paint_var5) + DEC A ; task_no-1 + LD H, A + LD L, E + PUSH HL + LD A, (M_VARS.paint_y) + LD H, A + LD L, D + PUSH HL + +ep_fm_0: + ; push fill task parameters + LD A, (M_VARS.paint_var5) ; task_no + LD H, A + LD L, E + PUSH HL + LD A, (M_VARS.paint_y) + LD H, A + LD L, D + PUSH HL + JP paint_task ; exec task + +ep_task_end: + LD A, (M_VARS.cmp_color) + LD C, A ; color to compare + + LD A, (M_VARS.esc_param) ; fill mode 0 - full, 1 - fast + OR A + JP NZ, ep_f_fast + + LD A, 0x2 + LD (M_VARS.paint_var7), A + LD A, (M_VARS.paint_var2) + CP 2 + JP Z, ep_l4 + JP ep_l5 ; TODO: change to one JP NZ + +ep_l4: + LD A, 1 + LD (M_VARS.paint_var5), A ; task_no? + JP ep_l8 + +ep_l5: + LD A, 2 + LD (M_VARS.paint_var5), A + JP ep_l11 + +ep_l6: + LD A, (M_VARS.paint_var7) + OR A + JP Z, paint_task + LD A, (M_VARS.paint_var2) + CP 2 + JP Z, ep_l5 ; TODO: change to one JP NZ + JP ep_l4 + +ep_f_fast: + LD A, (M_VARS.paint_var2) + LD (M_VARS.paint_var5), A + CP 1 ; TODO: DEC A - save 1b 3t + JP Z, ep_l8 ; TODO: change to one JP NZ + JP ep_l11 + +ep_l8: + LD A, (M_VARS.paint_var3) + LD D, A + LD A, (M_VARS.paint_var1) + LD E, A + LD HL, (M_VARS.esc_param+1) + LD A, (M_VARS.esc_param+3) + LD B, A + LD A, (M_VARS.paint_var4) + DEC A + JP Z, ep_l10 + LD (M_VARS.paint_y), A + INC L + CALL paint_find_next_right + JP Z, ep_l10 + LD HL, (M_VARS.esc_param+4) + LD A, (M_VARS.esc_param+6) + LD B, A + INC L + CALL paint_find_next_left + JP Z, ep_l10 + LD A, (M_VARS.esc_param) + OR A + JP NZ, ep_l9 + JP ep_l12 + +ep_l9: + LD A, (M_VARS.paint_var5) + LD H, A + LD L, E + PUSH HL + LD A, (M_VARS.paint_y) + LD H, A + LD L, D + PUSH HL + JP paint_task + +ep_l10: + LD A, (M_VARS.esc_param) + OR A + JP NZ, paint_task + LD A, (M_VARS.paint_var7) + DEC A + LD (M_VARS.paint_var7), A + JP ep_l6 + +ep_l11: + LD A, (M_VARS.paint_var3) + LD D, A + LD A, (M_VARS.paint_var1) + LD E, A + LD HL, (M_VARS.esc_param+1) + LD A, (M_VARS.esc_param+3) + LD B, A + LD A, (M_VARS.paint_var4) + INC A + CP 0xff + JP Z, ep_l10 + LD (M_VARS.paint_y), A + DEC L + CALL paint_find_next_right + JP Z, ep_l10 + LD HL, (M_VARS.esc_param+4) + LD A, (M_VARS.esc_param+6) + LD B, A + DEC L + CALL paint_find_next_left + JP Z, ep_l10 + LD A, (M_VARS.esc_param) + OR A + JP NZ, ep_l9 + JP ep_l12 + +; --------------------------------------------------- +; +; --------------------------------------------------- +paint_find_next_right: + CALL get_pixel + JP NZ, .l1 + CALL paint_find_left + LD A, 0xff + OR A + RET + +.l1: + LD A, D + CP E + RET Z + INC D + LD A, B + RLCA + LD B, A + JP NC, .l2 + INC H + INC H +.l2: + CALL get_pixel + JP NZ, .l1 + LD A, 0xff + OR A + RET + +; --------------------------------------------------- +; +; --------------------------------------------------- +paint_find_next_left: + CALL get_pixel + JP NZ, .l1 + CALL paint_find_right + LD A, 0xff + OR A + RET +.l1: + LD A, E + CP D + RET Z + DEC E + LD A, B + RRCA + LD B, A + JP NC, .l2 + DEC H + DEC H +.l2: + CALL get_pixel + JP NZ, .l1 + LD A, 0xff + OR A + RET + +ep_l12: + LD A, D + LD (M_VARS.pixel_mask_r), A + LD A, (M_VARS.paint_var5) + LD D, A + PUSH DE + LD A, (M_VARS.pixel_mask_r) + CP E + JP NZ, ep_l13 + LD L, A + LD A, (M_VARS.paint_y) + LD H, A + PUSH HL + JP ep_l16 +ep_l13: + LD D, E + CALL paint_find_left + LD E, D + LD A, (M_VARS.paint_y) + LD D, A + PUSH DE + LD A, (M_VARS.pixel_mask_r) + LD D, A + CP E + JP Z, ep_l16 +ep_l14: + DEC E + LD A, B + RRCA + LD B, A + JP NC, ep_l15 + DEC H + DEC H +ep_l15: + CALL get_pixel + JP NZ, ep_l14 + JP ep_l12 +ep_l16: + JP ep_l10 + +; --------------------------------------------------- +; Find rightmost pixel to fill +; In/Out: E = x_right +; HL - current pixel address +; B - pixel mask +; --------------------------------------------------- +paint_find_right: + LD A, E + CP 0xff + RET Z ; return if X=right border + INC E ; x=x+1 + ; rotate pixel mask right + LD A, B + RLCA + LD B, A + JP NC, .in_byte + ; inc addr+2 (2 byte per 8 pixels) + INC H + INC H + +.in_byte: + CALL get_pixel + JP Z, paint_find_right ; find until same color + ; border found, x-1 + DEC E + ; rotate mask back 1 px + LD A, B + RRCA + LD B, A + RET NC + ; addr-2 if previous byte + DEC H + DEC H + RET + +; --------------------------------------------------- +; Find leftmost pixel to fill +; In/Out: D = x_left +; HL - current pixel address +; B - pixel mask +; --------------------------------------------------- +paint_find_left: + LD A, D + OR A + RET Z ; return if x=0 + + DEC D ; x-1 + LD A, B + RRCA ; rotate mask to right + LD B, A + JP NC, .in_byte + DEC H ; addr-2 (2 byte for 8px) + DEC H + +.in_byte: + CALL get_pixel + JP Z, paint_find_left ; repeat until same color + + INC D ; border found, x+1 + ; mask rotate right + LD A, B + RLCA + LD B, A + RET NC + ; if CF, inc address+2 + INC H + INC H + RET + +; --------------------------------------------------- +; Inp: HL - address +; B - pixel mask +; C - color to compare +; Out: A - 0,1,2 +; ZF - set if color match +; --------------------------------------------------- +get_pixel: + ; Access to VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + ; get pixel and mask + LD A, (HL) + AND B + JP NZ, .bit1_set + INC H + LD A, (HL) + DEC H + AND B + JP NZ, .bit2_set + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + CP C + RET + +.bit1_set: + INC H + LD A, (HL) + DEC H + AND B + JP NZ, .bit12_set + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + LD A, 0x1 + CP C + RET + +.bit2_set: + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + LD A, 0x2 + CP C + RET + +.bit12_set: + LD A, 0x0 + OUT (SYS_DD17PB), A + LD A, 3 + CP C + RET + +paint_task: + POP HL ; L=x0, H=Y + LD (M_VARS.paint_var3), HL + EX DE, HL + + POP HL ; L=x1, H=mode + LD A, H + OR A + JP Z, paint_exit ; jump for mode=0 + + ; calc leftmost pixel address, mask for draw horisontal line + LD (M_VARS.paint_var1), HL + CALL calc_px_addr + LD (M_VARS.esc_param+1), HL + LD C, B + LD A, 0x80 +.lmp_mask: + RLCA + DEC B + JP P, .lmp_mask + LD (M_VARS.esc_param+3), A + ; calc rightmos pixel address and mask + LD A, (M_VARS.paint_var1) + LD E, A + LD A, (M_VARS.paint_var4) + LD D, A + CALL calc_px_addr + LD (M_VARS.esc_param+4), HL + LD D, B + LD A, 0x80 +.rmp_mask: + RLCA + DEC B + JP P, .rmp_mask + LD (M_VARS.esc_param+6), A + LD A, (M_VARS.esc_param+3) ; TODO: unused code + + XOR A +.lmi_mask: + SCF + RLA + DEC C + JP P, .lmi_mask + RRA + LD E, A ; E - left inv mask + + XOR A +.rmi_mask: + SCF + RLA + DEC D + JP P, .rmi_mask + CPL + LD D, A ; D - right inv mask + + LD (M_VARS.pixel_mask_r), A + LD HL, (M_VARS.esc_param+1) ; HL -> lext pix address + LD A, (M_VARS.esc_param+5) ; right pix address (low byte) + SUB H ; delta x + RRCA ; 2 byte for 8 pix + LD C, A ; C - line width + CALL draw_line_h + JP ep_task_end + +paint_exit: + LD HL, (M_VARS.tmp_color) ; restore previous current color + LD (M_VARS.curr_color), HL + LD HL, (M_VARS.paint_sp_save) ; restore previous stack + LD SP, HL + RET + +;--------------------------------------------------- +; Draw horizontal line +; Inp: C - width +; DE - left & right pixel mask +; HL - address of first byte of line +;--------------------------------------------------- +draw_line_h: + ; Access to VideoRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + LD A, C + OR A + JP NZ, .width_ne0 + LD A, E ; join left and right masks + OR D +.next_byte: + LD E, A +.width_ne0: + LD B, E + EX DE, HL + LD HL, (M_VARS.curr_color) + EX DE, HL + ; Get pixels, apply colors + LD A, (HL) + XOR E + AND B + XOR E + LD (HL), A ; store first + ; Same for second byte + INC H + LD A, (HL) + XOR D + AND B + XOR D + LD (HL), A + ; move to next byte + INC H + LD A, C + OR A + JP Z, .complete + DEC C +.r_mask: + ; use right mask for last right byte + LD A, (M_VARS.pixel_mask_r) + JP Z, .next_byte +.full_8: + LD (HL), E + INC H + LD (HL), D + INC H + DEC C + JP NZ, .full_8 + JP .r_mask +.complete: ; TODO: duplicate close_vram_ret + ; Disable VideoRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + RET + +;--------------------------------------------------- +; 2x1y1x2y2 Draw Line +;--------------------------------------------------- +esc_draw_line: + LD HL, M_VARS.esc_param + LD E, (HL) ; E=X1 + INC HL + LD D, (HL) ; D=Y1 + INC HL + LD A, (HL) + INC HL + LD H, (HL) ; H=Y2 + LD L, A ; L=X2 + CP E + JP C, .x1_le_x2 + EX DE, HL ; exchange if X1>X2 +.x1_le_x2: + LD (M_VARS.esc_param), HL ; store x1,y1 back + LD A, E + SUB L + LD L, A ; L - width + LD A, D + SUB H + LD H, A ; H - height + PUSH AF + JP NC, .pos_height + ; change sign + CPL + INC A + LD H, A +.pos_height: + EX DE, HL + LD HL, (M_VARS.esc_param) + EX DE, HL + JP Z, height0 + LD A, L + OR A + JP Z, .width0 + LD B, A + POP AF + LD A, 0x0 + ADC A, A + LD (M_VARS.esc_param+4), A + ; HL = E/B height/width + LD E, H + LD C, 16 + LD D, 0 +.next_16: + ADD HL, HL + EX DE, HL + ADD HL, HL + EX DE, HL + LD A, D + JP C, .edl_l4 + CP B + JP C, .edl_l5 +.edl_l4: + SUB B + LD D, A + INC HL +.edl_l5: + DEC C + JP NZ, .next_16 + LD DE, 0x0 + PUSH DE + ; save result at stack + PUSH HL + + LD HL, (M_VARS.esc_param) ; x1,y1 + EX DE, HL + LD C, B + CALL calc_px_addr + ; HL - address, B - offset in byte + ; make mask + LD A, 10000000b +.roll_l: + RLCA + DEC B + JP P, .roll_l + CPL + LD B, A ; b - inv mask + +.edl_l7 + POP DE + EX (SP), HL ; save HL on top of stack + LD A, H + ADD HL, DE + SUB H + CPL + INC A + EX (SP), HL + PUSH DE + PUSH BC + LD C, A + EX DE, HL + + LD HL, (M_VARS.curr_color) + EX DE, HL + ; Access VideoRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + + LD A, (M_VARS.esc_param+4) ; sign of delta Y + OR A + JP NZ, .next_down +.next_up: + ; firs byte + LD A, (HL) + XOR E + AND B + XOR E + LD (HL), A + ; second byte + INC H + LD A, (HL) + XOR D + AND B + XOR D + LD (HL), A + DEC H + LD A, C + OR A + JP Z, .is_last + DEC C + ; draw up + DEC L + JP .next_up +.next_down: + ; first byte + LD A, (HL) + XOR E + AND B + XOR E + LD (HL), A + ; second byte + INC H + LD A, (HL) + XOR D + AND B + XOR D + LD (HL), A + ; + DEC H + LD A, C + OR A + JP Z, .is_last + DEC C + ; draw down + INC L + JP .next_down +.is_last: + ; Disable VideoRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + POP BC + LD A, B + ; <<1px + SCF + RLA + JP C, .edl_l11 + RLA + INC H + INC H +.edl_l11 + LD B, A + DEC C + JP NZ, .edl_l7 + POP HL + POP HL + RET + +; -------------------------------------------------- +; draw vertical line +; Inp: DE - YX +; L - length +; -------------------------------------------------- +.width0 + LD C, H + CALL calc_px_addr + + ; make pixel mask + LD A, 10000000b +.edl_l13: + RLCA + DEC B + JP P, .edl_l13 + CPL + LD B, A + + EX DE, HL + LD HL, (M_VARS.curr_color) + EX DE, HL + POP AF + + ; Enable VRAM + LD A, 0x1 + OUT (SYS_DD17PB), A + JP C, .next_row_down + +.next_row_up: + ; first byte + LD A, (HL) + XOR E + AND B + XOR E + LD (HL), A + ; second byte + INC H + LD A, (HL) + XOR D + AND B + XOR D + LD (HL), A + ; next Y + DEC H + LD A, C + OR A + JP Z, close_vram_ret + DEC C + ; dec row + DEC L + JP .next_row_up + +.next_row_down: + ; first byte + LD A, (HL) + XOR E + AND B + XOR E + LD (HL), A + ; second byte + INC H + LD A, (HL) + XOR D + AND B + XOR D + LD (HL), A + ; next address + DEC H + LD A, C + OR A + JP Z, close_vram_ret + DEC C + ; inc row + INC L + JP .next_row_down + +close_vram_ret + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + RET + +; -------------------------------------------------- +; draw horizontal line +; Inp: DE - YX +; L - length +; -------------------------------------------------- +height0 + POP AF + LD C, L + LD A, L + OR A + JP NZ, .len_ne0 + INC C ; length 1 at least +.len_ne0: + CALL calc_px_addr + ; make pixel mask + LD A, 10000000b +.edl_l19 + RLCA + DEC B + JP P, .edl_l19 + CPL + LD B, A + + EX DE, HL + LD HL, (M_VARS.curr_color) + EX DE, HL + + ; Enable VRAM access + LD A, 0x1 + OUT (SYS_DD17PB), A + +.next_col: + ; set 1st byte + LD A, (HL) + XOR E + AND B + XOR E + LD (HL), A + ; set 2nd byte + INC H + LD A, (HL) + XOR D + AND B + XOR D + LD (HL), A + ; next byte + DEC H + ; next (right) horizontal pixel + LD A, B + SCF + RLA + JP C, .edl_l21 + RLA + INC H + INC H +.edl_l21 + LD B, A + DEC C + JP NZ, .next_col + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + RET + +; -------------------------------------------------- +; ESC Draw Dot +; -------------------------------------------------- +esc_draw_dot: + LD HL, (M_VARS.esc_param) + EX DE, HL + CALL calc_px_addr + LD A, 0x80 +edd_l1 + RLCA + DEC B + JP P, edd_l1 + LD B, A + LD A, (M_VARS.esc_param+2) + CP 0x3 + JP Z, edd_ep_task_end + LD A, B + CPL + LD B, A + LD A, (M_VARS.esc_param+2) + CP 0x2 + JP Z, edd_ep_fm_0 + LD A, 0x1 + OUT (SYS_DD17PB), A + LD A, (HL) + AND B + LD (HL), A + INC H + LD A, (HL) + AND B + LD (HL), A + LD A, 0x0 + OUT (SYS_DD17PB), A + RET +edd_ep_fm_0 + EX DE, HL + LD HL, (M_VARS.curr_color) + EX DE, HL + LD A, 0x1 + OUT (SYS_DD17PB), A + LD A, (HL) + XOR E + AND B + XOR E + LD (HL), A + INC H + LD A, (HL) + XOR D + AND B + XOR D + LD (HL), A + LD A, 0x0 + OUT (SYS_DD17PB), A + RET +edd_ep_task_end + CALL get_pixel + LD (M_VARS.esc_var3), A + RET + +; -------------------------------------------------- +; +; -------------------------------------------------- +esc_picture: + LD HL, (M_VARS.esc_param+3) + LD A, (HL) + CP ':' + RET NZ + INC HL + LD E, (HL) + INC HL + LD D, (HL) + INC HL + LD A, (HL) + LD (M_VARS.esc_var0), A + INC HL + LD A, (HL) + LD (M_VARS.esc_var1), A + INC HL + PUSH HL + LD C, (HL) + INC HL + LD B, (HL) + INC HL + INC HL + EX DE, HL + PUSH DE + + ; Enable VRAM access + LD A, 0x1 + OUT (SYS_DD17PB), A + CALL pict_sub1 + ; Disable VRAM access + LD A, 0x0 + OUT (SYS_DD17PB), A + + POP DE + POP HL + LD (HL), C + INC HL + LD (HL), B + CALL pict_sub2 ; TODO: replace call+ret to jp; + RET + +pict_sub1: + LD A, (M_VARS.esc_param) + CP ASCII_EM + JP Z, gih_up + CP ASCII_CAN + JP Z, gih_rt + CP ASCII_SUB + JP Z, gih_ctrl_z + CP ASCII_BS + JP Z, gih_bs + CP ASCII_US + JP Z, pict_clr + RET + +pict_clr: + LD L, C + LD H, B + LD A, (M_VARS.esc_var0) + LD C, A + LD A, (M_VARS.esc_var1) + LD B, A + CALL put_image + POP HL + POP HL + POP HL + RET + +ehd_l1: + CP 0x2 + JP Z, get_image_hdr + CP 0x3 + JP Z, m_fn_39 + RET + +; -------------------------------------------------- +; Function 39 +; -------------------------------------------------- +m_fn_39: + LD HL, (M_VARS.esc_param+2) ; pr 3,4 + INC L + LD C, L + LD B, H + LD E, L + CALL dc_mul_e_h + ADD HL, HL + EX DE, HL + LD HL, (M_VARS.esc_param) ; par 1,2 + PUSH BC + PUSH DE + LD BC, 10 + LD E, L + LD D, H + ADD HL, BC + EX DE, HL + LD (HL), E + INC HL + LD (HL), D + INC HL + POP BC + LD A, 4 +.l1: + PUSH AF ; TODO: remove AF not changed + EX DE, HL + ADD HL, BC + EX DE, HL + LD (HL), E + INC HL + LD (HL), D + INC HL + POP AF ; TODO: remove AF not changed + DEC A + JP NZ, .l1 + EX DE, HL + LD HL, 0x0 + ADD HL, BC ; HL=BC + ADD HL, BC ; HL=2*BC + ADD HL, HL ; HL=4*BC + ADD HL, BC ; HL=5*BC + ADD HL, HL ; HL=10*BC + EX DE, HL ; DE=10*BC + LD A, 0x0 + LD B, A ; B=A=0 + ; fill DE bytes at [HL] with 0 +.l2: + LD (HL), B + INC HL + DEC DE + CP E + JP NZ, .l2 + CP D + JP NZ, .l2 + + XOR A + LD (M_VARS.esc_var0), A + POP BC + LD HL, (M_VARS.esc_param) + LD DE, 10 + ADD HL, DE +.l3: + EX DE, HL + LD HL, (M_VARS.esc_param+4) + EX DE, HL + PUSH BC + CALL fn39_sub2 + POP BC + LD A, (M_VARS.esc_var0) + ADD A, 0x2 + LD (M_VARS.esc_var0), A + CP 10 + RET Z + JP .l3 + +; --------------------------------------------------- +; Function 3C +; --------------------------------------------------- +get_image_hdr: + LD HL, (M_VARS.esc_param+4) + LD (HL), 58 ; ':' + INC HL + PUSH HL + LD HL, (M_VARS.esc_param+2) + INC L + LD C, L + LD A, H + ADD A, 0x4 + LD B, A + LD H, B + LD E, C + CALL dc_mul_e_h + ADD HL, HL + EX DE, HL + POP HL + LD (HL), E + INC HL + LD (HL), D + INC HL + LD (HL), C + INC HL + LD (HL), B + INC HL + EX DE, HL + LD HL, (M_VARS.esc_param) + ADD HL, HL + EX DE, HL + PUSH BC + PUSH HL + CALL calc_px_addr + POP DE + LD A, L + LD (DE), A + INC DE + LD A, H + LD (DE), A + INC DE + LD A, B + LD (DE), A + INC DE + POP BC + LD A, 0x1 + OUT (SYS_DD17PB), A + CALL get_image ; TODO: replace call+ret to jp + RET + +; --------------------------------------------------- +; = +; --------------------------------------------------- +esc_get_put_image: + LD A, (M_VARS.esc_param+6) + CP 0x2 + JP NC, ehd_l1 + LD HL, M_VARS.esc_param + LD E, (HL) + INC HL + LD D, (HL) + INC HL + LD C, (HL) + INC HL ; TODO: next call to calc_px_addr + LD B, (HL) ; destroy value of B and HL + CALL calc_px_addr + EX DE, HL + LD HL, (M_VARS.esc_param+4) + LD A, H + CP 128 + RET C + + CP 184 + RET NC + + EX DE, HL + + ; Enable VRAM access + LD A, 0x1 + OUT (SYS_DD17PB), A + LD A, (M_VARS.esc_param+6) + OR A + JP NZ, put_image + +; --------------------------------------------------- +; Get image from VRAM to user buffer +; Inp: HL -> VRAM[x,y] +; DE -> buffer +; BC - width, height +; --------------------------------------------------- +get_image: + PUSH HL + PUSH BC +.next_row: + ; byte 1 + LD A, (HL) + LD (DE), A + INC H ; next Y (row) + INC DE + ; byte 2 ; next dst addr + LD A, (HL) + LD (DE), A + INC H + LD A, H + CP 128 ; last row? + JP NZ, .l2 + LD H, 0x40 ; reset Y +.l2: + INC DE + DEC C + JP NZ, .next_row + POP BC + POP HL + INC L + DEC B ; dec width + JP NZ, get_image + JP img_task_end + +; --------------------------------------------------- +; Put image from buffer to VRAM +; Inp: HL -> VRAM[x,y] +; DE -> buffer +; BC - width, height +; --------------------------------------------------- +put_image: + PUSH HL + PUSH BC +.next_row: + ; two bytes for 8 pixels + ; byte 1 + LD A, (DE) ; get from buffer + LD (HL), A ; put to screen + INC H ; next Y (row) + INC DE ; next src addr + ; byte 2 + LD A, (DE) + LD (HL), A + INC DE + INC H + LD A, H + CP 128 ; last row? + JP NZ, .l2 + LD H, 0x40 ; reset +.l2: + DEC C + JP NZ, .next_row + POP BC + POP HL + ; next column + INC L + DEC B + JP NZ, put_image + +img_task_end: + LD A, 0x0 + OUT (SYS_DD17PB), A + RET + +; --------------------------------------------------- +; +; --------------------------------------------------- +fn39_sub2: + DEC C +.l1: + PUSH BC +.l2: + EX DE, HL + PUSH BC + PUSH HL + LD L, (HL) + LD H, 0x0 + LD A, (M_VARS.esc_var0) + LD B, A + OR A + JP Z, .l4 +.l3: + ADD HL, HL + DEC A + JP NZ, .l3 +.l4: + LD A, B + LD C, L + LD B, H + POP HL + INC HL + PUSH HL + LD L, (HL) + LD H, 0x0 + OR A + JP Z, .l6 +.l5: + ADD HL, HL + DEC A + JP NZ, .l5 +.l6: + EX DE, HL + LD A, (HL) + OR C + LD (HL), A + INC HL + LD A, (HL) + OR E + LD (HL), A + INC HL + LD (HL), B + INC HL + LD (HL), D + DEC HL + POP DE + INC DE + POP BC + DEC C + JP NZ, .l2 + POP BC + INC HL + INC HL + DEC B + JP NZ, .l1 + RET + +; -------------------------------------------------- +; Handle ASCII_CAN symbol (cursor right) +; -------------------------------------------------- +gih_rt: + DEC DE + LD A, (DE) + ADD A, 0x2 + LD (DE), A + CP 9 + RET C + LD A, 0x2 + LD (DE), A + INC DE + PUSH BC + LD H, D + LD L, E + INC HL + INC HL + LD A, (M_VARS.esc_var0) + PUSH AF + DEC A + LD (M_VARS.esc_var0), A + INC A + ADD A, A + ADD A, B + CP 128 + JP C, .l1 + SUB 0x40 +.l1: + LD B, A + LD A, (M_VARS.esc_var1) +.l2: + PUSH AF + LD A, (M_VARS.esc_var0) +.l3: + PUSH AF + LD A, (HL) + LD (DE), A + INC HL + INC DE + LD A, (HL) + LD (DE), A + INC HL + INC DE + POP AF + DEC A + JP NZ, .l3 + LD A, (BC) + LD (DE), A + INC DE + INC HL + INC B + LD A, (BC) + LD (DE), A + INC HL + INC DE + DEC B + INC C + POP AF + DEC A + JP NZ, .l2 + POP AF + LD (M_VARS.esc_var0), A + POP BC + INC B + INC B + LD A, B + CP 0x80 + RET NZ + LD B, 0x40 + RET + +; -------------------------------------------------- +; Handle ASCII_BS (BackSpace) symbol +; -------------------------------------------------- +gih_bs: + DEC DE + LD A, (DE) + SUB 0x2 + LD (DE), A + RET NC + + LD A, 6 + LD (DE), A + INC DE + PUSH BC + ADD HL, DE + DEC HL + LD D, H + LD E, L + DEC HL + DEC HL + LD A, (M_VARS.esc_var1) + ADD A, C + DEC A + LD C, A + LD A, B + DEC A + CP 0x3f + JP NZ, .l1 + LD A, 0x7f ; [DEL]? +.l1: + LD B, A + LD A, (M_VARS.esc_var0) + PUSH AF + DEC A + LD (M_VARS.esc_var0), A + LD A, (M_VARS.esc_var1) +.l2: + PUSH AF + LD A, (M_VARS.esc_var0) +.l3: + PUSH AF + LD A, (HL) + LD (DE), A + DEC HL + DEC DE + LD A, (HL) + LD (DE), A + DEC HL + DEC DE + POP AF + DEC A + JP NZ, .l3 + LD A, (BC) + LD (DE), A + DEC HL + DEC DE + DEC B + LD A, (BC) + LD (DE), A + DEC HL + DEC DE + INC B + DEC C + POP AF + DEC A + JP NZ, .l2 + POP AF + LD (M_VARS.esc_var0), A + POP BC + DEC B + DEC B + LD A, B + CP 0x3e + RET NZ + LD B, 0x7e + RET + +; -------------------------------------------------- +; Handle ASCII_SUB symbol +; -------------------------------------------------- +gih_ctrl_z: + PUSH BC + LD A, (M_VARS.esc_var0) + ADD A, A + ADD A, A + ADD A, E + LD L, A + LD H, D + LD A, (M_VARS.esc_var1) + ADD A, C + LD C, A + PUSH BC + LD A, (M_VARS.esc_var1) + DEC A + DEC A + LD C, A +.l1: + LD A, (M_VARS.esc_var0) + LD B, A +.l2: + LD A, (HL) + LD (DE), A + INC HL + INC DE + LD A, (HL) + LD (DE), A + INC HL + INC DE + DEC B + JP NZ, .l2 + DEC C + JP NZ, .l1 + POP BC + LD L, 0x2 +.l3: + LD A, (M_VARS.esc_var0) + LD H, A + PUSH BC +.l4: + LD A, (BC) + LD (DE), A + INC DE + INC B + LD A, (BC) + LD (DE), A + INC DE + INC B + LD A, B + CP 0x80 + JP NZ, .l5 + LD B, 0x40 +.l5: + DEC H + JP NZ, .l4 + POP BC + INC C + DEC L + JP NZ, .l3 + POP BC + INC C + INC C + RET + +; -------------------------------------------------- +; Handle ASCII_EM symbol +; -------------------------------------------------- +gih_up: + PUSH BC + LD A, (M_VARS.esc_var0) + ADD A, A + ADD A, B + CP 128 + JP Z, .l1 + JP C, .l1 + SUB 64 +.l1: + DEC A + LD B, A + DEC C + PUSH BC + ADD HL, DE + LD A, (M_VARS.esc_var0) + ADD A, A + ADD A, A + LD E, A + LD A, L + SUB E + LD E, A + LD D, H + DEC DE + DEC HL + EX DE, HL + LD A, (M_VARS.esc_var1) + DEC A + DEC A + LD C, A +.l2: + LD A, (M_VARS.esc_var0) + LD B, A +.l3: + LD A, (HL) + LD (DE), A + DEC HL + DEC DE + LD A, (HL) + LD (DE), A + DEC HL + DEC DE + DEC B + JP NZ, .l3 + DEC C + JP NZ, .l2 + POP BC + LD L, 0x2 + +.l4: + LD A, (M_VARS.esc_var0) + LD H, A + PUSH BC + +.l5: + LD A, (BC) + LD (DE), A + DEC DE + DEC B + LD A, (BC) + LD (DE), A + DEC DE + DEC B + LD A, B + CP 0x3f + JP NZ, .l6 + LD B, 0x7f + +.l6: + DEC H + JP NZ, .l5 + POP BC + DEC C + DEC L + JP NZ, .l4 + POP BC + DEC C + DEC C + RET + +; --------------------------------------------------- +; +; --------------------------------------------------- +pict_sub2: + PUSH DE + DEC DE + LD A, (DE) + LD E, A + LD D, 0x0 + LD HL, (M_VARS.esc_param+1) + ADD HL, DE + LD E, (HL) + INC HL + LD D, (HL) + POP HL + PUSH BC + PUSH HL + PUSH HL + LD HL, (M_VARS.esc_param+3) + INC HL + LD C, (HL) + INC HL + LD B, (HL) + POP HL + ADD HL, BC + LD C, L + LD B, H + POP HL + CALL mov_hl_bc + LD A, (M_VARS.esc_param+5) + OR A + JP Z, .l1 + EX DE, HL +.l1: + LD A, (M_VARS.esc_var1) + SUB 0x4 +.l2: + PUSH AF + LD A, (M_VARS.esc_var0) +.l3: + PUSH AF + LD A, (DE) + INC DE + PUSH DE + PUSH AF + LD A, (DE) + LD E, A + POP AF + LD D, A + OR E + CPL + PUSH AF + AND (HL) + OR D + LD (BC), A + INC BC + INC HL + POP AF + AND (HL) + OR E + LD (BC), A + INC BC + INC HL + POP DE + INC DE + POP AF + DEC A + JP NZ, .l3 + POP AF + DEC A + JP NZ, .l2 + LD A, (M_VARS.esc_param+5) + OR A + JP Z, .l4 + EX DE, HL +.l4: + CALL mov_hl_bc + POP DE + EX DE, HL + LD A, (M_VARS.esc_var0) + LD C, A + LD A, (M_VARS.esc_var1) + LD B, A + LD A, 0x1 + OUT (SYS_DD17PB), A + CALL put_image ; TODO: replace call+ret to jp + RET + +; --------------------------------------------------- +; Move form [HL] to [BC] count of bytes +; Inp: HL -> src +; BC -> dst +; esc_var0*4 - count +; --------------------------------------------------- +mov_hl_bc: + PUSH DE + LD A, (M_VARS.esc_var0) + ADD A, A + ADD A, A + LD E, A ; E = param * 4 + ; move [HL] -> [BC] E bytes +.next: + LD A, (HL) + LD (BC), A + INC HL + INC BC + DEC E + JP NZ, .next + POP DE + RET + +; --------------------------------------------------- +; Draw circle +; Inp: param x,y,radius, aspect_x, aspect_y +; --------------------------------------------------- +esc_draw_circle: + LD A, (M_VARS.esc_param+2) ; radius + LD B, A + OR A + RET Z ; exit ir radius 0 + LD A, 0x7f + CP B + RET M ; exit if radius>127 + + XOR A + LD D, A ; 0 + LD E, B ; r + CALL dc_draw_8px + + LD A, 1 + LD H, A + SUB B + LD C, A + LD A, B + RLCA + LD B, A + LD A, 0x1 + SUB B + LD L, A + CCF ; TODO: unused +.l1: + INC D + LD A, E + CP D + JP Z, dc_draw_8px + CALL dc_draw_8px + LD A, H + ADD A, 0x2 + LD H, A + LD A, L + ADD A, 0x2 + LD L, A + LD A, C + ADD A, H + LD C, A + JP NC, .l1 +.l2: + CCF ; TODO: unused + INC D + DEC E + LD A, D + CP E + JP Z, dc_draw_8px + SUB E + CP 0x1 + RET Z + LD A, E + SUB D + CP 0x1 + JP Z, dc_draw_8px + CALL dc_draw_8px + LD A, H + ADD A, 0x2 + LD H, A + LD A, L + ADD A, 0x4 + LD L, A + JP NC, .l3 + CCF ; TODO: unused +.l3: + LD A, C + ADD A, L + LD C, A + JP NC, .l1 + JP .l2 + +; --------------------------------------------------- +; +; --------------------------------------------------- +dc_draw_8px: + PUSH HL + PUSH DE + PUSH BC + PUSH DE + CALL dc_aspect_ratio_1 + LD HL, (M_VARS.esc_param) ; HL=Y,X + CALL dc_draw_4px_bc + POP DE + CALL dc_aspect_ratio2 + LD HL, (M_VARS.esc_param) ; HL=Y,X + CALL dc_draw_4px_cb + POP BC + POP DE + POP HL + XOR A + RET + +; --------------------------------------------------- +; Scale circle axis dy specified aspect ratio +; if aspect_x = 0 C = D else C = D * aspect_x / 256 +; if aspect_y = 0 B = E else B = E * aspect_y / 256 +; --------------------------------------------------- +dc_aspect_ratio_1: + LD HL, (M_VARS.esc_param+3) ; aspect_x -> L, aspect_y -> H + LD A, L + OR A + LD C, D + LD B, E + JP NZ, .dc_ax_ne0 + LD A, H + OR A + JP NZ, .dc_ay_ne0 + RET +.dc_ax_ne0: + LD A, H + LD H, L + LD E, C + CALL dc_mul_e_h + LD C, E + OR A + RET Z +.dc_ay_ne0: + LD H, A + LD E, B + CALL dc_mul_e_h + LD B, E + RET + +; --------------------------------------------------- +; if aspect_x = 0 B = E else B = E * aspect_x / 256 +; if aspect_y = 0 C = D else C = D * aspect_y / 256 +; --------------------------------------------------- +dc_aspect_ratio2: + LD HL, (M_VARS.esc_param+3) ; aspect_x -> L, aspect_y -> H + LD A, L + OR A + LD C, D + LD B, E + JP NZ, .dc_ax_ne0 + LD A, H + OR A + JP NZ, .dc_ay_ne0 + RET +.dc_ax_ne0: + LD A, H + LD H, L + LD E, B + CALL dc_mul_e_h + LD B, E + OR A + RET Z + +.dc_ay_ne0: + LD H, A + LD E, C + CALL dc_mul_e_h + LD C, E + RET + +; --------------------------------------------------- +; +; --------------------------------------------------- +dc_mul_e_h: + LD D, 0x0 + LD L, D + ADD HL, HL + JP NC, .l1 + ADD HL, DE +.l1: + ADD HL, HL + JP NC, .l2 + ADD HL, DE +.l2: + ADD HL, HL + JP NC, .l3 + ADD HL, DE +.l3: + ADD HL, HL + JP NC, .l4 + ADD HL, DE +.l4: + ADD HL, HL + JP NC, .l5 + ADD HL, DE +.l5: + ADD HL, HL + JP NC, .l6 + ADD HL, DE +.l6: + ADD HL, HL + JP NC, .l7 + ADD HL, DE +.l7: + ADD HL, HL + JP NC, .l8 + ADD HL, DE +.l8: + LD E, H + RET + +; --------------------------------------------------- +; +; --------------------------------------------------- +dc_draw_4px_bc: + ; draw pixel(H+B, L+C) if in screen + LD A, H + ADD A, B + JP C, .l1 + LD D, A + LD A, L + ADD A, C + LD E, A + CALL dc_put_pixel +.l1: + ; draw pixel(H+B, L-C) if in screen + LD A, H + ADD A, B + JP C, .l2 + LD D, A + LD A, L + SUB C + LD E, A + CALL dc_put_pixel +.l2: + ; draw pixel(H-B, L-C) if in screen + LD A, H + SUB B + JP C, .l3 + LD D, A + LD A, L + SUB C + LD E, A + CALL dc_put_pixel +.l3: + ; draw pixel(H-B, L+C) if in screen + LD A, H + SUB B + RET C + LD D, A + LD A, L + ADD A, C + LD E, A + CALL dc_put_pixel ; TODO: replace call+ret to jp + RET + +; --------------------------------------------------- +; +; --------------------------------------------------- +dc_draw_4px_cb: + ; draw pixel(H+C, L+B) if in screen + LD A, H + ADD A, C + JP C, .l1 + LD D, A + LD A, L + ADD A, B + LD E, A + CALL dc_put_pixel +.l1: + ; draw pixel(H+C, L-B) if in screen + LD A, H + ADD A, C + JP C, .l2 + LD D, A + LD A, L + SUB B + LD E, A + CALL dc_put_pixel +.l2: + ; draw pixel(H-C, L-B) if in screen + LD A, H + SUB C + JP C, l3 + LD D, A + LD A, L + SUB B + LD E, A + CALL dc_put_pixel +l3: + ; draw pixel(H-C, L+B) if in screen + LD A, H + SUB C + RET C + LD D, A + LD A, L + ADD A, B + LD E, A + CALL dc_put_pixel ; TODO: replace call+ret to jp + RET + +; --------------------------------------------------- +; Draw pixel on screen +; Inp: DE - X, Y +; --------------------------------------------------- +dc_put_pixel: + RET C ; return if CF set (out of screen) + PUSH HL + PUSH BC + CALL calc_px_addr + ; calculate B = pixel mask + LD A, 10000000b +.roll: + RLCA ; [07654321] <- [76547210], [7] -> CF + DEC B + JP P, .roll + CPL + LD B, A + ; DE = foreground color low and hi bytes + EX DE, HL + LD HL, (M_VARS.curr_color) + EX DE, HL + ; Turn on Video RAM + LD A, 0x1 + OUT (SYS_DD17PB), A + ; Load VRAM[HL] byte (low byte), mask and set + LD A, (HL) + XOR E + AND B + XOR E + LD (HL), A + ; Load VRAM[HL+1] byte (low byte), mask and set + INC H + LD A, (HL) + XOR D + AND B + XOR D + LD (HL), A + ; Turn off Video RAM + LD A, 0x0 + OUT (SYS_DD17PB), A + POP BC + POP HL + RET + + ; Full charset, Common + Latin letters (112*8=890) + INCLUDE "font-6x7.inc" + +; --------------------------------------------------- +; Convert 0h..Fh decimal value to symbol '0'..'F' +; --------------------------------------------------- +conv_nibble: + AND 0xf + ADD A, 0x90 + DAA + ADC A, 0x40 + DAA + LD C, A + RET + +; --------------------------------------------------- +; Print byte in HEX +; Inp: A - byte to print +; --------------------------------------------------- +m_hexb: + PUSH AF + RRCA + RRCA + RRCA + RRCA + CALL out_hex + POP AF + +out_hex: + CALL conv_nibble + CALL m_con_out ; TODO: replace call+ret to jp + RET + +; --------------------------------------------------- +; Wtite RAM-Disk 64K to TAPE +; --------------------------------------------------- +m_tape_write_ram2: + LD HL, M_VARS.buffer + LD C, 128 +.cl_stack: + LD (HL), 0x0 + INC HL + DEC C + JP NZ, .cl_stack + LD HL, M_VARS.buffer + LD DE, 0xffff + ; write empty block + ; DE - block ID + ; HL -> block + CALL m_tape_write + CALL twr2_delay + LD DE, 0x0 + CALL m_tape_write + CALL twr2_delay + LD BC, 512 + LD DE, 0x0 +.nxt_blk: + PUSH BC + LD HL, M_VARS.buffer + CALL m_ramdisk_read + INC DE + CALL m_tape_write + CALL twr2_delay + POP BC + DEC BC + LD A, B + OR C + JP NZ, .nxt_blk + RET + +; --------------------------------------------------- +; Pause between blocks on tape +; --------------------------------------------------- +twr2_delay: + LD BC, 250 +.delay: + DEC BC + LD A, B + OR C + JP NZ, .delay + RET + +; --------------------------------------------------- +; Read RAM-Disk 64K from TAPE +; --------------------------------------------------- +m_tape_read_ram2: + LD A, 100 + CALL m_tape_wait + OR A + JP NZ, .end + LD E, 6 + +.srch_first: + DEC E + JP Z, .not_found + ; read block + LD HL, M_VARS.buffer + CALL m_tape_read + CP 4 + JP Z, .end + OR A + JP NZ, .srch_first + LD A, B + OR C + JP NZ, .srch_first + + LD BC, 512 + LD DE, 0x0 + +.rd_next: + PUSH BC + ; Read block from tape + CALL m_tape_read + OR A + JP NZ, .rd_error + DEC BC + LD A, B + CP D + JP NZ, .inv_id + LD A, C + CP E + JP NZ, .inv_id + ; Ok, write block to RAM disk + CALL m_ramdisk_write + INC DE + POP BC + DEC BC + LD A, B + OR C + JP NZ, .rd_next + RET +.not_found: + LD HL, msg_no_start_rec + CALL me_out_strz ; TODO: replace call+ret to jp + RET +.rd_error: + CP 2 + JP Z, .err_ubi + CP 4 + JP Z, .err_ibu + LD HL, msg_checksum + CALL me_out_strz + CALL out_hexw + POP BC + RET + + ; Illegal sequence of blocks +.inv_id: + LD HL, msg_sequence + CALL me_out_strz + INC BC + CALL out_hexw + POP BC + RET + +.err_ubi: + LD HL, msg_ibg + CALL me_out_strz + POP BC + RET + + ; Interrupted by user +.err_ibu: + POP BC +.end: + LD HL, msg_break + CALL me_out_strz ; TODO: replace call+ret to jp + RET + +; -------------------------------------------------- +; Output hex word +; Inp: BC - word to output +; -------------------------------------------------- +out_hexw: + PUSH BC + LD A, B + CALL m_hexb + POP BC + LD A, C + CALL m_hexb ; TODO: replace call+ret to jp + RET + +msg_no_start_rec: + DB "NO START RECORD", 0 +msg_checksum: + DB "CHECKSUM ", 0 +msg_sequence: + DB "SEQUENCE ", 0 +msg_ibg: + DB "IBG", 0 +msg_break: + DB "BREAK", 0 + +; --------------------------------------------------- +; Out ASCIIZ message +; Inp: HL -> zero ended string +; --------------------------------------------------- +me_out_strz: + LD A, (HL) + OR A + RET Z + PUSH BC + LD C, A + CALL m_con_out + INC HL + POP BC + JP me_out_strz + + + +; --------------------------------------------------- +; Read from RAM-disk to RAM +; Inp: DE - source sector +; HL -> destination buffer +; --------------------------------------------------- +m_ramdisk_read: + PUSH HL + PUSH DE + LD A, D + ; Build value to access ext RAM (A17, A16, 32k bits) + AND 00000111b ; A17, A16, Low 32K bits of memory mapper + ADD 0x2 ; Calc A16, A17 address lines + OR 0x0 ; TODO: nothing, remove + LD B, A ; B - value to turn on access to Ext RAM + ; Calculate DE = address from sector number + XOR A + LD A, E ; E - low address + RRA ; [CF] -> [7:0] -> [CF] + LD D, A ; D = E/2 + LD A, 0x0 + RRA ; [CF] -> E + LD E, A +.read: + ; Access to ExtRAM + LD A, B + OUT (SYS_DD17PB), A + ; Get Byte + LD A, (DE) + LD C, A + ; Access to RAM + LD A, 0x0 + OUT (SYS_DD17PB), A + ; Set Byte + LD (HL), C + ; HL++, DE++ + INC HL + INC DE + LD A, E + ADD A, A + JP NZ, .read ; jump if has more bytes + + ; Access to RAM + LD A, 0x0 + OUT (SYS_DD17PB), A + + POP DE + POP HL + RET + +; --------------------------------------------------- +; Write sector to RAM disk +; Inp: HL -> source buffer +; DE - destination sector +; --------------------------------------------------- +m_ramdisk_write: + PUSH HL + PUSH DE + LD A, D + AND 0x7 + ADD 0x2 ; build value to access ext RAM (A17, A16, 32k bits) + OR 0x0 ; TODO: remove unused + LD B, A + XOR A + LD A, E + RRA + LD D, A + LD A, 0x0 + RRA + LD E, A +.wr_byte: + LD A, 0x0 + OUT (SYS_DD17PB), A + LD C, (HL) + LD A, B + OUT (SYS_DD17PB), A + LD A, C + LD (DE), A + INC HL + INC DE + LD A, E + ADD A, A + JP NZ, .wr_byte + LD A, 0x0 + OUT (SYS_DD17PB), A + POP DE + POP HL + RET + +; -------------------------------------------------- +; Write block to Tape +; In: DE - block ID, +; HL -> block of data. +; -------------------------------------------------- +m_tape_write: + PUSH HL + PUSH DE + PUSH DE + LD BC, 2550 + LD A, PIC_POLL_MODE ; pool mode + OUT (PIC_DD75RS), A + LD A,TMR0_SQWAVE ; tmr0, load lsb+msb, sq wave, bin + OUT (TMR_DD70CTR), A + LD A, C + OUT (TMR_DD70C1), A + LD A, B + OUT (TMR_DD70C1), A + ; Write Hi+Lo, Hi+Lo + LD DE, 4 ; repeat next 4 times +.l1: + IN A, (PIC_DD75RS) + AND TIMER_IRQ ; check rst4 from timer#0 + JP NZ, .l1 + LD A, D + CPL + LD D, A + OR A + LD A, TL_HIGH ; tape level hi + JP NZ, .set_lvl + LD A, TL_LOW ; tape level low +.set_lvl: + OUT (DD67PC), A ; set tape level + LD A, TMR0_SQWAVE ; tmr0, load lsb+msb, swq, bin + ; timer on + OUT (TMR_DD70CTR), A + LD A, C + OUT (TMR_DD70C1), A + LD A, B + OUT (TMR_DD70C1), A + DEC E + JP NZ, .l1 + +.l2: + IN A, (PIC_DD75RS) + AND TIMER_IRQ + JP NZ, .l2 + + ; Write 00 at start + LD A, 0x0 + CALL m_tape_wr_byte + ; Write 0xF5 marker + LD A, 0xf5 + CALL m_tape_wr_byte + LD E, 0x0 ; checksum=0 + ; Write block ID + POP BC + LD A, C + CALL m_tape_wr_byte + LD A, B + CALL m_tape_wr_byte + ; Write 128 data bytes + LD B, 128 +.next_byte: + LD A, (HL) + CALL m_tape_wr_byte + INC HL + DEC B + JP NZ, .next_byte + ; Write checksum + LD A, E + CALL m_tape_wr_byte + ; Write final zero byte + LD A, 0x0 + CALL m_tape_wr_byte +.wait_end: + IN A, (PIC_DD75RS) + AND TIMER_IRQ + JP NZ, .wait_end + LD A, TL_MID ; tape level middle + OUT (DD67PC), A + POP DE + POP HL + RET + + +; ------------------------------------------------------ +; Write byte to tape +; Inp: A - byte top write +; D - current level +; E - current checksum +; ------------------------------------------------------ +m_tape_wr_byte: + PUSH BC + ; calc checksum + LD B, A + LD A, E + SUB B + LD E, A + LD C, 8 ; 8 bit in byte +.get_bit: + LD A, B + RRA + LD B, A + JP C, .bit_hi +.wait_t: + IN A, (PIC_DD75RS) + AND TIMER_IRQ + JP NZ, .wait_t + LD A, TMR0_SQWAVE + OUT (TMR_DD70CTR), A + ; program for 360 cycles + LD A, 0x68 + OUT (TMR_DD70C1), A + LD A, 0x1 + OUT (TMR_DD70C1), A + ; change amplitude + LD A, D + CPL + LD D, A + OR A + LD A, TL_HIGH + JP NZ, .out_bit + LD A, TL_LOW +.out_bit: + OUT (DD67PC), A + DEC C + JP NZ,.get_bit + POP BC + RET +.bit_hi: + IN A, (PIC_DD75RS) + AND TIMER_IRQ + JP NZ, .bit_hi + ; program for 660 cycles + LD A, TMR0_SQWAVE + OUT (TMR_DD70CTR), A + LD A, 0x94 + OUT (TMR_DD70C1), A + LD A, 0x2 + OUT (TMR_DD70C1), A + ; change amplitude + LD A, D + CPL + LD D, A + OR A + LD A, TL_HIGH + JP NZ, .out_bit_hi + LD A, TL_LOW +.out_bit_hi: + OUT (DD67PC), A + DEC C + JP NZ, .get_bit + POP BC + RET + +; ------------------------------------------------------ +; Load block from Tape +; In: HL -> buffer to receive bytes from Tape +; Out: A = 0 - ok, +; 1 - CRC error, +; 2 - unexpected block Id +; 4 - key pressed +; ------------------------------------------------------ +m_tape_read: + PUSH HL + PUSH DE + LD A, PIC_POLL_MODE ; pool mode + OUT (PIC_DD75RS), A + LD A, TMR0_SQWAVE + OUT (TMR_DD70CTR), A ; tmr0, load lsb+msb, sq wave + LD A, 0x0 + ; tmr0 load 0x0000 + OUT (TMR_DD70C1), A + OUT (TMR_DD70C1), A + LD C, 3 +.wait_3_changes: + CALL read_tape_bit_kbd + INC A + JP Z, .key_pressed + LD A, B + ADD A, 4 + JP P, .wait_3_changes + DEC C + JP NZ, .wait_3_changes +.wait_4th_change: + CALL read_tape_bit_kbd + INC A + JP Z, .key_pressed + LD A, B + ADD A, 4 + JP M, .wait_4th_change + LD C, 0x0 +.wait_f5_marker: + CALL read_tape_bit_kbd + INC A + JP Z, .key_pressed + DEC A + RRA + LD A, C + RRA + LD C, A + CP 0xf5 + JP NZ, .wait_f5_marker + LD E, 0x0 ; checksum = 0 + ; Read blk ID + CALL m_tape_read_byte + JP NC, .err_read_id + LD C, D + CALL m_tape_read_byte + JP NC, .err_read_id + LD B, D + PUSH BC + ; Read block, 128 bytes + LD C, 128 +.read_next_b: + CALL m_tape_read_byte + JP NC, .err_read_blk + LD (HL), D + INC HL + DEC C + JP NZ, .read_next_b + + ; Read checksum + CALL m_tape_read_byte + JP NC, .err_read_blk + LD A, E + OR A + JP Z, .checksum_ok + LD A, 0x1 ; bad checksum +.checksum_ok: + POP BC +.return: + POP DE + POP HL + RET + +.err_read_blk: + POP BC + LD BC, 0x0 +.err_read_id: + LD A, 0x2 ; read error + JP .return +.key_pressed: + CALL m_con_in + LD C, A ; store key code in C + LD B, 0x0 + LD A, 0x4 + JP .return + +; ------------------------------------------------------ +; Read byte from Tape +; Out: D - byte +; CF is set if ok, cleared if error +; ------------------------------------------------------ +m_tape_read_byte: + PUSH BC + LD C, 8 +.next_bit: + CALL m_read_tape_bit + ; push bit from lo to hi in D + RRA + LD A, D + RRA + LD D, A + LD A, 4 + ADD A, B + JP NC, .ret_err + DEC C + JP NZ, .next_bit + ; calc checksum + LD A, D + ADD A, E + LD E, A + SCF +.ret_err: + POP BC + RET + +; ------------------------------------------------------ +; Read bit from tape +; Out: A - bit from tape +; B - time from last bit +; ------------------------------------------------------ +m_read_tape_bit: + IN A, (KBD_DD78PB) ; Read Tape bit 5 (data) + AND TAPE_P + LD B, A +.wait_change: + IN A, (KBD_DD78PB) + AND TAPE_P + CP B + JP Z, .wait_change + LD A, TMR0_SQWAVE + OUT (TMR_DD70CTR), A + ; [360...480...660] 0x220=544d + IN A, (TMR_DD70C1) ; get tmer#0 lsb + ADD A, 0x20 + IN A, (TMR_DD70C1) ; get tmer#0 msb + LD B, A + ADC A, 0x2 + ; reset timer to 0 + LD A, 0x0 + OUT (TMR_DD70C1), A + OUT (TMR_DD70C1), A + ; For 0 - 65535-360+544 -> overflow P/V=1 + ; For 1 - 65535-660+544 -> no overflow P/V=0 + RET P + INC A + RET + +; ------------------------------------------------------ +; Read bit from tape with keyboard interruption +; Out: A - bit from tape +; B - time from last bit +; ------------------------------------------------------ +read_tape_bit_kbd: + IN A, (KBD_DD78PB) + AND TAPE_P + LD B, A ; save tape bit state + ; wait change with keyboard check +.wait_change: + IN A, (PIC_DD75RS) + AND KBD_IRQ + JP NZ, .key_pressed + IN A, (KBD_DD78PB) + AND TAPE_P + CP B + JP Z, .wait_change + ; measure time + LD A, TMR0_SQWAVE + OUT (TMR_DD70CTR), A + ; read lsb+msb + IN A, (TMR_DD70C1) + ADD A, 0x20 + IN A, (TMR_DD70C1) + LD B, A + ADC A, 0x2 + ; reset timer#0 + LD A, 0x0 + OUT (TMR_DD70C1), A + OUT (TMR_DD70C1), A + ; flag P/V is set for 0 + RET P + INC A + RET +.key_pressed: + LD A, 0xff + RET + +; ------------------------------------------------------ +; Wait tape block +; Inp: A - periods to wait +; Out: A=4 - interrupded by keyboard, C=key +; ------------------------------------------------------ +m_tape_wait: + OR A + RET Z + PUSH DE + LD B, A +.wait_t4: + LD C,B + IN A, (KBD_DD78PB) + AND TAPE_P ; Get TAPE4 (Wait det) and save + LD E, A ; store T4 state to E +.wait_next_2ms: + LD A,TMR0_SQWAVE + OUT (TMR_DD70CTR), A + ; load 3072 = 2ms + XOR A + OUT (TMR_DD70C1), A + LD A, 0xc + OUT (TMR_DD70C1), A +.wait_tmr_key: + IN A, (PIC_DD75RS) + AND KBD_IRQ ; RST1 flag (keyboard) + JP NZ, .key_pressed + IN A, (PIC_DD75RS) + AND TIMER_IRQ ; RST4 flag (timer out) + JP Z, .wait_no_rst4 + IN A, (KBD_DD78PB) + AND TAPE_P ; TAPE4 not changed? + CP E + JP NZ, .wait_t4 ; continue wait + JP .wait_tmr_key +.wait_no_rst4: + DEC C + JP NZ, .wait_next_2ms + XOR A + POP DE + RET + +.key_pressed: + CALL m_con_in + LD C, A ; C = key pressed + LD A, 0x4 ; a=4 interrupted by key + POP DE + RET + +; ------------------------------------------------------ +; Check block marker from Tape +; Out: A=0 - not detected, 0xff - detected +; ------------------------------------------------------ +m_tape_blk_detect: + IN A, (KBD_DD78PB) + AND TAPE_D ; TAPE5 - Pause detector + LD A, 0x0 + RET Z + CPL + RET + +; ====================================================== +; FDC DRIVER +; ====================================================== + +; ------------------------------------------------------ +; Set drive head to Track-0 and wait to complete +; Inp: B = drive 0-B, 1-C +; Out: CF set if error +; A = 0x20 if timeout +; ------------------------------------------------------ +floppy_init: + ; reset data register + LD A, 0 + OUT (FDC_DATA), A + ; send seek track 0 command + LD A, FDC_RESTORE + OUT (FDC_CMD), A + ; wait + NOP + NOP + +.wait_no_busy: + IN A, (FDC_CMD) + AND 00000101b ; TR0, Busy + CP 00000100b + JP Z, .tr0_ok + ; + IN A, (FLOPPY) + RLCA ; MOTST -> CF + JP NC, .wait_no_busy + ; timeout + LD A, 0x20 + RET + + ; ok, head at track 0 + ; set flags +.tr0_ok: + LD A, B + DEC A + LD A, 1 + JP Z, .b1 + LD (M_VARS.drv_B_inited), A + XOR A + LD (M_VARS.drv_B_track), A + RET + +.b1: + LD (M_VARS.drv_C_inited), A + XOR A + LD (M_VARS.drv_C_track), A + RET + +; --------------------------------------------------- +; Inp: A - Drive +; C - FD1793 CMD +; D - Track +; --------------------------------------------------- +m_select_drive: + PUSH AF + CALL delay_1.4mS + CP 0x1 ; TODO: DEC A to save 1b 3t + JP Z, .sel_b + LD A, 0x2 + JP .sel_c +.sel_b: + LD A, 0x5 +.sel_c: + LD B, A ; 010b or 101b + IN A, (FLOPPY) ; read Floppy controller reg + AND 0x40 ; SSEL + RRA ; SSEL for out + OR B ; 0x22 or 0x25 if WP + OUT (FLOPPY), A ; Select drive B or C + LD B, A + POP AF + ; ckeck drive A = B-0, C-1 + DEC A + JP Z, .side_b + LD A, (disk_C_tracks) + JP .side_c +.side_b: + LD A, (BIOS.drive_B_tracks) +.side_c: + PUSH BC + LD B, A ; B - track_no + LD A, D ; D - track + CP B + JP C, .side_0 ; track < track_count -> side_0 + SUB B + LD D, A + POP BC + ; Set hi bit of sector to 1 + LD A, C + OR 0x8 + LD C, A + ; A = ssel+drsel+mot_x + LD A, B + ; get SSEL (Side Selected) + AND FLOPPY_SSEL + OR A + ; return if already side 1 + RET NZ + ; else select side 1 + LD A, B + OR FLOPPY_SSEL ; set SSEL to 1 + OUT (FLOPPY), A + CALL delay_136uS + RET +.side_0: + POP BC + ; A = ssel+drsel+mot_x + LD A, B + ; get SSEL + AND FLOPPY_SSEL + OR A + ; return if already side 0 (SSEL=0) + RET Z + ; else select side 0 (set SSEL=0) + LD A, B + ; mask only drsel+mot_x + AND 0x07 + OUT (FLOPPY), A + CALL delay_136uS + RET + +; --------------------------------------------------- +; Delay for 136uS +; --------------------------------------------------- +delay_136uS: + LD B, 16 ; 7 + +; --------------------------------------------------- +; Delay for B*8uS +; --------------------------------------------------- +delay_b: + DEC B ; 4 + JP NZ, delay_b ; 10 + RET ; 10 + +; --------------------------------------------------- +; Delay for 1.4mS +; --------------------------------------------------- +delay_1.4mS: + LD B, 175 ; 7 + JP delay_b ; 10 + +; --------------------------------------------------- +; +; --------------------------------------------------- +m_read_floppy: + PUSH AF + CALL m_select_drive + POP AF + CALL m_start_seek_track + JP C, fdc_ret + CALL m_fdc_read_c_bytes + JP C, fdc_ret + XOR A + RET + +; --------------------------------------------------- +; Write data to floppy drive +; Inp: A - Drive No +; HL -> buffer +; --------------------------------------------------- +m_write_floppy: + PUSH AF + CALL m_select_drive + POP AF + CALL m_start_seek_track + JP C, fdc_ret + CALL m_fdc_write_bytes + JP C, fdc_ret + XOR A + RET + +; --------------------------------------------------- +; Start floppy and seek track +; Inp: A - drive +; D - track +; E - sector +; --------------------------------------------------- +m_start_seek_track: + CALL m_start_floppy + RET C + CALL m_fdc_seek_trk + RET C ; TODO: remove + RET + +; --------------------------------------------------- +; Start floppy motor +; Inp: A - drive +; Out: A = 0 if ok, A = 0x20 if timeout to start motor +; --------------------------------------------------- +m_start_floppy: + LD B, A + LD A, (M_VARS.drv_current) + CP B + JP Z, .need_m_start + CALL .wait_motor ; TODO: replace call+ret to jp + RET + +.need_m_start: + IN A, (FLOPPY) + RLCA ; check MOTST + JP C, .wait_motor + IN A, (FDC_CMD) + AND FDC_NOT_READY ; not ready flag + RET Z + +.wait_motor: + PUSH BC + LD BC, 65535 + CALL fdc_init + +.wait_rdy1: + IN A, (FDC_CMD) + AND FDC_NOT_READY + ; stop wait if FDC ready + JP Z, .stop_wait + + ; wait motor start + IN A, (FLOPPY) + RLCA ; CF<-A[7] MOTST flag + JP NC, .wait_rdy1 + + LD A, 0x20 + JP .exit + +.stop_wait: + +.long_delay: + DEC BC + LD A, B + OR A + JP NZ, .long_delay + ; exit with A=0 if no error +.exit: + POP BC + RET + +; --------------------------------------------------- +; Init floppy controller +; --------------------------------------------------- +fdc_init: + ; get controller register state + IN A, (FLOPPY) + AND 01001110b ; Get SSEL, DRSEL, MOT1, MOT0 + RRA + OUT (FLOPPY), A + ; Set INIT bit + OR 0x08 + ; Sent to controller + OUT (FLOPPY), A + RET + +; --------------------------------------------------- +; Seek track on floppy +; Inp: B - floppy drive 0-B, 1-C +; DE - track/sector +; --------------------------------------------------- +m_fdc_seek_trk: + LD A, B + DEC A + JP Z, .drv_c + ; check init flag and init drive if needed + LD A, (M_VARS.drv_B_inited) + OR A + CALL Z, floppy_init + ; return if init error + RET C + ; out previous track to FDC + LD A, (M_VARS.drv_B_track) + OUT (FDC_TRACK), A + ; store new track no + LD A, D + LD (M_VARS.drv_B_track), A + JP .cmn +.drv_c: + LD A, (M_VARS.drv_C_inited) + OR A + CALL Z, floppy_init + RET C + LD A, (M_VARS.drv_C_track) + OUT (FDC_TRACK), A + LD A, D + +.cmn: + LD A, (M_VARS.drv_current) + CP B + LD A, B + ; set new current drive + LD (M_VARS.drv_current), A + ; seek track if drive changed + JP NZ, .set_track + ; compare new and current track no + IN A, (FDC_TRACK) + CP D + JP Z, .set_track + + JP C, .l1 + ; new track < prev + LD A, (M_VARS.drv_dir_inout) + OR A + JP NZ, .set_track + LD B, 0xff + CALL delay_b + LD A, 0x1 + LD (M_VARS.drv_dir_inout), A + JP .set_track +.l1: + ; new track > prev + LD A, (M_VARS.drv_dir_inout) + OR A + JP Z, .set_track + LD B, 0xff + CALL delay_b + LD A, 0x0 + LD (M_VARS.drv_dir_inout), A +.set_track: + ; set track no to FDC + LD A, D + OUT (FDC_DATA), A + ; seek track command to FDC (Load head & verify trk) + LD A, 0x1f + OUT (FDC_CMD), A + ; wait + NOP + NOP + ; check status + IN A, (FDC_WAIT) + IN A, (FDC_CMD) + AND 0b00011001 ; SEEK_ERR, CRC_ERR, BUSY + CP 0 + JP NZ, .seek_errs + JP .seek_ok +.seek_errs: + SCF + LD A, 0x40 +.seek_ok: + PUSH AF + LD A, E + OUT (FDC_SECT), A + POP AF + RET + +; --------------------------------------------------- +; Write bytes to floppy +; Inp: C - write sector command +; HL -> byte buffer +; --------------------------------------------------- +m_fdc_write_bytes: + ; Send command to FDC + LD A, C + OUT (FDC_CMD), A +.w_next: + ; DRQ -> CF + IN A, (FDC_WAIT) + RRCA + ; Send byte to FDC + LD A, (HL) + OUT (FDC_DATA), A + INC HL + ; repeat until DRQ active + JP C, .w_next + + CALL fdc_check_status ; TODO: replace call+ret to jp + RET + +; --------------------------------------------------- +; Read bytes from floppy +; Inp: C - read sector command +; HL -> byte buffer +; --------------------------------------------------- +m_fdc_read_c_bytes: + ; Send command to FDC + LD A, C + OUT (FDC_CMD), A + JP .get_drq +.read_next: + ; put byte to buffer + LD (HL), A + INC HL +.get_drq: + ; DRQ -> CF + IN A, (FDC_WAIT) + RRCA + ; read byte from FDC + IN A, (FDC_DATA) + JP C, .read_next + CALL fdc_check_status ; TODO: replace call+ret to jp + RET + +; --------------------------------------------------- +; Check fdc status for errors +; Out: CF set if errors +; --------------------------------------------------- +fdc_check_status: + ; get FDC Status of last command + IN A, (FDC_CMD) + ; mask Write Protect + AND 11011111b + CP 0 + JP Z, fdc_ret + ; error found, set CF + SCF +fdc_ret: + RET + +filler1: + DB 20h + +; filler: +; ds 169, 0xff + +; ------------------------------------------------------ + +LAST EQU $ +CODE_SIZE EQU LAST-0xE000 +FILL_SIZE EQU ROM_CHIP_SIZE-CODE_SIZE + + + IFDEF CHECK_INTEGRITY + ASSERT m_start = 0xe051 + ASSERT m_out_strz = 0xe0f1 + ASSERT m_con_out_int = 0xe16d + ASSERT get_esc_param = 0xe187 + ASSERT esc_params_tab = 0xe1cb + ASSERT esc_handler_tab = 0xe1db + ASSERT esc_set_beep = 0xe1f9 + ASSERT m_print_hor_line = 0xe23a + ASSERT m_get_7vpix = 0xe2b4 + ASSERT esc_set_palette = 0xe2fe + ASSERT m_get_glyph = 0xe320 + ASSERT m_print_no_esc = 0xe349 + ASSERT calc_addr_40 = 0xe439 + ASSERT mp_mode_64 = 0xe4b8 + ASSERT calc_addr_80 = 0xe612 + ASSERT m_clear_screen = 0xe639 + ASSERT m_cursor_home = 0xe66c + ASSERT m_draw_cursor = 0xe69a + ASSERT m_handle_esc_code = 0xe77c + ASSERT handle_cc_common = 0xe7c4 + ASSERT handle_cc_80x25 = 0xe833 + ASSERT m_beep = 0xe85a + ASSERT esc_set_cursor = 0xe890 + ASSERT esc_set_vmode = 0xe8e9 + ASSERT esc_set_color = 0xe92f + ASSERT m_print_at_xy = 0xe943 + ASSERT game_sprite_tab = 0xea39 + ASSERT esc_draw_fill_rect = 0xeb64 + ASSERT draw_line_h = 0xeed1 + ASSERT esc_draw_line = 0xef0b + ASSERT esc_draw_dot = 0xf052 + ASSERT esc_picture = 0xf0a4 + ASSERT m_fn_39 = 0xf10f + ASSERT get_image_hdr = 0xf177 + ASSERT esc_get_put_image = 0xf1b5 + ASSERT pict_sub2 = 0xf3ca + ASSERT m_font_cp0 = 0xf5bc + ASSERT me_out_strz = 0xfb36 + ASSERT m_ramdisk_write = 0xfb6d + ASSERT m_tape_write = 0xfb97 + ASSERT m_tape_wr_byte = 0xfc0e + ASSERT m_tape_read_byte = 0xfcee + ASSERT m_read_tape_bit = 0xfd08 + ASSERT m_tape_wait = 0xfd58 + ENDIF + + ; DISPLAY "Code size is: ", /A, CODE_SIZE + + +FILLER + DS FILL_SIZE, 0xFF + ; DISPLAY "Free size is: ", /A, FILL_SIZE + + ENDMODULE + + OUTEND + + OUTPUT m_vars.bin + ; put in separate waste file + INCLUDE "m_vars.inc" + OUTEND diff --git a/examples/hello/mon/monitor.sld b/examples/hello/mon/monitor.sld new file mode 100644 index 0000000..10b9480 --- /dev/null +++ b/examples/hello/mon/monitor.sld @@ -0,0 +1,5272 @@ +|SLD.data.version|1 +monitor.asm|9||0|-1|-1|Z|pages.size:65536,pages.count:32,slots.count:1,slots.adr:0 +io.inc|16||0|-1|0|D|USR_DD79PA +io.inc|16||0|-1|0|L|,USR_DD79PA,,+equ +io.inc|19||0|-1|1|D|USR_DD79PB +io.inc|19||0|-1|1|L|,USR_DD79PB,,+equ +io.inc|22||0|-1|2|D|USR_DD79PC +io.inc|22||0|-1|2|L|,USR_DD79PC,,+equ +io.inc|26||0|-1|3|D|USR_DD79CTR +io.inc|26||0|-1|3|L|,USR_DD79CTR,,+equ +io.inc|34||0|-1|32|D|FDC_CMD +io.inc|34||0|-1|32|L|,FDC_CMD,,+equ,+used +io.inc|37||0|-1|33|D|FDC_TRACK +io.inc|37||0|-1|33|L|,FDC_TRACK,,+equ,+used +io.inc|40||0|-1|34|D|FDC_SECT +io.inc|40||0|-1|34|L|,FDC_SECT,,+equ,+used +io.inc|43||0|-1|35|D|FDC_DATA +io.inc|43||0|-1|35|L|,FDC_DATA,,+equ,+used +io.inc|46||0|-1|36|D|FDC_WAIT +io.inc|46||0|-1|36|L|,FDC_WAIT,,+equ,+used +io.inc|51||0|-1|37|D|FLOPPY +io.inc|51||0|-1|37|L|,FLOPPY,,+equ,+used +io.inc|58||0|-1|64|D|KBD_DD78PA +io.inc|58||0|-1|64|L|,KBD_DD78PA,,+equ,+used +io.inc|61||0|-1|65|D|KBD_DD78PB +io.inc|61||0|-1|65|L|,KBD_DD78PB,,+equ,+used +io.inc|64||0|-1|66|D|KBD_DD78PC +io.inc|64||0|-1|66|L|,KBD_DD78PC,,+equ,+used +io.inc|68||0|-1|67|D|KBD_DD78CTR +io.inc|68||0|-1|67|L|,KBD_DD78CTR,,+equ,+used +io.inc|75||0|-1|96|D|TMR_DD70C1 +io.inc|75||0|-1|96|L|,TMR_DD70C1,,+equ,+used +io.inc|78||0|-1|97|D|TMR_DD70C2 +io.inc|78||0|-1|97|L|,TMR_DD70C2,,+equ,+used +io.inc|81||0|-1|98|D|TMR_DD70C3 +io.inc|81||0|-1|98|L|,TMR_DD70C3,,+equ +io.inc|89||0|-1|99|D|TMR_DD70CTR +io.inc|89||0|-1|99|L|,TMR_DD70CTR,,+equ,+used +io.inc|92||0|-1|128|D|PIC_DD75RS +io.inc|92||0|-1|128|L|,PIC_DD75RS,,+equ,+used +io.inc|93||0|-1|129|D|PIC_DD75RM +io.inc|93||0|-1|129|L|,PIC_DD75RM,,+equ,+used +io.inc|99||0|-1|160|D|UART_DD72RD +io.inc|99||0|-1|160|L|,UART_DD72RD,,+equ,+used +io.inc|102||0|-1|161|D|UART_DD72RR +io.inc|102||0|-1|161|L|,UART_DD72RR,,+equ,+used +io.inc|108||0|-1|192|D|SYS_DD17PA +io.inc|108||0|-1|192|L|,SYS_DD17PA,,+equ,+used +io.inc|111||0|-1|193|D|SYS_DD17PB +io.inc|111||0|-1|193|L|,SYS_DD17PB,,+equ,+used +io.inc|114||0|-1|194|D|SYS_DD17PC +io.inc|114||0|-1|194|L|,SYS_DD17PC,,+equ,+used +io.inc|118||0|-1|195|D|SYS_DD17CTR +io.inc|118||0|-1|195|L|,SYS_DD17CTR,,+equ,+used +io.inc|124||0|-1|224|D|LPT_DD67PA +io.inc|124||0|-1|224|L|,LPT_DD67PA,,+equ,+used +io.inc|127||0|-1|225|D|VID_DD67PB +io.inc|127||0|-1|225|L|,VID_DD67PB,,+equ,+used +io.inc|130||0|-1|226|D|DD67PC +io.inc|130||0|-1|226|L|,DD67PC,,+equ,+used +io.inc|134||0|-1|227|D|DD67CTR +io.inc|134||0|-1|227|L|,DD67CTR,,+equ,+used +equates.inc|11||0|-1|8|D|ADDLIST +equates.inc|11||0|-1|8|L|,ADDLIST,,+equ +equates.inc|12||0|-1|7|D|ASCII_BELL +equates.inc|12||0|-1|7|L|,ASCII_BELL,,+equ,+used +equates.inc|13||0|-1|8|D|ASCII_BS +equates.inc|13||0|-1|8|L|,ASCII_BS,,+equ,+used +equates.inc|14||0|-1|9|D|ASCII_TAB +equates.inc|14||0|-1|9|L|,ASCII_TAB,,+equ,+used +equates.inc|15||0|-1|10|D|ASCII_LF +equates.inc|15||0|-1|10|L|,ASCII_LF,,+equ,+used +equates.inc|16||0|-1|12|D|ASCII_FF +equates.inc|16||0|-1|12|L|,ASCII_FF,,+equ,+used +equates.inc|17||0|-1|13|D|ASCII_CR +equates.inc|17||0|-1|13|L|,ASCII_CR,,+equ,+used +equates.inc|18||0|-1|24|D|ASCII_CAN +equates.inc|18||0|-1|24|L|,ASCII_CAN,,+equ,+used +equates.inc|19||0|-1|25|D|ASCII_EM +equates.inc|19||0|-1|25|L|,ASCII_EM,,+equ,+used +equates.inc|20||0|-1|26|D|ASCII_SUB +equates.inc|20||0|-1|26|L|,ASCII_SUB,,+equ,+used +equates.inc|21||0|-1|27|D|ASCII_ESC +equates.inc|21||0|-1|27|L|,ASCII_ESC,,+equ,+used +equates.inc|22||0|-1|31|D|ASCII_US +equates.inc|22||0|-1|31|L|,ASCII_US,,+equ,+used +equates.inc|23||0|-1|32|D|ASCII_SP +equates.inc|23||0|-1|32|L|,ASCII_SP,,+equ,+used +equates.inc|24||0|-1|127|D|ASCII_DEL +equates.inc|24||0|-1|127|L|,ASCII_DEL,,+equ +equates.inc|27||0|-1|41|D|BDOS_NFUNCS +equates.inc|27||0|-1|41|L|,BDOS_NFUNCS,,+equ +equates.inc|28||0|-1|8|D|BELL_PIN +equates.inc|28||0|-1|8|L|,BELL_PIN,,+equ,+used +equates.inc|30||0|-1|5|D|CCP_COMMAND_SIZE +equates.inc|30||0|-1|5|L|,CCP_COMMAND_SIZE,,+equ +equates.inc|31||0|-1|3|D|CCP_COMMAND_COUNT +equates.inc|31||0|-1|3|L|,CCP_COMMAND_COUNT,,+equ +equates.inc|32||0|-1|6|D|CCP_COMMAND_CNT +equates.inc|32||0|-1|6|L|,CCP_COMMAND_CNT,,+equ +equates.inc|33||0|-1|4|D|CCP_COMMAND_LEN +equates.inc|33||0|-1|4|L|,CCP_COMMAND_LEN,,+equ +equates.inc|35||0|-1|49152|D|CCP_SRC_ADDR +equates.inc|35||0|-1|49152|L|,CCP_SRC_ADDR,,+equ +equates.inc|36||0|-1|45568|D|CCP_DST_ADDR +equates.inc|36||0|-1|45568|L|,CCP_DST_ADDR,,+equ +equates.inc|37||0|-1|2057|D|CCP_SIZE +equates.inc|37||0|-1|2057|L|,CCP_SIZE,,+equ +equates.inc|39||0|-1|34|D|CPM_VERSION +equates.inc|39||0|-1|34|L|,CPM_VERSION,,+equ +equates.inc|41||0|-1|94|D|CTRL +equates.inc|41||0|-1|94|L|,CTRL,,+equ +equates.inc|42||0|-1|1|D|CTRL_A +equates.inc|42||0|-1|1|L|,CTRL_A,,+equ +equates.inc|43||0|-1|2|D|CTRL_B +equates.inc|43||0|-1|2|L|,CTRL_B,,+equ +equates.inc|44||0|-1|3|D|CTRL_C +equates.inc|44||0|-1|3|L|,CTRL_C,,+equ +equates.inc|45||0|-1|4|D|CTRL_D +equates.inc|45||0|-1|4|L|,CTRL_D,,+equ +equates.inc|46||0|-1|5|D|CTRL_E +equates.inc|46||0|-1|5|L|,CTRL_E,,+equ +equates.inc|47||0|-1|6|D|CTRL_F +equates.inc|47||0|-1|6|L|,CTRL_F,,+equ +equates.inc|48||0|-1|7|D|CTRL_G +equates.inc|48||0|-1|7|L|,CTRL_G,,+equ +equates.inc|49||0|-1|8|D|CTRL_H +equates.inc|49||0|-1|8|L|,CTRL_H,,+equ +equates.inc|50||0|-1|9|D|CTRL_I +equates.inc|50||0|-1|9|L|,CTRL_I,,+equ +equates.inc|51||0|-1|10|D|CTRL_J +equates.inc|51||0|-1|10|L|,CTRL_J,,+equ +equates.inc|52||0|-1|11|D|CTRL_K +equates.inc|52||0|-1|11|L|,CTRL_K,,+equ +equates.inc|53||0|-1|12|D|CTRL_L +equates.inc|53||0|-1|12|L|,CTRL_L,,+equ +equates.inc|54||0|-1|13|D|CTRL_M +equates.inc|54||0|-1|13|L|,CTRL_M,,+equ +equates.inc|55||0|-1|14|D|CTRL_N +equates.inc|55||0|-1|14|L|,CTRL_N,,+equ +equates.inc|56||0|-1|15|D|CTRL_O +equates.inc|56||0|-1|15|L|,CTRL_O,,+equ +equates.inc|57||0|-1|16|D|CTRL_P +equates.inc|57||0|-1|16|L|,CTRL_P,,+equ +equates.inc|58||0|-1|17|D|CTRL_Q +equates.inc|58||0|-1|17|L|,CTRL_Q,,+equ +equates.inc|59||0|-1|18|D|CTRL_R +equates.inc|59||0|-1|18|L|,CTRL_R,,+equ +equates.inc|60||0|-1|19|D|CTRL_S +equates.inc|60||0|-1|19|L|,CTRL_S,,+equ +equates.inc|61||0|-1|20|D|CTRL_T +equates.inc|61||0|-1|20|L|,CTRL_T,,+equ +equates.inc|62||0|-1|21|D|CTRL_U +equates.inc|62||0|-1|21|L|,CTRL_U,,+equ +equates.inc|63||0|-1|22|D|CTRL_V +equates.inc|63||0|-1|22|L|,CTRL_V,,+equ +equates.inc|64||0|-1|23|D|CTRL_W +equates.inc|64||0|-1|23|L|,CTRL_W,,+equ +equates.inc|65||0|-1|24|D|CTRL_X +equates.inc|65||0|-1|24|L|,CTRL_X,,+equ +equates.inc|66||0|-1|25|D|CTRL_Y +equates.inc|66||0|-1|25|L|,CTRL_Y,,+equ +equates.inc|67||0|-1|26|D|CTRL_Z +equates.inc|67||0|-1|26|L|,CTRL_Z,,+equ +equates.inc|70||0|-1|15|D|DBPLIST +equates.inc|70||0|-1|15|L|,DBPLIST,,+equ +equates.inc|71||0|-1|63|D|DEF_DISK_A_SIZE +equates.inc|71||0|-1|63|L|,DEF_DISK_A_SIZE,,+equ +equates.inc|72||0|-1|360|D|DEF_DISK_B_SIZE +equates.inc|72||0|-1|360|L|,DEF_DISK_B_SIZE,,+equ +equates.inc|73||0|-1|128|D|DIR_BUFF_SIZE +equates.inc|73||0|-1|128|L|,DIR_BUFF_SIZE,,+equ +equates.inc|74||0|-1|16|D|DSK_MAP +equates.inc|74||0|-1|16|L|,DSK_MAP,,+equ +equates.inc|75||0|-1|3|D|DSK_MSK +equates.inc|75||0|-1|3|L|,DSK_MSK,,+equ +equates.inc|76||0|-1|2|D|DSK_SHF +equates.inc|76||0|-1|2|L|,DSK_SHF,,+equ +equates.inc|77||0|-1|128|D|DMA_BUFF_SIZE +equates.inc|77||0|-1|128|L|,DMA_BUFF_SIZE,,+equ +equates.inc|79||0|-1|65535|D|ENDDIR +equates.inc|79||0|-1|65535|L|,ENDDIR,,+equ +equates.inc|80||0|-1|26|D|ESC_CMD_END +equates.inc|80||0|-1|26|L|,ESC_CMD_END,,+equ,+used +equates.inc|83||0|-1|0|D|FALSE +equates.inc|83||0|-1|0|L|,FALSE,,+equ +equates.inc|84||0|-1|33|D|FDC_DD80RB +equates.inc|84||0|-1|33|L|,FDC_DD80RB,,+equ +equates.inc|85||0|-1|128|D|FDC_NOT_READY +equates.inc|85||0|-1|128|L|,FDC_NOT_READY,,+equ,+used +equates.inc|86||0|-1|8|D|FDC_RESTORE_L +equates.inc|86||0|-1|8|L|,FDC_RESTORE_L,,+equ +equates.inc|87||0|-1|28|D|FDC_SEEK_LV +equates.inc|87||0|-1|28|L|,FDC_SEEK_LV,,+equ +equates.inc|88||0|-1|3|D|FDC_RESTORE +equates.inc|88||0|-1|3|L|,FDC_RESTORE,,+equ,+used +equates.inc|89||0|-1|229|D|FILE_DELETED +equates.inc|89||0|-1|229|L|,FILE_DELETED,,+equ +equates.inc|90||0|-1|128|D|FWF_MASK +equates.inc|90||0|-1|128|L|,FWF_MASK,,+equ +equates.inc|91||0|-1|32|D|FLOPPY_SSEL +equates.inc|91||0|-1|32|L|,FLOPPY_SSEL,,+equ,+used +equates.inc|96||0|-1|32|D|FCB_LEN +equates.inc|96||0|-1|32|L|,FCB_LEN,,+equ +equates.inc|97||0|-1|5|D|FCB_SHF +equates.inc|97||0|-1|5|L|,FCB_SHF,,+equ +equates.inc|98||0|-1|12|D|FN_LEN +equates.inc|98||0|-1|12|L|,FN_LEN,,+equ +equates.inc|100||0|-1|0|D|FCB_DR +equates.inc|100||0|-1|0|L|,FCB_DR,,+equ +equates.inc|101||0|-1|1|D|FCB_FN +equates.inc|101||0|-1|1|L|,FCB_FN,,+equ +equates.inc|102||0|-1|9|D|FCB_FT +equates.inc|102||0|-1|9|L|,FCB_FT,,+equ +equates.inc|107||0|-1|12|D|FCB_EXT +equates.inc|107||0|-1|12|L|,FCB_EXT,,+equ +equates.inc|109||0|-1|13|D|FCB_S1 +equates.inc|109||0|-1|13|L|,FCB_S1,,+equ +equates.inc|110||0|-1|14|D|FCB_S2 +equates.inc|110||0|-1|14|L|,FCB_S2,,+equ +equates.inc|111||0|-1|15|D|FCB_RC +equates.inc|111||0|-1|15|L|,FCB_RC,,+equ +equates.inc|112||0|-1|16|D|FCB_AL +equates.inc|112||0|-1|16|L|,FCB_AL,,+equ +equates.inc|114||0|-1|32|D|FCB_CR +equates.inc|114||0|-1|32|L|,FCB_CR,,+equ +equates.inc|117||0|-1|33|D|FCB_RN +equates.inc|117||0|-1|33|L|,FCB_RN,,+equ +equates.inc|121||0|-1|195|D|JP_OPCODE +equates.inc|121||0|-1|195|L|,JP_OPCODE,,+equ,+used +equates.inc|123||0|-1|1|D|IRQ_0 +equates.inc|123||0|-1|1|L|,IRQ_0,,+equ +equates.inc|124||0|-1|2|D|IRQ_1 +equates.inc|124||0|-1|2|L|,IRQ_1,,+equ +equates.inc|125||0|-1|4|D|IRQ_2 +equates.inc|125||0|-1|4|L|,IRQ_2,,+equ +equates.inc|127||0|-1|2|D|KBD_IRQ +equates.inc|127||0|-1|2|L|,KBD_IRQ,,+equ,+used +equates.inc|129||0|-1|128|D|KBD_ACK +equates.inc|129||0|-1|128|L|,KBD_ACK,,+equ,+used +equates.inc|131||0|-1|2|D|IRQ_KEYBOARD +equates.inc|131||0|-1|2|L|,IRQ_KEYBOARD,,+equ +equates.inc|132||0|-1|8|D|IRQ_PRINTER +equates.inc|132||0|-1|8|L|,IRQ_PRINTER,,+equ +equates.inc|133||0|-1|16|D|IRQ_TIMER +equates.inc|133||0|-1|16|L|,IRQ_TIMER,,+equ +equates.inc|135||0|-1|13|D|KEY_ALF +equates.inc|135||0|-1|13|L|,KEY_ALF,,+equ +equates.inc|136||0|-1|21|D|KEY_FIX +equates.inc|136||0|-1|21|L|,KEY_FIX,,+equ +equates.inc|138||0|-1|127|D|LST_REC +equates.inc|138||0|-1|127|L|,LST_REC,,+equ +equates.inc|140||0|-1|31|D|MAX_EXT +equates.inc|140||0|-1|31|L|,MAX_EXT,,+equ +equates.inc|141||0|-1|15|D|MAX_MOD +equates.inc|141||0|-1|15|L|,MAX_MOD,,+equ +equates.inc|144||0|-1|15|D|FCB_INFO_LEN +equates.inc|144||0|-1|15|L|,FCB_INFO_LEN,,+equ +equates.inc|147||0|-1|10|D|PIC_POLL_MODE +equates.inc|147||0|-1|10|L|,PIC_POLL_MODE,,+equ,+used +equates.inc|148||0|-1|16|D|PORT_C4 +equates.inc|148||0|-1|16|L|,PORT_C4,,+equ +equates.inc|149||0|-1|16|D|PRINTER_ACK +equates.inc|149||0|-1|16|L|,PRINTER_ACK,,+equ +equates.inc|150||0|-1|8|D|PRINTER_IRQ +equates.inc|150||0|-1|8|L|,PRINTER_IRQ,,+equ,+used +equates.inc|154||0|-1|9|D|RO_FILE +equates.inc|154||0|-1|9|L|,RO_FILE,,+equ +equates.inc|155||0|-1|8192|D|ROM_CHIP_SIZE +equates.inc|155||0|-1|8192|L|,ROM_CHIP_SIZE,,+equ,+used +equates.inc|157||0|-1|2|D|RX_READY +equates.inc|157||0|-1|2|L|,RX_READY,,+equ,+used +equates.inc|159||0|-1|8|D|TAPE_D +equates.inc|159||0|-1|8|L|,TAPE_D,,+equ,+used +equates.inc|160||0|-1|4|D|TAPE_P +equates.inc|160||0|-1|4|L|,TAPE_P,,+equ,+used +equates.inc|161||0|-1|16|D|TIMER_IRQ +equates.inc|161||0|-1|16|L|,TIMER_IRQ,,+equ,+used +equates.inc|162||0|-1|5|D|TL_HIGH +equates.inc|162||0|-1|5|L|,TL_HIGH,,+equ,+used +equates.inc|163||0|-1|3|D|TL_LOW +equates.inc|163||0|-1|3|L|,TL_LOW,,+equ,+used +equates.inc|164||0|-1|4|D|TL_MID +equates.inc|164||0|-1|4|L|,TL_MID,,+equ,+used +equates.inc|165||0|-1|54|D|TMR0_SQWAVE +equates.inc|165||0|-1|54|L|,TMR0_SQWAVE,,+equ,+used +equates.inc|166||0|-1|255|D|TRUE +equates.inc|166||0|-1|255|L|,TRUE,,+equ +equates.inc|167||0|-1|1|D|TX_READY +equates.inc|167||0|-1|1|L|,TX_READY,,+equ,+used +ram.inc|12||0|-1|0|L|RAM,,,+module +ram.inc|14||0|-1|0|D|warm_boot +ram.inc|14||0|-1|0|L|,warm_boot,,+equ +ram.inc|15||0|-1|1|D|warm_boot_addr +ram.inc|15||0|-1|1|L|,warm_boot_addr,,+equ +ram.inc|16||0|-1|3|D|iobyte +ram.inc|16||0|-1|3|L|,iobyte,,+equ +ram.inc|17||0|-1|4|D|cur_user_drv +ram.inc|17||0|-1|4|L|,cur_user_drv,,+equ +ram.inc|18||0|-1|5|D|jp_bdos_enter +ram.inc|18||0|-1|5|L|,jp_bdos_enter,,+equ +ram.inc|19||0|-1|6|D|bdos_ent_addr +ram.inc|19||0|-1|6|L|,bdos_ent_addr,,+equ +ram.inc|20||0|-1|8|D|RST1 +ram.inc|20||0|-1|8|L|,RST1,,+equ +ram.inc|21||0|-1|9|D|RST1_handler_addr +ram.inc|21||0|-1|9|L|,RST1_handler_addr,,+equ +ram.inc|29||0|-1|64|D|bios_var0 +ram.inc|29||0|-1|64|L|,bios_var0,,+equ +ram.inc|30||0|-1|65|D|bios_var1 +ram.inc|30||0|-1|65|L|,bios_var1,,+equ +ram.inc|31||0|-1|66|D|disk_C_tracks +ram.inc|31||0|-1|66|L|,disk_C_tracks,,+equ,+used +ram.inc|32||0|-1|67|D|bios_var3 +ram.inc|32||0|-1|67|L|,bios_var3,,+equ +ram.inc|33||0|-1|68|D|interleave_0 +ram.inc|33||0|-1|68|L|,interleave_0,,+equ +ram.inc|35||0|-1|92|D|fcb1 +ram.inc|35||0|-1|92|L|,fcb1,,+equ +ram.inc|36||0|-1|108|D|fcb2 +ram.inc|36||0|-1|108|L|,fcb2,,+equ +ram.inc|39||0|-1|128|D|dma_buffer +ram.inc|39||0|-1|128|L|,dma_buffer,,+equ +ram.inc|40||0|-1|128|D|p_cmd_line_len +ram.inc|40||0|-1|128|L|,p_cmd_line_len,,+equ +ram.inc|41||0|-1|129|D|p_cmd_line +ram.inc|41||0|-1|129|L|,p_cmd_line,,+equ +ram.inc|42||0|-1|161|D|fcb_ra_record_num +ram.inc|42||0|-1|161|L|,fcb_ra_record_num,,+equ +ram.inc|43||0|-1|256|D|bios_stack +ram.inc|43||0|-1|256|L|,bios_stack,,+equ +ram.inc|44||0|-1|256|D|tpa_start +ram.inc|44||0|-1|256|L|,tpa_start,,+equ +ram.inc|45||0|-1|16384|D|video_ram +ram.inc|45||0|-1|16384|L|,video_ram,,+equ,+used +ram.inc|47||0|-1|0|L|RAM,,,+endmod +bios_entries.inc|12||0|-1|0|L|BIOS,,,+module +bios_entries.inc|14||0|-1|54784|D|BIOS.boot_f +bios_entries.inc|14||0|-1|54784|L|BIOS,boot_f,,+equ,+used +bios_entries.inc|15||0|-1|54787|D|BIOS.wboot_f +bios_entries.inc|15||0|-1|54787|L|BIOS,wboot_f,,+equ +bios_entries.inc|16||0|-1|54790|D|BIOS.const_f +bios_entries.inc|16||0|-1|54790|L|BIOS,const_f,,+equ +bios_entries.inc|17||0|-1|54793|D|BIOS.conin_f +bios_entries.inc|17||0|-1|54793|L|BIOS,conin_f,,+equ +bios_entries.inc|18||0|-1|54796|D|BIOS.conout_f +bios_entries.inc|18||0|-1|54796|L|BIOS,conout_f,,+equ +bios_entries.inc|19||0|-1|54799|D|BIOS.list_f +bios_entries.inc|19||0|-1|54799|L|BIOS,list_f,,+equ +bios_entries.inc|20||0|-1|54802|D|BIOS.punch_f +bios_entries.inc|20||0|-1|54802|L|BIOS,punch_f,,+equ +bios_entries.inc|21||0|-1|54805|D|BIOS.reader_f +bios_entries.inc|21||0|-1|54805|L|BIOS,reader_f,,+equ +bios_entries.inc|22||0|-1|54808|D|BIOS.home_f +bios_entries.inc|22||0|-1|54808|L|BIOS,home_f,,+equ +bios_entries.inc|23||0|-1|54811|D|BIOS.seldsk_f +bios_entries.inc|23||0|-1|54811|L|BIOS,seldsk_f,,+equ +bios_entries.inc|24||0|-1|54814|D|BIOS.settrk_f +bios_entries.inc|24||0|-1|54814|L|BIOS,settrk_f,,+equ +bios_entries.inc|25||0|-1|54817|D|BIOS.setsec_f +bios_entries.inc|25||0|-1|54817|L|BIOS,setsec_f,,+equ +bios_entries.inc|26||0|-1|54820|D|BIOS.setdma_f +bios_entries.inc|26||0|-1|54820|L|BIOS,setdma_f,,+equ +bios_entries.inc|27||0|-1|54823|D|BIOS.read_f +bios_entries.inc|27||0|-1|54823|L|BIOS,read_f,,+equ +bios_entries.inc|28||0|-1|54826|D|BIOS.write_f +bios_entries.inc|28||0|-1|54826|L|BIOS,write_f,,+equ +bios_entries.inc|29||0|-1|54832|D|BIOS.sectran_f +bios_entries.inc|29||0|-1|54832|L|BIOS,sectran_f,,+equ +bios_entries.inc|30||0|-1|54835|D|BIOS.reserved_f1 +bios_entries.inc|30||0|-1|54835|L|BIOS,reserved_f1,,+equ +bios_entries.inc|31||0|-1|54838|D|BIOS.reserved_f2 +bios_entries.inc|31||0|-1|54838|L|BIOS,reserved_f2,,+equ +bios_entries.inc|32||0|-1|54841|D|BIOS.tape_read_f +bios_entries.inc|32||0|-1|54841|L|BIOS,tape_read_f,,+equ +bios_entries.inc|33||0|-1|54844|D|BIOS.tape_write_f +bios_entries.inc|33||0|-1|54844|L|BIOS,tape_write_f,,+equ +bios_entries.inc|34||0|-1|54847|D|BIOS.tape_wait_f +bios_entries.inc|34||0|-1|54847|L|BIOS,tape_wait_f,,+equ +bios_entries.inc|36||0|-1|54859|D|BIOS.drive_B_tracks +bios_entries.inc|36||0|-1|54859|L|BIOS,drive_B_tracks,,+equ,+used +bios_entries.inc|37||0|-1|54860|D|BIOS.drive_C_tracks +bios_entries.inc|37||0|-1|54860|L|BIOS,drive_C_tracks,,+equ +bios_entries.inc|39||0|-1|0|L|BIOS,,,+endmod +monitor.asm|21||0|-1|0|L|MONITOR,,,+module +monitor.asm|29||0|0|57344|F|MONITOR.mon_start +monitor.asm|29||0|0|57344|L|MONITOR,mon_start, +monitor.asm|29||0|0|57344|T| +monitor.asm|30||0|0|57347|F|MONITOR.mon_hexb +monitor.asm|30||0|0|57347|L|MONITOR,mon_hexb, +monitor.asm|30||0|0|57347|T| +monitor.asm|31||0|0|57350|F|MONITOR.non_con_status +monitor.asm|31||0|0|57350|L|MONITOR,non_con_status, +monitor.asm|31||0|0|57350|T| +monitor.asm|32||0|0|57353|F|MONITOR.mon_con_in +monitor.asm|32||0|0|57353|L|MONITOR,mon_con_in, +monitor.asm|32||0|0|57353|T| +monitor.asm|33||0|0|57356|F|MONITOR.mon_con_out +monitor.asm|33||0|0|57356|L|MONITOR,mon_con_out, +monitor.asm|33||0|0|57356|T| +monitor.asm|34||0|0|57359|F|MONITOR.mon_serial_in +monitor.asm|34||0|0|57359|L|MONITOR,mon_serial_in, +monitor.asm|34||0|0|57359|T| +monitor.asm|35||0|0|57362|F|MONITOR.mon_serial_out +monitor.asm|35||0|0|57362|L|MONITOR,mon_serial_out, +monitor.asm|35||0|0|57362|T| +monitor.asm|36||0|0|57365|F|MONITOR.mon_char_print +monitor.asm|36||0|0|57365|L|MONITOR,mon_char_print, +monitor.asm|36||0|0|57365|T| +monitor.asm|37||0|0|57368|F|MONITOR.mon_tape_read +monitor.asm|37||0|0|57368|L|MONITOR,mon_tape_read, +monitor.asm|37||0|0|57368|T| +monitor.asm|38||0|0|57371|F|MONITOR.mon_tape_write +monitor.asm|38||0|0|57371|L|MONITOR,mon_tape_write, +monitor.asm|38||0|0|57371|T| +monitor.asm|39||0|0|57374|F|MONITOR.mon_ram_disk_read +monitor.asm|39||0|0|57374|L|MONITOR,mon_ram_disk_read, +monitor.asm|39||0|0|57374|T| +monitor.asm|40||0|0|57377|F|MONITOR.mon_ram_disk_write +monitor.asm|40||0|0|57377|L|MONITOR,mon_ram_disk_write, +monitor.asm|40||0|0|57377|T| +monitor.asm|41||0|0|57380|F|MONITOR.mon_tape_read_ram +monitor.asm|41||0|0|57380|L|MONITOR,mon_tape_read_ram, +monitor.asm|41||0|0|57380|T| +monitor.asm|42||0|0|57383|F|MONITOR.mon_tape_write_ram +monitor.asm|42||0|0|57383|L|MONITOR,mon_tape_write_ram, +monitor.asm|42||0|0|57383|T| +monitor.asm|43||0|0|57386|F|MONITOR.mon_tape_wait +monitor.asm|43||0|0|57386|L|MONITOR,mon_tape_wait, +monitor.asm|43||0|0|57386|T| +monitor.asm|44||0|0|57389|F|MONITOR.mon_tape_detect +monitor.asm|44||0|0|57389|L|MONITOR,mon_tape_detect, +monitor.asm|44||0|0|57389|T| +monitor.asm|45||0|0|57392|F|MONITOR.mon_read_floppy +monitor.asm|45||0|0|57392|L|MONITOR,mon_read_floppy, +monitor.asm|45||0|0|57392|T| +monitor.asm|46||0|0|57395|F|MONITOR.mon_write_floppy +monitor.asm|46||0|0|57395|L|MONITOR,mon_write_floppy, +monitor.asm|46||0|0|57395|T| +monitor.asm|47||0|0|57398|F|MONITOR.mon_out_str_z +monitor.asm|47||0|0|57398|L|MONITOR,mon_out_str_z, +monitor.asm|47||0|0|57398|T| +monitor.asm|48||0|0|57401|T| +monitor.asm|49||0|0|57404|T| +monitor.asm|50||0|0|57407|T| +monitor.asm|51||0|0|57410|T| +monitor.asm|52||0|0|57413|T| +monitor.asm|53||0|0|57416|T| +monitor.asm|54||0|0|57419|T| +monitor.asm|55||0|0|57422|T| +monitor.asm|61||0|0|57425|F|MONITOR.m_start +monitor.asm|61||0|0|57425|L|MONITOR,m_start,,+used +monitor.asm|62||0|0|57425|T| +monitor.asm|63||0|0|57426|T| +monitor.asm|64||0|0|57428|T| +monitor.asm|65||0|0|57430|T| +monitor.asm|68||0|0|57432|T| +monitor.asm|69||0|0|57434|T| +monitor.asm|72||0|0|57436|T| +monitor.asm|73||0|0|57438|T| +monitor.asm|74||0|0|57440|T| +monitor.asm|75||0|0|57442|T| +monitor.asm|76||0|0|57444|T| +monitor.asm|77||0|0|57446|T| +monitor.asm|78||0|0|57449|T| +monitor.asm|79||0|0|57450|T| +monitor.asm|82||0|0|57452|F|MONITOR.m_start.fill_video +monitor.asm|82||0|0|57452|L|MONITOR,m_start,fill_video,+used +monitor.asm|83||0|0|57452|T| +monitor.asm|84||0|0|57453|T| +monitor.asm|85||0|0|57454|T| +monitor.asm|86||0|0|57455|T| +monitor.asm|89||0|0|57458|T| +monitor.asm|90||0|0|57460|T| +monitor.asm|91||0|0|57462|T| +monitor.asm|92||0|0|57464|T| +monitor.asm|93||0|0|57466|T| +monitor.asm|95||0|0|57469|T| +monitor.asm|96||0|0|57470|T| +monitor.asm|97||0|0|57473|T| +monitor.asm|100||0|0|57476|T| +monitor.asm|101||0|0|57479|T| +monitor.asm|102||0|0|57480|T| +monitor.asm|103||0|0|57483|T| +monitor.asm|104||0|0|57485|T| +monitor.asm|108||0|0|57488|T| +monitor.asm|109||0|0|57490|T| +monitor.asm|112||0|0|57492|T| +monitor.asm|113||0|0|57494|T| +monitor.asm|114||0|0|57496|T| +monitor.asm|115||0|0|57499|T| +monitor.asm|116||0|0|57502|T| +monitor.asm|117||0|0|57505|T| +monitor.asm|118||0|0|57508|T| +monitor.asm|120||0|0|57511|F|MONITOR.m_start.conf_uart +monitor.asm|120||0|0|57511|L|MONITOR,m_start,conf_uart +monitor.asm|122||0|0|57511|T| +monitor.asm|123||0|0|57513|T| +monitor.asm|124||0|0|57515|T| +monitor.asm|125||0|0|57517|T| +monitor.asm|128||0|0|57519|T| +monitor.asm|129||0|0|57521|T| +monitor.asm|132||0|0|57523|T| +monitor.asm|133||0|0|57525|T| +monitor.asm|134||0|0|57527|T| +monitor.asm|135||0|0|57528|T| +monitor.asm|136||0|0|57530|F|MONITOR.m_start.conf_pic +monitor.asm|136||0|0|57530|L|MONITOR,m_start,conf_pic +monitor.asm|138||0|0|57530|T| +monitor.asm|139||0|0|57532|T| +monitor.asm|140||0|0|57534|T| +monitor.asm|141||0|0|57535|T| +monitor.asm|142||0|0|57537|T| +monitor.asm|143||0|0|57538|T| +monitor.asm|144||0|0|57540|T| +monitor.asm|145||0|0|57542|T| +monitor.asm|146||0|0|57544|T| +monitor.asm|147||0|0|57546|T| +monitor.asm|149||0|0|57548|T| +monitor.asm|150||0|0|57550|T| +monitor.asm|151||0|0|57552|T| +monitor.asm|152||0|0|57553|T| +monitor.asm|153||0|0|57554|T| +monitor.asm|154||0|0|57555|T| +monitor.asm|157||0|0|57557|T| +monitor.asm|158||0|0|57560|T| +monitor.asm|161||0|0|57563|T| +monitor.asm|162||0|0|57565|T| +monitor.asm|164||0|0|57568|T| +monitor.asm|165||0|0|57571|T| +monitor.asm|166||0|0|57573|T| +monitor.asm|167||0|0|57576|T| +monitor.asm|168||0|0|57579|T| +monitor.asm|169||0|0|57582|T| +monitor.asm|175||0|0|57585|F|MONITOR.m_out_strz +monitor.asm|175||0|0|57585|L|MONITOR,m_out_strz,,+used +monitor.asm|176||0|0|57585|T| +monitor.asm|177||0|0|57586|T| +monitor.asm|178||0|0|57587|T| +monitor.asm|179||0|0|57588|T| +monitor.asm|180||0|0|57589|T| +monitor.asm|181||0|0|57592|T| +monitor.asm|182||0|0|57593|T| +monitor.asm|184||0|0|57596|F|MONITOR.mgs_system_nf +monitor.asm|184||0|0|57596|L|MONITOR,mgs_system_nf,,+used +monitor.asm|187||0|0|57617|F|MONITOR.m_sys_halt +monitor.asm|187||0|0|57617|L|MONITOR,m_sys_halt,,+used +monitor.asm|188||0|0|57617|T| +monitor.asm|195||0|0|57618|F|MONITOR.m_con_status +monitor.asm|195||0|0|57618|L|MONITOR,m_con_status,,+used +monitor.asm|196||0|0|57618|T| +monitor.asm|197||0|0|57620|T| +monitor.asm|198||0|0|57621|T| +monitor.asm|199||0|0|57623|T| +monitor.asm|200||0|0|57625|T| +monitor.asm|201||0|0|57626|T| +monitor.asm|202||0|0|57627|T| +monitor.asm|208||0|0|57628|F|MONITOR.m_serial_in +monitor.asm|208||0|0|57628|L|MONITOR,m_serial_in,,+used +monitor.asm|209||0|0|57628|T| +monitor.asm|210||0|0|57630|T| +monitor.asm|211||0|0|57632|T| +monitor.asm|212||0|0|57635|T| +monitor.asm|213||0|0|57637|T| +monitor.asm|214||0|0|57639|T| +monitor.asm|220||0|0|57640|F|MONITOR.m_con_in +monitor.asm|220||0|0|57640|L|MONITOR,m_con_in,,+used +monitor.asm|221||0|0|57640|T| +monitor.asm|222||0|0|57643|T| +monitor.asm|223||0|0|57644|T| +monitor.asm|224||0|0|57647|T| +monitor.asm|226||0|0|57649|T| +monitor.asm|227||0|0|57650|T| +monitor.asm|228||0|0|57651|T| +monitor.asm|230||0|0|57652|T| +monitor.asm|231||0|0|57654|T| +monitor.asm|233||0|0|57656|T| +monitor.asm|234||0|0|57657|T| +monitor.asm|235||0|0|57659|T| +monitor.asm|236||0|0|57660|T| +monitor.asm|242||0|0|57661|F|MONITOR.m_serial_out +monitor.asm|242||0|0|57661|L|MONITOR,m_serial_out,,+used +monitor.asm|243||0|0|57661|T| +monitor.asm|244||0|0|57663|T| +monitor.asm|245||0|0|57665|T| +monitor.asm|246||0|0|57668|T| +monitor.asm|247||0|0|57669|T| +monitor.asm|248||0|0|57671|T| +monitor.asm|254||0|0|57672|F|MONITOR.m_char_print +monitor.asm|254||0|0|57672|L|MONITOR,m_char_print,,+used +monitor.asm|256||0|0|57672|T| +monitor.asm|257||0|0|57674|T| +monitor.asm|258||0|0|57676|T| +monitor.asm|260||0|0|57679|T| +monitor.asm|261||0|0|57680|T| +monitor.asm|262||0|0|57681|T| +monitor.asm|264||0|0|57683|T| +monitor.asm|265||0|0|57685|T| +monitor.asm|267||0|0|57687|F|MONITOR.m_char_print.wait_lp +monitor.asm|267||0|0|57687|L|MONITOR,m_char_print,wait_lp,+used +monitor.asm|269||0|0|57687|T| +monitor.asm|270||0|0|57689|T| +monitor.asm|271||0|0|57691|T| +monitor.asm|273||0|0|57694|T| +monitor.asm|274||0|0|57696|T| +monitor.asm|275||0|0|57698|T| +monitor.asm|281||0|0|57699|F|MONITOR.m_con_out +monitor.asm|281||0|0|57699|L|MONITOR,m_con_out,,+used +monitor.asm|282||0|0|57699|T| +monitor.asm|283||0|0|57700|T| +monitor.asm|284||0|0|57701|T| +monitor.asm|285||0|0|57702|T| +monitor.asm|286||0|0|57705|T| +monitor.asm|287||0|0|57706|T| +monitor.asm|288||0|0|57707|T| +monitor.asm|289||0|0|57708|T| +monitor.asm|294||0|0|57709|F|MONITOR.m_con_out_int +monitor.asm|294||0|0|57709|L|MONITOR,m_con_out_int,,+used +monitor.asm|295||0|0|57709|T| +monitor.asm|296||0|0|57712|T| +monitor.asm|297||0|0|57713|T| +monitor.asm|298||0|0|57714|T| +monitor.asm|299||0|0|57715|T| +monitor.asm|300||0|0|57718|T| +monitor.asm|303||0|0|57721|T| +monitor.asm|304||0|0|57722|T| +monitor.asm|305||0|0|57723|T| +monitor.asm|306||0|0|57724|T| +monitor.asm|307||0|0|57727|T| +monitor.asm|308||0|0|57728|T| +monitor.asm|309||0|0|57730|T| +monitor.asm|310||0|0|57731|T| +monitor.asm|311||0|0|57732|T| +monitor.asm|312||0|0|57733|T| +monitor.asm|313||0|0|57734|T| +monitor.asm|315||0|0|57735|F|MONITOR.get_esc_param +monitor.asm|315||0|0|57735|L|MONITOR,get_esc_param,,+used +monitor.asm|316||0|0|57735|T| +monitor.asm|317||0|0|57738|T| +monitor.asm|318||0|0|57739|T| +monitor.asm|319||0|0|57740|T| +monitor.asm|320||0|0|57741|T| +monitor.asm|321||0|0|57742|T| +monitor.asm|323||0|0|57743|T| +monitor.asm|324||0|0|57744|T| +monitor.asm|325||0|0|57746|T| +monitor.asm|326||0|0|57747|T| +monitor.asm|328||0|0|57748|T| +monitor.asm|329||0|0|57751|T| +monitor.asm|330||0|0|57752|T| +monitor.asm|331||0|0|57753|T| +monitor.asm|333||0|0|57754|T| +monitor.asm|336||0|0|57755|T| +monitor.asm|337||0|0|57758|T| +monitor.asm|338||0|0|57759|T| +monitor.asm|339||0|0|57761|T| +monitor.asm|340||0|0|57762|T| +monitor.asm|341||0|0|57763|T| +monitor.asm|342||0|0|57764|T| +monitor.asm|343||0|0|57766|T| +monitor.asm|345||0|0|57767|T| +monitor.asm|346||0|0|57769|T| +monitor.asm|347||0|0|57770|T| +monitor.asm|351||0|0|57771|T| +monitor.asm|352||0|0|57774|T| +monitor.asm|353||0|0|57775|T| +monitor.asm|354||0|0|57776|T| +monitor.asm|355||0|0|57777|T| +monitor.asm|356||0|0|57778|T| +monitor.asm|358||0|0|57779|T| +monitor.asm|360||0|0|57780|T| +monitor.asm|361||0|0|57782|T| +monitor.asm|362||0|0|57785|T| +monitor.asm|363||0|0|57788|T| +monitor.asm|365||0|0|57790|T| +monitor.asm|367||0|0|57793|F|MONITOR.esc_no_draw_fn +monitor.asm|367||0|0|57793|L|MONITOR,esc_no_draw_fn,,+used +monitor.asm|368||0|0|57793|T| +monitor.asm|369||0|0|57796|T| +monitor.asm|372||0|0|57797|T| +monitor.asm|374||0|0|57798|F|MONITOR.esc_exit +monitor.asm|374||0|0|57798|L|MONITOR,esc_exit,,+used +monitor.asm|375||0|0|57798|T| +monitor.asm|376||0|0|57799|T| +monitor.asm|377||0|0|57802|T| +monitor.asm|381||0|0|57803|F|MONITOR.esc_params_tab +monitor.asm|381||0|0|57803|L|MONITOR,esc_params_tab,,+used +monitor.asm|385||0|0|57819|F|MONITOR.esc_handler_tab +monitor.asm|385||0|0|57819|L|MONITOR,esc_handler_tab,,+used +monitor.asm|414||0|0|57849|F|MONITOR.esc_set_beep +monitor.asm|414||0|0|57849|L|MONITOR,esc_set_beep,,+used +monitor.asm|416||0|0|57849|T| +monitor.asm|417||0|0|57852|T| +monitor.asm|418||0|0|57853|T| +monitor.asm|419||0|0|57854|T| +monitor.asm|420||0|0|57855|T| +monitor.asm|421||0|0|57856|T| +monitor.asm|422||0|0|57857|T| +monitor.asm|424||0|0|57860|T| +monitor.asm|425||0|0|57861|T| +monitor.asm|426||0|0|57862|T| +monitor.asm|427||0|0|57863|T| +monitor.asm|428||0|0|57864|T| +monitor.asm|429||0|0|57865|T| +monitor.asm|430||0|0|57866|T| +monitor.asm|431||0|0|57869|T| +monitor.asm|433||0|0|57870|F|MONITOR.esc_set_cursor2 +monitor.asm|433||0|0|57870|L|MONITOR,esc_set_cursor2,,+used +monitor.asm|434||0|0|57870|T| +monitor.asm|436||0|0|57873|F|MONITOR.esc_print_screen +monitor.asm|436||0|0|57873|L|MONITOR,esc_print_screen,,+used +monitor.asm|437||0|0|57873|T| +monitor.asm|438||0|0|57876|T| +monitor.asm|439||0|0|57878|T| +monitor.asm|440||0|0|57879|T| +monitor.asm|441||0|0|57882|T| +monitor.asm|442||0|0|57885|T| +monitor.asm|443||0|0|57886|T| +monitor.asm|445||0|0|57888|F|MONITOR.esc_print_screen.chk_keys +monitor.asm|445||0|0|57888|L|MONITOR,esc_print_screen,chk_keys,+used +monitor.asm|446||0|0|57888|T| +monitor.asm|447||0|0|57891|T| +monitor.asm|448||0|0|57892|T| +monitor.asm|449||0|0|57895|T| +monitor.asm|450||0|0|57898|T| +monitor.asm|451||0|0|57900|T| +monitor.asm|453||0|0|57901|F|MONITOR.esc_print_screen.no_keys +monitor.asm|453||0|0|57901|L|MONITOR,esc_print_screen,no_keys,+used +monitor.asm|454||0|0|57901|T| +monitor.asm|455||0|0|57904|T| +monitor.asm|456||0|0|57905|T| +monitor.asm|457||0|0|57908|T| +monitor.asm|458||0|0|57910|T| +monitor.asm|459||0|0|57913|T| +monitor.asm|465||0|0|57914|F|MONITOR.m_print_hor_line +monitor.asm|465||0|0|57914|L|MONITOR,m_print_hor_line,,+used +monitor.asm|466||0|0|57914|T| +monitor.asm|469||0|0|57917|T| +monitor.asm|470||0|0|57920|T| +monitor.asm|471||0|0|57923|T| +monitor.asm|472||0|0|57926|T| +monitor.asm|474||0|0|57928|F|MONITOR.m_print_hor_line.print_next_col +monitor.asm|474||0|0|57928|L|MONITOR,m_print_hor_line,print_next_col,+used +monitor.asm|475||0|0|57928|T| +monitor.asm|477||0|0|57930|T| +monitor.asm|478||0|0|57933|T| +monitor.asm|479||0|0|57934|T| +monitor.asm|480||0|0|57937|T| +monitor.asm|481||0|0|57940|T| +monitor.asm|484||0|0|57941|T| +monitor.asm|485||0|0|57944|T| +monitor.asm|487||0|0|57946|T| +monitor.asm|488||0|0|57949|T| +monitor.asm|489||0|0|57950|T| +monitor.asm|490||0|0|57953|T| +monitor.asm|491||0|0|57956|T| +monitor.asm|493||0|0|57957|T| +monitor.asm|494||0|0|57960|T| +monitor.asm|495||0|0|57961|T| +monitor.asm|496||0|0|57962|T| +monitor.asm|497||0|0|57964|T| +monitor.asm|498||0|0|57967|T| +monitor.asm|499||0|0|57970|T| +monitor.asm|500||0|0|57973|T| +monitor.asm|506||0|0|57974|F|MONITOR.m_print_cmd +monitor.asm|506||0|0|57974|L|MONITOR,m_print_cmd,,+used +monitor.asm|507||0|0|57974|T| +monitor.asm|508||0|0|57975|F|MONITOR.m_print_cmd.print_nxt +monitor.asm|508||0|0|57975|L|MONITOR,m_print_cmd,print_nxt,+used +monitor.asm|509||0|0|57975|T| +monitor.asm|510||0|0|57976|T| +monitor.asm|511||0|0|57978|T| +monitor.asm|512||0|0|57981|T| +monitor.asm|513||0|0|57982|T| +monitor.asm|514||0|0|57985|T| +monitor.asm|515||0|0|57986|T| +monitor.asm|516||0|0|57989|F|MONITOR.m_print_cmd.cmd_end +monitor.asm|516||0|0|57989|L|MONITOR,m_print_cmd,cmd_end,+used +monitor.asm|517||0|0|57989|T| +monitor.asm|518||0|0|57990|T| +monitor.asm|524||0|0|57991|F|MONITOR.m_print_vert_7pix +monitor.asm|524||0|0|57991|L|MONITOR,m_print_vert_7pix,,+used +monitor.asm|525||0|0|57991|T| +monitor.asm|527||0|0|57992|T| +monitor.asm|528||0|0|57995|T| +monitor.asm|529||0|0|57998|T| +monitor.asm|530||0|0|58001|T| +monitor.asm|531||0|0|58002|T| +monitor.asm|532||0|0|58005|T| +monitor.asm|533||0|0|58006|T| +monitor.asm|535||0|0|58009|T| +monitor.asm|536||0|0|58012|T| +monitor.asm|537||0|0|58015|T| +monitor.asm|539||0|0|58016|T| +monitor.asm|540||0|0|58017|T| +monitor.asm|541||0|0|58020|T| +monitor.asm|548||0|0|58021|F|MONITOR.cmd_esc_inc_Y2 +monitor.asm|548||0|0|58021|L|MONITOR,cmd_esc_inc_Y2,,+used +monitor.asm|555||0|0|58025|F|MONITOR.cmd_esc_set_X0 +monitor.asm|555||0|0|58025|L|MONITOR,cmd_esc_set_X0,,+used +monitor.asm|565||0|0|58030|F|MONITOR.cmd_esc_set_X +monitor.asm|565||0|0|58030|L|MONITOR,cmd_esc_set_X,,+used +monitor.asm|571||0|0|58033|F|MONITOR.cmd_esc_print_col +monitor.asm|571||0|0|58033|L|MONITOR,cmd_esc_print_col,,+used +monitor.asm|581||0|0|58036|F|MONITOR.m_get_7vpix +monitor.asm|581||0|0|58036|L|MONITOR,m_get_7vpix,,+used +monitor.asm|582||0|0|58036|T| +monitor.asm|583||0|0|58039|T| +monitor.asm|584||0|0|58040|T| +monitor.asm|585||0|0|58042|T| +monitor.asm|586||0|0|58043|T| +monitor.asm|587||0|0|58044|T| +monitor.asm|588||0|0|58045|T| +monitor.asm|590||0|0|58046|F|MONITOR.m_get_7vpix.calc_pix_no +monitor.asm|590||0|0|58046|L|MONITOR,m_get_7vpix,calc_pix_no +monitor.asm|591||0|0|58046|T| +monitor.asm|592||0|0|58048|T| +monitor.asm|593||0|0|58049|T| +monitor.asm|595||0|0|58050|T| +monitor.asm|596||0|0|58051|T| +monitor.asm|597||0|0|58052|T| +monitor.asm|598||0|0|58053|T| +monitor.asm|599||0|0|58055|T| +monitor.asm|600||0|0|58056|T| +monitor.asm|601||0|0|58058|T| +monitor.asm|603||0|0|58059|T| +monitor.asm|604||0|0|58060|T| +monitor.asm|605||0|0|58062|T| +monitor.asm|606||0|0|58063|T| +monitor.asm|608||0|0|58064|T| +monitor.asm|609||0|0|58066|T| +monitor.asm|610||0|0|58068|T| +monitor.asm|611||0|0|58069|T| +monitor.asm|612||0|0|58070|T| +monitor.asm|613||0|0|58071|T| +monitor.asm|617||0|0|58072|T| +monitor.asm|618||0|0|58074|T| +monitor.asm|619||0|0|58076|F|MONITOR.m_get_7vpix.for_all_pix +monitor.asm|619||0|0|58076|L|MONITOR,m_get_7vpix,for_all_pix,+used +monitor.asm|620||0|0|58076|T| +monitor.asm|621||0|0|58077|T| +monitor.asm|623||0|0|58080|T| +monitor.asm|624||0|0|58081|T| +monitor.asm|625||0|0|58082|T| +monitor.asm|626||0|0|58083|T| +monitor.asm|627||0|0|58084|T| +monitor.asm|628||0|0|58085|T| +monitor.asm|629||0|0|58086|T| +monitor.asm|630||0|0|58089|F|MONITOR.m_get_7vpix.all_shifted +monitor.asm|630||0|0|58089|L|MONITOR,m_get_7vpix,all_shifted,+used +monitor.asm|631||0|0|58089|T| +monitor.asm|632||0|0|58090|T| +monitor.asm|633||0|0|58092|T| +monitor.asm|634||0|0|58093|T| +monitor.asm|635||0|0|58096|T| +monitor.asm|636||0|0|58098|F|MONITOR.m_get_7vpix.not_1_1 +monitor.asm|636||0|0|58098|L|MONITOR,m_get_7vpix,not_1_1,+used +monitor.asm|637||0|0|58098|T| +monitor.asm|638||0|0|58099|T| +monitor.asm|639||0|0|58102|T| +monitor.asm|640||0|0|58103|T| +monitor.asm|641||0|0|58105|T| +monitor.asm|642||0|0|58106|F|MONITOR.m_get_7vpix.not_1_2 +monitor.asm|642||0|0|58106|L|MONITOR,m_get_7vpix,not_1_2,+used +monitor.asm|643||0|0|58106|T| +monitor.asm|644||0|0|58107|T| +monitor.asm|645||0|0|58108|T| +monitor.asm|646||0|0|58109|T| +monitor.asm|648||0|0|58110|F|MONITOR.esc_set_palette +monitor.asm|648||0|0|58110|L|MONITOR,esc_set_palette,,+used +monitor.asm|649||0|0|58110|T| +monitor.asm|650||0|0|58113|T| +monitor.asm|651||0|0|58115|T| +monitor.asm|652||0|0|58118|T| +monitor.asm|653||0|0|58119|T| +monitor.asm|654||0|0|58122|T| +monitor.asm|655||0|0|58124|T| +monitor.asm|656||0|0|58126|T| +monitor.asm|657||0|0|58129|T| +monitor.asm|659||0|0|58131|F|MONITOR.esp_no_colr +monitor.asm|659||0|0|58131|L|MONITOR,esp_no_colr,,+used +monitor.asm|660||0|0|58131|T| +monitor.asm|661||0|0|58132|T| +monitor.asm|662||0|0|58134|T| +monitor.asm|664||0|0|58135|F|MONITOR.esc_set_charset +monitor.asm|664||0|0|58135|L|MONITOR,esc_set_charset,,+used +monitor.asm|665||0|0|58135|T| +monitor.asm|666||0|0|58138|T| +monitor.asm|667||0|0|58140|T| +monitor.asm|668||0|0|58143|T| +monitor.asm|675||0|0|58144|F|MONITOR.m_get_glyph +monitor.asm|675||0|0|58144|L|MONITOR,m_get_glyph,,+used +monitor.asm|676||0|0|58144|T| +monitor.asm|677||0|0|58145|T| +monitor.asm|678||0|0|58146|T| +monitor.asm|679||0|0|58147|T| +monitor.asm|680||0|0|58148|T| +monitor.asm|682||0|0|58149|T| +monitor.asm|683||0|0|58150|T| +monitor.asm|684||0|0|58151|T| +monitor.asm|685||0|0|58152|T| +monitor.asm|687||0|0|58153|T| +monitor.asm|688||0|0|58154|T| +monitor.asm|690||0|0|58156|T| +monitor.asm|691||0|0|58159|T| +monitor.asm|692||0|0|58162|T| +monitor.asm|694||0|0|58163|T| +monitor.asm|695||0|0|58166|T| +monitor.asm|697||0|0|58167|T| +monitor.asm|700||0|0|58170|T| +monitor.asm|701||0|0|58171|T| +monitor.asm|702||0|0|58173|T| +monitor.asm|703||0|0|58176|F|MONITOR.m_get_glyph.cp_rus +monitor.asm|703||0|0|58176|L|MONITOR,m_get_glyph,cp_rus,+used +monitor.asm|704||0|0|58176|T| +monitor.asm|705||0|0|58179|T| +monitor.asm|707||0|0|58180|F|MONITOR.m_get_glyph.cp_common +monitor.asm|707||0|0|58180|L|MONITOR,m_get_glyph,cp_common,+used +monitor.asm|708||0|0|58180|T| +monitor.asm|709||0|0|58183|T| +monitor.asm|710||0|0|58184|T| +monitor.asm|717||0|0|58185|F|MONITOR.m_print_no_esc +monitor.asm|717||0|0|58185|L|MONITOR,m_print_no_esc,,+used +monitor.asm|718||0|0|58185|T| +monitor.asm|719||0|0|58186|T| +monitor.asm|720||0|0|58188|T| +monitor.asm|721||0|0|58190|T| +monitor.asm|722||0|0|58193|T| +monitor.asm|723||0|0|58196|T| +monitor.asm|724||0|0|58197|T| +monitor.asm|725||0|0|58200|T| +monitor.asm|726||0|0|58202|T| +monitor.asm|728||0|0|58205|T| +monitor.asm|729||0|0|58208|T| +monitor.asm|731||0|0|58209|T| +monitor.asm|732||0|0|58211|T| +monitor.asm|733||0|0|58213|T| +monitor.asm|734||0|0|58214|T| +monitor.asm|736||0|0|58215|T| +monitor.asm|737||0|0|58216|T| +monitor.asm|738||0|0|58217|T| +monitor.asm|739||0|0|58220|T| +monitor.asm|740||0|0|58221|T| +monitor.asm|741||0|0|58224|T| +monitor.asm|742||0|0|58225|T| +monitor.asm|743||0|0|58228|T| +monitor.asm|744||0|0|58231|F|MONITOR.m_print_no_esc.l1 +monitor.asm|744||0|0|58231|L|MONITOR,m_print_no_esc,l1,+used +monitor.asm|745||0|0|58231|T| +monitor.asm|746||0|0|58232|T| +monitor.asm|747||0|0|58233|T| +monitor.asm|748||0|0|58236|T| +monitor.asm|749||0|0|58238|T| +monitor.asm|750||0|0|58241|F|MONITOR.m_print_no_esc.l2 +monitor.asm|750||0|0|58241|L|MONITOR,m_print_no_esc,l2,+used +monitor.asm|751||0|0|58241|T| +monitor.asm|752||0|0|58244|T| +monitor.asm|753||0|0|58246|T| +monitor.asm|754||0|0|58249|F|MONITOR.m_print_no_esc.l3 +monitor.asm|754||0|0|58249|L|MONITOR,m_print_no_esc,l3,+used +monitor.asm|755||0|0|58249|T| +monitor.asm|756||0|0|58252|T| +monitor.asm|757||0|0|58254|T| +monitor.asm|758||0|0|58257|F|MONITOR.m_print_no_esc.l4 +monitor.asm|758||0|0|58257|L|MONITOR,m_print_no_esc,l4,+used +monitor.asm|759||0|0|58257|T| +monitor.asm|760||0|0|58260|T| +monitor.asm|761||0|0|58262|F|MONITOR.m_print_no_esc.l5 +monitor.asm|761||0|0|58262|L|MONITOR,m_print_no_esc,l5,+used +monitor.asm|762||0|0|58262|T| +monitor.asm|763||0|0|58265|T| +monitor.asm|765||0|0|58266|F|MONITOR.m_print_no_esc.sym_draw +monitor.asm|765||0|0|58266|L|MONITOR,m_print_no_esc,sym_draw,+used +monitor.asm|766||0|0|58266|T| +monitor.asm|767||0|0|58269|T| +monitor.asm|768||0|0|58270|T| +monitor.asm|769||0|0|58271|T| +monitor.asm|770||0|0|58273|T| +monitor.asm|771||0|0|58274|T| +monitor.asm|773||0|0|58277|F|MONITOR.m_print_no_esc.pne_l7 +monitor.asm|773||0|0|58277|L|MONITOR,m_print_no_esc,pne_l7,+used +monitor.asm|774||0|0|58277|T| +monitor.asm|775||0|0|58278|T| +monitor.asm|776||0|0|58279|T| +monitor.asm|778||0|0|58282|F|MONITOR.m_print_no_esc.pne_l8 +monitor.asm|778||0|0|58282|L|MONITOR,m_print_no_esc,pne_l8,+used +monitor.asm|779||0|0|58282|T| +monitor.asm|780||0|0|58283|T| +monitor.asm|781||0|0|58284|T| +monitor.asm|782||0|0|58285|T| +monitor.asm|783||0|0|58286|T| +monitor.asm|784||0|0|58289|T| +monitor.asm|785||0|0|58290|T| +monitor.asm|786||0|0|58291|T| +monitor.asm|787||0|0|58292|T| +monitor.asm|788||0|0|58293|T| +monitor.asm|789||0|0|58294|T| +monitor.asm|790||0|0|58295|T| +monitor.asm|791||0|0|58296|T| +monitor.asm|792||0|0|58299|T| +monitor.asm|793||0|0|58300|T| +monitor.asm|794||0|0|58301|T| +monitor.asm|795||0|0|58302|T| +monitor.asm|796||0|0|58303|T| +monitor.asm|797||0|0|58304|T| +monitor.asm|798||0|0|58305|T| +monitor.asm|799||0|0|58306|T| +monitor.asm|800||0|0|58309|T| +monitor.asm|801||0|0|58310|T| +monitor.asm|802||0|0|58311|T| +monitor.asm|803||0|0|58312|T| +monitor.asm|804||0|0|58313|T| +monitor.asm|805||0|0|58314|T| +monitor.asm|806||0|0|58315|T| +monitor.asm|807||0|0|58316|T| +monitor.asm|808||0|0|58319|T| +monitor.asm|809||0|0|58320|T| +monitor.asm|810||0|0|58321|T| +monitor.asm|811||0|0|58322|T| +monitor.asm|812||0|0|58323|T| +monitor.asm|813||0|0|58324|T| +monitor.asm|814||0|0|58325|T| +monitor.asm|815||0|0|58326|T| +monitor.asm|816||0|0|58327|T| +monitor.asm|817||0|0|58328|T| +monitor.asm|818||0|0|58329|T| +monitor.asm|819||0|0|58332|T| +monitor.asm|820||0|0|58333|T| +monitor.asm|821||0|0|58336|T| +monitor.asm|824||0|0|58339|T| +monitor.asm|825||0|0|58341|T| +monitor.asm|828||0|0|58343|T| +monitor.asm|829||0|0|58346|T| +monitor.asm|830||0|0|58347|T| +monitor.asm|836||0|0|58350|F|MONITOR.m40_rt +monitor.asm|836||0|0|58350|L|MONITOR,m40_rt,,+used +monitor.asm|837||0|0|58350|T| +monitor.asm|838||0|0|58351|T| +monitor.asm|839||0|0|58352|T| +monitor.asm|840||0|0|58354|T| +monitor.asm|841||0|0|58356|T| +monitor.asm|842||0|0|58357|T| +monitor.asm|843||0|0|58359|T| +monitor.asm|844||0|0|58360|T| +monitor.asm|846||0|0|58361|F|MONITOR.m40_wrap_rt +monitor.asm|846||0|0|58361|L|MONITOR,m40_wrap_rt,,+used +monitor.asm|847||0|0|58361|T| +monitor.asm|848||0|0|58362|T| +monitor.asm|849||0|0|58363|T| +monitor.asm|850||0|0|58364|T| +monitor.asm|851||0|0|58365|T| +monitor.asm|852||0|0|58368|T| +monitor.asm|853||0|0|58370|T| +monitor.asm|859||0|0|58373|F|MONITOR.m40_lf +monitor.asm|859||0|0|58373|L|MONITOR,m40_lf,,+used +monitor.asm|860||0|0|58373|T| +monitor.asm|861||0|0|58374|T| +monitor.asm|862||0|0|58376|T| +monitor.asm|863||0|0|58378|T| +monitor.asm|864||0|0|58381|T| +monitor.asm|865||0|0|58382|T| +monitor.asm|871||0|0|58383|F|MONITOR.m40_bksp +monitor.asm|871||0|0|58383|L|MONITOR,m40_bksp,,+used +monitor.asm|872||0|0|58383|T| +monitor.asm|873||0|0|58384|T| +monitor.asm|874||0|0|58385|T| +monitor.asm|875||0|0|58387|T| +monitor.asm|876||0|0|58389|T| +monitor.asm|877||0|0|58391|T| +monitor.asm|878||0|0|58394|T| +monitor.asm|879||0|0|58395|T| +monitor.asm|880||0|0|58396|T| +monitor.asm|882||0|0|58397|F|MONITOR.m40_bksp.wrap +monitor.asm|882||0|0|58397|L|MONITOR,m40_bksp,wrap,+used +monitor.asm|883||0|0|58397|T| +monitor.asm|884||0|0|58399|T| +monitor.asm|885||0|0|58400|T| +monitor.asm|892||0|0|58401|F|MONITOR.m40_up +monitor.asm|892||0|0|58401|L|MONITOR,m40_up,,+used +monitor.asm|893||0|0|58401|T| +monitor.asm|894||0|0|58402|T| +monitor.asm|895||0|0|58404|T| +monitor.asm|896||0|0|58407|T| +monitor.asm|897||0|0|58409|F|MONITOR.m40_up.up_no_minus +monitor.asm|897||0|0|58409|L|MONITOR,m40_up,up_no_minus,+used +monitor.asm|898||0|0|58409|T| +monitor.asm|899||0|0|58410|T| +monitor.asm|905||0|0|58411|F|MONITOR.m20_tab +monitor.asm|905||0|0|58411|L|MONITOR,m20_tab,,+used +monitor.asm|906||0|0|58411|T| +monitor.asm|907||0|0|58412|T| +monitor.asm|908||0|0|58413|T| +monitor.asm|909||0|0|58415|T| +monitor.asm|910||0|0|58417|T| +monitor.asm|911||0|0|58418|T| +monitor.asm|912||0|0|58420|T| +monitor.asm|913||0|0|58421|T| +monitor.asm|914||0|0|58422|T| +monitor.asm|919||0|0|58425|F|MONITOR.calc_addr_40 +monitor.asm|919||0|0|58425|L|MONITOR,calc_addr_40,,+used +monitor.asm|920||0|0|58425|T| +monitor.asm|921||0|0|58428|T| +monitor.asm|922||0|0|58431|T| +monitor.asm|923||0|0|58432|T| +monitor.asm|924||0|0|58433|T| +monitor.asm|925||0|0|58434|T| +monitor.asm|926||0|0|58436|T| +monitor.asm|927||0|0|58437|T| +monitor.asm|928||0|0|58440|T| +monitor.asm|929||0|0|58442|T| +monitor.asm|930||0|0|58443|T| +monitor.asm|931||0|0|58444|T| +monitor.asm|932||0|0|58445|T| +monitor.asm|933||0|0|58446|T| +monitor.asm|934||0|0|58447|T| +monitor.asm|935||0|0|58448|T| +monitor.asm|936||0|0|58449|T| +monitor.asm|937||0|0|58451|T| +monitor.asm|939||0|0|58452|F|MONITOR.calc_addr_40.l1 +monitor.asm|939||0|0|58452|L|MONITOR,calc_addr_40,l1,+used +monitor.asm|940||0|0|58452|T| +monitor.asm|941||0|0|58453|T| +monitor.asm|942||0|0|58454|T| +monitor.asm|943||0|0|58457|T| +monitor.asm|945||0|0|58458|F|MONITOR.calc_addr_40.l2 +monitor.asm|945||0|0|58458|L|MONITOR,calc_addr_40,l2,+used +monitor.asm|946||0|0|58458|T| +monitor.asm|947||0|0|58459|T| +monitor.asm|948||0|0|58461|T| +monitor.asm|949||0|0|58462|T| +monitor.asm|950||0|0|58464|T| +monitor.asm|951||0|0|58467|T| +monitor.asm|953||0|0|58468|F|MONITOR.m2_lf +monitor.asm|953||0|0|58468|L|MONITOR,m2_lf,,+used +monitor.asm|954||0|0|58468|T| +monitor.asm|955||0|0|58469|T| +monitor.asm|956||0|0|58471|T| +monitor.asm|957||0|0|58473|T| +monitor.asm|958||0|0|58476|T| +monitor.asm|959||0|0|58477|T| +monitor.asm|961||0|0|58478|F|MONITOR.m2_lf.lf_nowr +monitor.asm|961||0|0|58478|L|MONITOR,m2_lf,lf_nowr,+used +monitor.asm|962||0|0|58478|T| +monitor.asm|963||0|0|58481|T| +monitor.asm|964||0|0|58482|T| +monitor.asm|965||0|0|58484|T| +monitor.asm|966||0|0|58485|T| +monitor.asm|968||0|0|58487|T| +monitor.asm|969||0|0|58489|T| +monitor.asm|971||0|0|58491|F|MONITOR.m2_lf.cas_l5 +monitor.asm|971||0|0|58491|L|MONITOR,m2_lf,cas_l5,+used +monitor.asm|972||0|0|58491|T| +monitor.asm|973||0|0|58493|T| +monitor.asm|974||0|0|58495|T| +monitor.asm|976||0|0|58496|F|MONITOR.m2_lf.cas_l6 +monitor.asm|976||0|0|58496|L|MONITOR,m2_lf,cas_l6,+used +monitor.asm|977||0|0|58496|T| +monitor.asm|978||0|0|58497|T| +monitor.asm|979||0|0|58498|T| +monitor.asm|980||0|0|58499|T| +monitor.asm|981||0|0|58500|T| +monitor.asm|982||0|0|58501|T| +monitor.asm|983||0|0|58504|T| +monitor.asm|984||0|0|58505|T| +monitor.asm|985||0|0|58506|T| +monitor.asm|986||0|0|58507|T| +monitor.asm|987||0|0|58510|T| +monitor.asm|988||0|0|58512|T| +monitor.asm|989||0|0|58515|T| +monitor.asm|990||0|0|58517|T| +monitor.asm|992||0|0|58518|F|MONITOR.m2_lf.cas_l7 +monitor.asm|992||0|0|58518|L|MONITOR,m2_lf,cas_l7,+used +monitor.asm|993||0|0|58518|T| +monitor.asm|994||0|0|58520|T| +monitor.asm|995||0|0|58522|T| +monitor.asm|997||0|0|58523|F|MONITOR.m2_lf.cas_l8 +monitor.asm|997||0|0|58523|L|MONITOR,m2_lf,cas_l8,+used +monitor.asm|998||0|0|58523|T| +monitor.asm|999||0|0|58524|T| +monitor.asm|1000||0|0|58525|T| +monitor.asm|1001||0|0|58526|T| +monitor.asm|1002||0|0|58529|T| +monitor.asm|1003||0|0|58530|T| +monitor.asm|1004||0|0|58531|T| +monitor.asm|1005||0|0|58534|T| +monitor.asm|1006||0|0|58536|T| +monitor.asm|1007||0|0|58538|T| +monitor.asm|1013||0|0|58539|F|MONITOR.m20_bksp +monitor.asm|1013||0|0|58539|L|MONITOR,m20_bksp,,+used +monitor.asm|1014||0|0|58539|T| +monitor.asm|1015||0|0|58540|T| +monitor.asm|1016||0|0|58541|T| +monitor.asm|1017||0|0|58542|T| +monitor.asm|1018||0|0|58543|T| +monitor.asm|1020||0|0|58544|T| +monitor.asm|1021||0|0|58545|T| +monitor.asm|1022||0|0|58547|T| +monitor.asm|1023||0|0|58549|T| +monitor.asm|1024||0|0|58550|T| +monitor.asm|1025||0|0|58551|T| +monitor.asm|1030||0|0|58552|F|MONITOR.mp_mode_64 +monitor.asm|1030||0|0|58552|L|MONITOR,mp_mode_64,,+used +monitor.asm|1031||0|0|58552|T| +monitor.asm|1032||0|0|58554|T| +monitor.asm|1034||0|0|58557|T| +monitor.asm|1035||0|0|58560|T| +monitor.asm|1036||0|0|58563|T| +monitor.asm|1037||0|0|58564|T| +monitor.asm|1038||0|0|58565|T| +monitor.asm|1039||0|0|58566|T| +monitor.asm|1040||0|0|58568|T| +monitor.asm|1042||0|0|58569|T| +monitor.asm|1045||0|0|58571|T| +monitor.asm|1046||0|0|58573|T| +monitor.asm|1048||0|0|58575|T| +monitor.asm|1049||0|0|58576|T| +monitor.asm|1050||0|0|58577|T| +monitor.asm|1051||0|0|58578|T| +monitor.asm|1053||0|0|58579|F|MONITOR.mp_mode_64.next_row +monitor.asm|1053||0|0|58579|L|MONITOR,mp_mode_64,next_row,+used +monitor.asm|1054||0|0|58579|T| +monitor.asm|1055||0|0|58580|T| +monitor.asm|1056||0|0|58581|T| +monitor.asm|1057||0|0|58582|T| +monitor.asm|1058||0|0|58583|T| +monitor.asm|1059||0|0|58584|T| +monitor.asm|1060||0|0|58585|T| +monitor.asm|1062||0|0|58588|T| +monitor.asm|1063||0|0|58590|T| +monitor.asm|1065||0|0|58592|T| +monitor.asm|1066||0|0|58595|T| +monitor.asm|1067||0|0|58596|T| +monitor.asm|1073||0|0|58599|F|MONITOR.m64_rt +monitor.asm|1073||0|0|58599|L|MONITOR,m64_rt,,+used +monitor.asm|1074||0|0|58599|T| +monitor.asm|1075||0|0|58600|T| +monitor.asm|1076||0|0|58601|T| +monitor.asm|1077||0|0|58603|T| +monitor.asm|1078||0|0|58605|T| +monitor.asm|1079||0|0|58606|T| +monitor.asm|1080||0|0|58607|T| +monitor.asm|1086||0|0|58608|F|MONITOR.m64_lf +monitor.asm|1086||0|0|58608|L|MONITOR,m64_lf,,+used +monitor.asm|1087||0|0|58608|T| +monitor.asm|1088||0|0|58609|T| +monitor.asm|1089||0|0|58611|T| +monitor.asm|1090||0|0|58613|T| +monitor.asm|1091||0|0|58616|T| +monitor.asm|1092||0|0|58617|T| +monitor.asm|1097||0|0|58618|F|MONITOR.scroll_up +monitor.asm|1097||0|0|58618|L|MONITOR,scroll_up,,+used +monitor.asm|1098||0|0|58618|T| +monitor.asm|1099||0|0|58621|T| +monitor.asm|1100||0|0|58623|T| +monitor.asm|1101||0|0|58625|T| +monitor.asm|1103||0|0|58628|T| +monitor.asm|1104||0|0|58631|T| +monitor.asm|1105||0|0|58632|T| +monitor.asm|1106||0|0|58633|T| +monitor.asm|1109||0|0|58634|T| +monitor.asm|1110||0|0|58636|T| +monitor.asm|1112||0|0|58638|T| +monitor.asm|1113||0|0|58639|T| +monitor.asm|1115||0|0|58642|F|MONITOR.scroll_up.next_row +monitor.asm|1115||0|0|58642|L|MONITOR,scroll_up,next_row,+used +monitor.asm|1116||0|0|58642|T| +monitor.asm|1117||0|0|58643|T| +monitor.asm|1120||0|0|58644|F|MONITOR.scroll_up.next_col +monitor.asm|1120||0|0|58644|L|MONITOR,scroll_up,next_col,+used +monitor.asm|1121||0|0|58644|T| +monitor.asm|1122||0|0|58645|T| +monitor.asm|1123||0|0|58646|T| +monitor.asm|1124||0|0|58647|T| +monitor.asm|1125||0|0|58650|T| +monitor.asm|1126||0|0|58651|T| +monitor.asm|1127||0|0|58652|T| +monitor.asm|1130||0|0|58655|T| +monitor.asm|1131||0|0|58657|T| +monitor.asm|1132||0|0|58659|T| +monitor.asm|1138||0|0|58660|F|MONITOR.m64_bs +monitor.asm|1138||0|0|58660|L|MONITOR,m64_bs,,+used +monitor.asm|1139||0|0|58660|T| +monitor.asm|1140||0|0|58661|T| +monitor.asm|1141||0|0|58662|T| +monitor.asm|1142||0|0|58664|T| +monitor.asm|1143||0|0|58666|T| +monitor.asm|1144||0|0|58667|T| +monitor.asm|1145||0|0|58669|T| +monitor.asm|1146||0|0|58670|T| +monitor.asm|1153||0|0|58671|F|MONITOR.m64_up +monitor.asm|1153||0|0|58671|L|MONITOR,m64_up,,+used +monitor.asm|1154||0|0|58671|T| +monitor.asm|1155||0|0|58672|T| +monitor.asm|1156||0|0|58674|T| +monitor.asm|1157||0|0|58677|T| +monitor.asm|1159||0|0|58679|F|MONITOR.m64_up.no_wrap +monitor.asm|1159||0|0|58679|L|MONITOR,m64_up,no_wrap,+used +monitor.asm|1160||0|0|58679|T| +monitor.asm|1161||0|0|58680|T| +monitor.asm|1167||0|0|58681|F|MONITOR.m64_tab +monitor.asm|1167||0|0|58681|L|MONITOR,m64_tab,,+used +monitor.asm|1168||0|0|58681|T| +monitor.asm|1169||0|0|58682|T| +monitor.asm|1170||0|0|58683|T| +monitor.asm|1171||0|0|58685|T| +monitor.asm|1172||0|0|58687|T| +monitor.asm|1173||0|0|58688|T| +monitor.asm|1174||0|0|58689|T| +monitor.asm|1176||0|0|58690|T| +monitor.asm|1181||0|0|58693|F|MONITOR.mp_mode_80 +monitor.asm|1181||0|0|58693|L|MONITOR,mp_mode_80,,+used +monitor.asm|1182||0|0|58693|T| +monitor.asm|1184||0|0|58696|T| +monitor.asm|1185||0|0|58698|T| +monitor.asm|1188||0|0|58700|T| +monitor.asm|1189||0|0|58701|T| +monitor.asm|1191||0|0|58702|T| +monitor.asm|1192||0|0|58703|T| +monitor.asm|1193||0|0|58704|T| +monitor.asm|1194||0|0|58707|T| +monitor.asm|1195||0|0|58708|T| +monitor.asm|1196||0|0|58711|T| +monitor.asm|1197||0|0|58712|T| +monitor.asm|1198||0|0|58715|T| +monitor.asm|1200||0|0|58718|F|MONITOR.mp_mode_80.l1 +monitor.asm|1200||0|0|58718|L|MONITOR,mp_mode_80,l1,+used +monitor.asm|1201||0|0|58718|T| +monitor.asm|1202||0|0|58719|T| +monitor.asm|1203||0|0|58720|T| +monitor.asm|1204||0|0|58722|T| +monitor.asm|1205||0|0|58723|T| +monitor.asm|1206||0|0|58724|T| +monitor.asm|1207||0|0|58725|T| +monitor.asm|1208||0|0|58726|T| +monitor.asm|1209||0|0|58727|T| +monitor.asm|1210||0|0|58730|T| +monitor.asm|1211||0|0|58733|F|MONITOR.mp_mode_80.l2 +monitor.asm|1211||0|0|58733|L|MONITOR,mp_mode_80,l2,+used +monitor.asm|1212||0|0|58733|T| +monitor.asm|1213||0|0|58734|T| +monitor.asm|1214||0|0|58735|T| +monitor.asm|1215||0|0|58736|T| +monitor.asm|1216||0|0|58738|T| +monitor.asm|1217||0|0|58739|T| +monitor.asm|1218||0|0|58740|T| +monitor.asm|1219||0|0|58742|T| +monitor.asm|1220||0|0|58743|T| +monitor.asm|1221||0|0|58744|T| +monitor.asm|1222||0|0|58745|T| +monitor.asm|1223||0|0|58746|T| +monitor.asm|1224||0|0|58747|T| +monitor.asm|1225||0|0|58749|T| +monitor.asm|1226||0|0|58750|T| +monitor.asm|1227||0|0|58751|T| +monitor.asm|1228||0|0|58752|T| +monitor.asm|1229||0|0|58754|T| +monitor.asm|1230||0|0|58755|T| +monitor.asm|1231||0|0|58756|T| +monitor.asm|1232||0|0|58757|T| +monitor.asm|1233||0|0|58758|T| +monitor.asm|1234||0|0|58759|T| +monitor.asm|1235||0|0|58760|T| +monitor.asm|1236||0|0|58763|T| +monitor.asm|1237||0|0|58766|F|MONITOR.mp_mode_80.l3 +monitor.asm|1237||0|0|58766|L|MONITOR,mp_mode_80,l3,+used +monitor.asm|1238||0|0|58766|T| +monitor.asm|1239||0|0|58767|T| +monitor.asm|1240||0|0|58768|T| +monitor.asm|1241||0|0|58769|T| +monitor.asm|1242||0|0|58770|T| +monitor.asm|1243||0|0|58771|T| +monitor.asm|1244||0|0|58773|T| +monitor.asm|1245||0|0|58774|T| +monitor.asm|1246||0|0|58775|T| +monitor.asm|1247||0|0|58777|T| +monitor.asm|1248||0|0|58778|T| +monitor.asm|1249||0|0|58779|T| +monitor.asm|1250||0|0|58780|T| +monitor.asm|1251||0|0|58781|T| +monitor.asm|1252||0|0|58782|T| +monitor.asm|1253||0|0|58783|T| +monitor.asm|1254||0|0|58784|T| +monitor.asm|1255||0|0|58786|T| +monitor.asm|1256||0|0|58787|T| +monitor.asm|1257||0|0|58788|T| +monitor.asm|1258||0|0|58789|T| +monitor.asm|1259||0|0|58791|T| +monitor.asm|1260||0|0|58792|T| +monitor.asm|1261||0|0|58793|T| +monitor.asm|1262||0|0|58794|T| +monitor.asm|1263||0|0|58795|T| +monitor.asm|1264||0|0|58796|T| +monitor.asm|1265||0|0|58797|T| +monitor.asm|1266||0|0|58800|T| +monitor.asm|1267||0|0|58803|F|MONITOR.mp_mode_80.l4 +monitor.asm|1267||0|0|58803|L|MONITOR,mp_mode_80,l4,+used +monitor.asm|1268||0|0|58803|T| +monitor.asm|1269||0|0|58804|F|MONITOR.mp_mode_80.l5 +monitor.asm|1269||0|0|58804|L|MONITOR,mp_mode_80,l5,+used +monitor.asm|1270||0|0|58804|T| +monitor.asm|1271||0|0|58805|T| +monitor.asm|1272||0|0|58806|T| +monitor.asm|1273||0|0|58807|T| +monitor.asm|1274||0|0|58808|T| +monitor.asm|1275||0|0|58809|T| +monitor.asm|1276||0|0|58811|T| +monitor.asm|1277||0|0|58812|T| +monitor.asm|1278||0|0|58813|T| +monitor.asm|1279||0|0|58814|T| +monitor.asm|1280||0|0|58815|T| +monitor.asm|1281||0|0|58816|T| +monitor.asm|1282||0|0|58819|T| +monitor.asm|1284||0|0|58820|F|MONITOR.mp_mode_80.l6 +monitor.asm|1284||0|0|58820|L|MONITOR,mp_mode_80,l6,+used +monitor.asm|1286||0|0|58820|T| +monitor.asm|1287||0|0|58822|T| +monitor.asm|1289||0|0|58824|T| +monitor.asm|1290||0|0|58827|T| +monitor.asm|1291||0|0|58828|T| +monitor.asm|1297||0|0|58831|F|MONITOR.m80_rt +monitor.asm|1297||0|0|58831|L|MONITOR,m80_rt,,+used +monitor.asm|1298||0|0|58831|T| +monitor.asm|1299||0|0|58832|T| +monitor.asm|1300||0|0|58833|T| +monitor.asm|1301||0|0|58835|T| +monitor.asm|1302||0|0|58837|T| +monitor.asm|1303||0|0|58838|T| +monitor.asm|1304||0|0|58840|T| +monitor.asm|1305||0|0|58841|T| +monitor.asm|1307||0|0|58842|F|MONITOR.m80_col_wrap +monitor.asm|1307||0|0|58842|L|MONITOR,m80_col_wrap,,+used +monitor.asm|1308||0|0|58842|T| +monitor.asm|1309||0|0|58843|T| +monitor.asm|1310||0|0|58844|T| +monitor.asm|1311||0|0|58845|T| +monitor.asm|1318||0|0|58846|F|MONITOR.m80_lf +monitor.asm|1318||0|0|58846|L|MONITOR,m80_lf,,+used +monitor.asm|1319||0|0|58846|T| +monitor.asm|1320||0|0|58847|T| +monitor.asm|1321||0|0|58849|T| +monitor.asm|1322||0|0|58851|T| +monitor.asm|1323||0|0|58854|T| +monitor.asm|1324||0|0|58855|T| +monitor.asm|1330||0|0|58856|F|MONITOR.m80_bs +monitor.asm|1330||0|0|58856|L|MONITOR,m80_bs,,+used +monitor.asm|1331||0|0|58856|T| +monitor.asm|1332||0|0|58857|T| +monitor.asm|1333||0|0|58858|T| +monitor.asm|1334||0|0|58860|T| +monitor.asm|1335||0|0|58862|T| +monitor.asm|1336||0|0|58864|T| +monitor.asm|1337||0|0|58867|T| +monitor.asm|1338||0|0|58868|T| +monitor.asm|1339||0|0|58869|T| +monitor.asm|1341||0|0|58870|F|MONITOR.m80_bs.wrap +monitor.asm|1341||0|0|58870|L|MONITOR,m80_bs,wrap,+used +monitor.asm|1342||0|0|58870|T| +monitor.asm|1343||0|0|58872|T| +monitor.asm|1344||0|0|58873|T| +monitor.asm|1351||0|0|58874|F|MONITOR.m80_up +monitor.asm|1351||0|0|58874|L|MONITOR,m80_up,,+used +monitor.asm|1352||0|0|58874|T| +monitor.asm|1353||0|0|58875|T| +monitor.asm|1354||0|0|58877|T| +monitor.asm|1355||0|0|58880|T| +monitor.asm|1357||0|0|58882|F|MONITOR.m80_up.no_wrap +monitor.asm|1357||0|0|58882|L|MONITOR,m80_up,no_wrap,+used +monitor.asm|1358||0|0|58882|T| +monitor.asm|1359||0|0|58883|T| +monitor.asm|1365||0|0|58884|F|MONITOR.m80_tab +monitor.asm|1365||0|0|58884|L|MONITOR,m80_tab,,+used +monitor.asm|1366||0|0|58884|T| +monitor.asm|1367||0|0|58885|T| +monitor.asm|1368||0|0|58886|T| +monitor.asm|1369||0|0|58888|T| +monitor.asm|1370||0|0|58890|T| +monitor.asm|1371||0|0|58891|T| +monitor.asm|1372||0|0|58893|T| +monitor.asm|1373||0|0|58894|T| +monitor.asm|1374||0|0|58895|T| +monitor.asm|1381||0|0|58898|F|MONITOR.calc_addr_80 +monitor.asm|1381||0|0|58898|L|MONITOR,calc_addr_80,,+used +monitor.asm|1382||0|0|58898|T| +monitor.asm|1383||0|0|58901|T| +monitor.asm|1384||0|0|58904|T| +monitor.asm|1385||0|0|58905|T| +monitor.asm|1386||0|0|58906|T| +monitor.asm|1387||0|0|58907|T| +monitor.asm|1388||0|0|58909|T| +monitor.asm|1389||0|0|58910|T| +monitor.asm|1390||0|0|58913|T| +monitor.asm|1391||0|0|58915|T| +monitor.asm|1392||0|0|58916|T| +monitor.asm|1393||0|0|58917|T| +monitor.asm|1394||0|0|58918|T| +monitor.asm|1395||0|0|58919|T| +monitor.asm|1396||0|0|58920|T| +monitor.asm|1397||0|0|58921|T| +monitor.asm|1398||0|0|58922|T| +monitor.asm|1399||0|0|58924|T| +monitor.asm|1400||0|0|58925|F|MONITOR.mns_l1 +monitor.asm|1400||0|0|58925|L|MONITOR,mns_l1,,+used +monitor.asm|1401||0|0|58925|T| +monitor.asm|1402||0|0|58926|T| +monitor.asm|1403||0|0|58927|T| +monitor.asm|1404||0|0|58930|T| +monitor.asm|1405||0|0|58931|F|MONITOR.mns_ep_fm_0 +monitor.asm|1405||0|0|58931|L|MONITOR,mns_ep_fm_0,,+used +monitor.asm|1406||0|0|58931|T| +monitor.asm|1407||0|0|58933|T| +monitor.asm|1408||0|0|58934|T| +monitor.asm|1409||0|0|58936|T| +monitor.asm|1415||0|0|58937|F|MONITOR.m_clear_screen +monitor.asm|1415||0|0|58937|L|MONITOR,m_clear_screen,,+used +monitor.asm|1416||0|0|58937|T| +monitor.asm|1417||0|0|58940|T| +monitor.asm|1418||0|0|58942|T| +monitor.asm|1420||0|0|58945|T| +monitor.asm|1421||0|0|58947|T| +monitor.asm|1423||0|0|58949|T| +monitor.asm|1424||0|0|58951|T| +monitor.asm|1425||0|0|58953|T| +monitor.asm|1426||0|0|58956|T| +monitor.asm|1427||0|0|58957|T| +monitor.asm|1428||0|0|58958|T| +monitor.asm|1429||0|0|58960|T| +monitor.asm|1431||0|0|58962|F|MONITOR.m_clear_screen.fill_scrn +monitor.asm|1431||0|0|58962|L|MONITOR,m_clear_screen,fill_scrn,+used +monitor.asm|1432||0|0|58962|T| +monitor.asm|1433||0|0|58963|T| +monitor.asm|1434||0|0|58964|T| +monitor.asm|1435||0|0|58965|T| +monitor.asm|1437||0|0|58968|T| +monitor.asm|1438||0|0|58969|T| +monitor.asm|1439||0|0|58972|T| +monitor.asm|1440||0|0|58973|T| +monitor.asm|1441||0|0|58976|T| +monitor.asm|1442||0|0|58978|T| +monitor.asm|1443||0|0|58980|T| +monitor.asm|1444||0|0|58983|T| +monitor.asm|1445||0|0|58985|F|MONITOR.m_clear_screen.mono_mode +monitor.asm|1445||0|0|58985|L|MONITOR,m_clear_screen,mono_mode,+used +monitor.asm|1446||0|0|58985|T| +monitor.asm|1448||0|0|58986|T| +monitor.asm|1456||0|0|58988|F|MONITOR.m_cursor_home +monitor.asm|1456||0|0|58988|L|MONITOR,m_cursor_home,,+used +monitor.asm|1457||0|0|58988|T| +monitor.asm|1458||0|0|58989|T| +monitor.asm|1459||0|0|58990|T| +monitor.asm|1460||0|0|58991|T| +monitor.asm|1461||0|0|58992|T| +monitor.asm|1462||0|0|58993|T| +monitor.asm|1463||0|0|58994|T| +monitor.asm|1464||0|0|58995|T| +monitor.asm|1466||0|0|58996|T| +monitor.asm|1468||0|0|58998|T| +monitor.asm|1469||0|0|59000|T| +monitor.asm|1472||0|0|59001|F|MONITOR.m_clear_20_rows +monitor.asm|1472||0|0|59001|L|MONITOR,m_clear_20_rows,,+used +monitor.asm|1474||0|0|59001|T| +monitor.asm|1475||0|0|59004|T| +monitor.asm|1476||0|0|59005|T| +monitor.asm|1479||0|0|59007|T| +monitor.asm|1480||0|0|59009|T| +monitor.asm|1482||0|0|59011|F|MONITOR.m_clear_20_rows.next_row +monitor.asm|1482||0|0|59011|L|MONITOR,m_clear_20_rows,next_row,+used +monitor.asm|1483||0|0|59011|T| +monitor.asm|1484||0|0|59013|T| +monitor.asm|1485||0|0|59015|T| +monitor.asm|1486||0|0|59016|F|MONITOR.m_clear_20_rows.next_col +monitor.asm|1486||0|0|59016|L|MONITOR,m_clear_20_rows,next_col,+used +monitor.asm|1487||0|0|59016|T| +monitor.asm|1488||0|0|59017|T| +monitor.asm|1489||0|0|59018|T| +monitor.asm|1490||0|0|59019|T| +monitor.asm|1491||0|0|59022|T| +monitor.asm|1492||0|0|59023|T| +monitor.asm|1493||0|0|59024|T| +monitor.asm|1495||0|0|59027|T| +monitor.asm|1496||0|0|59029|T| +monitor.asm|1497||0|0|59031|T| +monitor.asm|1503||0|0|59034|F|MONITOR.m_draw_cursor +monitor.asm|1503||0|0|59034|L|MONITOR,m_draw_cursor,,+used +monitor.asm|1504||0|0|59034|T| +monitor.asm|1505||0|0|59037|T| +monitor.asm|1506||0|0|59039|T| +monitor.asm|1507||0|0|59040|T| +monitor.asm|1508||0|0|59043|T| +monitor.asm|1509||0|0|59045|T| +monitor.asm|1511||0|0|59048|T| +monitor.asm|1512||0|0|59049|T| +monitor.asm|1513||0|0|59052|T| +monitor.asm|1514||0|0|59053|T| +monitor.asm|1515||0|0|59055|T| +monitor.asm|1516||0|0|59056|T| +monitor.asm|1518||0|0|59057|T| +monitor.asm|1519||0|0|59058|T| +monitor.asm|1520||0|0|59059|T| +monitor.asm|1522||0|0|59062|T| +monitor.asm|1523||0|0|59064|T| +monitor.asm|1525||0|0|59066|T| +monitor.asm|1526||0|0|59067|T| +monitor.asm|1527||0|0|59068|T| +monitor.asm|1528||0|0|59069|T| +monitor.asm|1530||0|0|59071|T| +monitor.asm|1531||0|0|59072|T| +monitor.asm|1532||0|0|59073|T| +monitor.asm|1533||0|0|59076|T| +monitor.asm|1534||0|0|59077|T| +monitor.asm|1535||0|0|59080|T| +monitor.asm|1536||0|0|59081|T| +monitor.asm|1537||0|0|59084|T| +monitor.asm|1538||0|0|59087|F|MONITOR.m_draw_cursor.dc_rt2 +monitor.asm|1538||0|0|59087|L|MONITOR,m_draw_cursor,dc_rt2,+used +monitor.asm|1539||0|0|59087|T| +monitor.asm|1540||0|0|59088|T| +monitor.asm|1541||0|0|59089|T| +monitor.asm|1542||0|0|59092|T| +monitor.asm|1543||0|0|59095|F|MONITOR.m_draw_cursor.dc_mid +monitor.asm|1543||0|0|59095|L|MONITOR,m_draw_cursor,dc_mid,+used +monitor.asm|1544||0|0|59095|T| +monitor.asm|1545||0|0|59098|T| +monitor.asm|1546||0|0|59101|F|MONITOR.m_draw_cursor.dc_lt +monitor.asm|1546||0|0|59101|L|MONITOR,m_draw_cursor,dc_lt,+used +monitor.asm|1547||0|0|59101|T| +monitor.asm|1548||0|0|59104|T| +monitor.asm|1549||0|0|59107|F|MONITOR.m_draw_cursor.dc_rt1 +monitor.asm|1549||0|0|59107|L|MONITOR,m_draw_cursor,dc_rt1,+used +monitor.asm|1550||0|0|59107|T| +monitor.asm|1552||0|0|59110|F|MONITOR.m_draw_cursor.dc_put +monitor.asm|1552||0|0|59110|L|MONITOR,m_draw_cursor,dc_put,+used +monitor.asm|1555||0|0|59110|T| +monitor.asm|1556||0|0|59111|T| +monitor.asm|1557||0|0|59112|T| +monitor.asm|1558||0|0|59113|T| +monitor.asm|1559||0|0|59114|T| +monitor.asm|1560||0|0|59115|T| +monitor.asm|1561||0|0|59116|T| +monitor.asm|1563||0|0|59117|T| +monitor.asm|1564||0|0|59118|T| +monitor.asm|1565||0|0|59119|T| +monitor.asm|1566||0|0|59120|T| +monitor.asm|1567||0|0|59121|T| +monitor.asm|1568||0|0|59122|T| +monitor.asm|1569||0|0|59123|T| +monitor.asm|1570||0|0|59124|T| +monitor.asm|1572||0|0|59125|T| +monitor.asm|1573||0|0|59126|T| +monitor.asm|1574||0|0|59127|T| +monitor.asm|1575||0|0|59128|T| +monitor.asm|1576||0|0|59129|T| +monitor.asm|1577||0|0|59130|T| +monitor.asm|1579||0|0|59133|T| +monitor.asm|1580||0|0|59135|T| +monitor.asm|1581||0|0|59137|T| +monitor.asm|1582||0|0|59138|T| +monitor.asm|1585||0|0|59139|F|MONITOR.m_draw_cursor.dc_mode_64 +monitor.asm|1585||0|0|59139|L|MONITOR,m_draw_cursor,dc_mode_64,+used +monitor.asm|1586||0|0|59139|T| +monitor.asm|1587||0|0|59141|T| +monitor.asm|1588||0|0|59144|T| +monitor.asm|1589||0|0|59145|T| +monitor.asm|1591||0|0|59148|T| +monitor.asm|1592||0|0|59151|T| +monitor.asm|1593||0|0|59152|T| +monitor.asm|1595||0|0|59153|T| +monitor.asm|1596||0|0|59154|T| +monitor.asm|1597||0|0|59156|T| +monitor.asm|1598||0|0|59157|T| +monitor.asm|1599||0|0|59158|T| +monitor.asm|1601||0|0|59159|T| +monitor.asm|1602||0|0|59161|T| +monitor.asm|1604||0|0|59162|T| +monitor.asm|1605||0|0|59164|T| +monitor.asm|1607||0|0|59166|T| +monitor.asm|1608||0|0|59169|F|MONITOR.m_draw_cursor.cur_64_next +monitor.asm|1608||0|0|59169|L|MONITOR,m_draw_cursor,cur_64_next,+used +monitor.asm|1610||0|0|59169|T| +monitor.asm|1611||0|0|59170|T| +monitor.asm|1612||0|0|59171|T| +monitor.asm|1614||0|0|59172|T| +monitor.asm|1615||0|0|59173|T| +monitor.asm|1616||0|0|59174|T| +monitor.asm|1617||0|0|59177|T| +monitor.asm|1619||0|0|59178|T| +monitor.asm|1620||0|0|59180|T| +monitor.asm|1621||0|0|59182|T| +monitor.asm|1624||0|0|59183|F|MONITOR.m_draw_cursor.dc_mode_80 +monitor.asm|1624||0|0|59183|L|MONITOR,m_draw_cursor,dc_mode_80,+used +monitor.asm|1625||0|0|59183|T| +monitor.asm|1626||0|0|59184|T| +monitor.asm|1628||0|0|59187|T| +monitor.asm|1629||0|0|59188|T| +monitor.asm|1630||0|0|59190|T| +monitor.asm|1631||0|0|59191|T| +monitor.asm|1633||0|0|59192|T| +monitor.asm|1634||0|0|59193|T| +monitor.asm|1635||0|0|59196|T| +monitor.asm|1636||0|0|59198|T| +monitor.asm|1639||0|0|59199|T| +monitor.asm|1640||0|0|59201|T| +monitor.asm|1642||0|0|59203|T| +monitor.asm|1643||0|0|59204|T| +monitor.asm|1644||0|0|59205|T| +monitor.asm|1645||0|0|59207|T| +monitor.asm|1646||0|0|59210|T| +monitor.asm|1647||0|0|59211|T| +monitor.asm|1648||0|0|59214|T| +monitor.asm|1649||0|0|59217|T| +monitor.asm|1650||0|0|59218|T| +monitor.asm|1651||0|0|59221|T| +monitor.asm|1652||0|0|59224|T| +monitor.asm|1653||0|0|59226|T| +monitor.asm|1654||0|0|59227|T| +monitor.asm|1656||0|0|59230|F|MONITOR.m_draw_cursor.dc_1_byte +monitor.asm|1656||0|0|59230|L|MONITOR,m_draw_cursor,dc_1_byte,+used +monitor.asm|1658||0|0|59230|T| +monitor.asm|1659||0|0|59231|T| +monitor.asm|1660||0|0|59232|T| +monitor.asm|1661||0|0|59233|T| +monitor.asm|1662||0|0|59234|T| +monitor.asm|1663||0|0|59235|T| +monitor.asm|1664||0|0|59238|T| +monitor.asm|1666||0|0|59241|F|MONITOR.m_draw_cursor.dc_2_byte +monitor.asm|1666||0|0|59241|L|MONITOR,m_draw_cursor,dc_2_byte,+used +monitor.asm|1668||0|0|59241|T| +monitor.asm|1669||0|0|59242|T| +monitor.asm|1670||0|0|59243|T| +monitor.asm|1671||0|0|59244|T| +monitor.asm|1673||0|0|59245|T| +monitor.asm|1674||0|0|59246|T| +monitor.asm|1675||0|0|59247|T| +monitor.asm|1676||0|0|59248|T| +monitor.asm|1678||0|0|59249|T| +monitor.asm|1679||0|0|59250|T| +monitor.asm|1680||0|0|59251|T| +monitor.asm|1682||0|0|59254|F|MONITOR.m_draw_cursor.dc_80_end +monitor.asm|1682||0|0|59254|L|MONITOR,m_draw_cursor,dc_80_end,+used +monitor.asm|1684||0|0|59254|T| +monitor.asm|1685||0|0|59256|T| +monitor.asm|1686||0|0|59258|T| +monitor.asm|1687||0|0|59259|T| +monitor.asm|1693||0|0|59260|F|MONITOR.m_handle_esc_code +monitor.asm|1693||0|0|59260|L|MONITOR,m_handle_esc_code,,+used +monitor.asm|1694||0|0|59260|T| +monitor.asm|1695||0|0|59262|T| +monitor.asm|1697||0|0|59265|T| +monitor.asm|1698||0|0|59268|T| +monitor.asm|1699||0|0|59270|T| +monitor.asm|1700||0|0|59271|T| +monitor.asm|1701||0|0|59273|T| +monitor.asm|1707||0|0|59274|F|MONITOR.m_handle_control_code +monitor.asm|1707||0|0|59274|L|MONITOR,m_handle_control_code,,+used +monitor.asm|1708||0|0|59274|T| +monitor.asm|1709||0|0|59276|T| +monitor.asm|1710||0|0|59279|T| +monitor.asm|1711||0|0|59282|T| +monitor.asm|1712||0|0|59283|T| +monitor.asm|1713||0|0|59286|T| +monitor.asm|1714||0|0|59287|T| +monitor.asm|1715||0|0|59290|T| +monitor.asm|1716||0|0|59293|T| +monitor.asm|1717||0|0|59295|T| +monitor.asm|1720||0|0|59298|T| +monitor.asm|1721||0|0|59299|T| +monitor.asm|1722||0|0|59301|T| +monitor.asm|1723||0|0|59304|T| +monitor.asm|1724||0|0|59306|T| +monitor.asm|1725||0|0|59309|T| +monitor.asm|1726||0|0|59311|T| +monitor.asm|1727||0|0|59314|T| +monitor.asm|1728||0|0|59316|T| +monitor.asm|1729||0|0|59319|T| +monitor.asm|1730||0|0|59321|T| +monitor.asm|1731||0|0|59324|T| +monitor.asm|1732||0|0|59326|T| +monitor.asm|1733||0|0|59327|T| +monitor.asm|1734||0|0|59328|T| +monitor.asm|1735||0|0|59330|T| +monitor.asm|1736||0|0|59331|T| +monitor.asm|1741||0|0|59332|F|MONITOR.handle_cc_common +monitor.asm|1741||0|0|59332|L|MONITOR,handle_cc_common,,+used +monitor.asm|1742||0|0|59332|T| +monitor.asm|1743||0|0|59333|T| +monitor.asm|1744||0|0|59335|T| +monitor.asm|1745||0|0|59338|T| +monitor.asm|1746||0|0|59340|T| +monitor.asm|1747||0|0|59343|T| +monitor.asm|1748||0|0|59344|T| +monitor.asm|1749||0|0|59347|T| +monitor.asm|1750||0|0|59349|T| +monitor.asm|1752||0|0|59352|T| +monitor.asm|1753||0|0|59353|T| +monitor.asm|1754||0|0|59355|T| +monitor.asm|1755||0|0|59358|T| +monitor.asm|1756||0|0|59360|T| +monitor.asm|1757||0|0|59363|T| +monitor.asm|1758||0|0|59365|T| +monitor.asm|1759||0|0|59368|T| +monitor.asm|1760||0|0|59370|T| +monitor.asm|1761||0|0|59373|T| +monitor.asm|1762||0|0|59375|T| +monitor.asm|1763||0|0|59378|T| +monitor.asm|1764||0|0|59380|T| +monitor.asm|1765||0|0|59383|T| +monitor.asm|1766||0|0|59385|T| +monitor.asm|1767||0|0|59386|T| +monitor.asm|1768||0|0|59387|T| +monitor.asm|1769||0|0|59389|T| +monitor.asm|1770||0|0|59390|T| +monitor.asm|1775||0|0|59391|F|MONITOR.handle_cc_common.handle_cc_mono +monitor.asm|1775||0|0|59391|L|MONITOR,handle_cc_common,handle_cc_mono,+used +monitor.asm|1776||0|0|59391|T| +monitor.asm|1777||0|0|59394|T| +monitor.asm|1778||0|0|59396|T| +monitor.asm|1779||0|0|59399|T| +monitor.asm|1780||0|0|59401|T| +monitor.asm|1782||0|0|59404|T| +monitor.asm|1783||0|0|59405|T| +monitor.asm|1784||0|0|59407|T| +monitor.asm|1785||0|0|59410|T| +monitor.asm|1786||0|0|59412|T| +monitor.asm|1787||0|0|59415|T| +monitor.asm|1788||0|0|59417|T| +monitor.asm|1789||0|0|59420|T| +monitor.asm|1790||0|0|59422|T| +monitor.asm|1791||0|0|59425|T| +monitor.asm|1792||0|0|59427|T| +monitor.asm|1793||0|0|59430|T| +monitor.asm|1794||0|0|59432|T| +monitor.asm|1795||0|0|59435|T| +monitor.asm|1796||0|0|59437|T| +monitor.asm|1797||0|0|59438|T| +monitor.asm|1798||0|0|59439|T| +monitor.asm|1799||0|0|59441|T| +monitor.asm|1800||0|0|59442|T| +monitor.asm|1805||0|0|59443|F|MONITOR.handle_cc_80x25 +monitor.asm|1805||0|0|59443|L|MONITOR,handle_cc_80x25,,+used +monitor.asm|1806||0|0|59443|T| +monitor.asm|1807||0|0|59444|T| +monitor.asm|1808||0|0|59446|T| +monitor.asm|1809||0|0|59449|T| +monitor.asm|1810||0|0|59451|T| +monitor.asm|1811||0|0|59454|T| +monitor.asm|1812||0|0|59456|T| +monitor.asm|1813||0|0|59459|T| +monitor.asm|1814||0|0|59461|T| +monitor.asm|1815||0|0|59464|T| +monitor.asm|1816||0|0|59466|T| +monitor.asm|1817||0|0|59469|T| +monitor.asm|1818||0|0|59471|T| +monitor.asm|1819||0|0|59474|T| +monitor.asm|1820||0|0|59476|T| +monitor.asm|1821||0|0|59477|T| +monitor.asm|1822||0|0|59478|T| +monitor.asm|1823||0|0|59480|T| +monitor.asm|1824||0|0|59481|T| +monitor.asm|1829||0|0|59482|F|MONITOR.m_beep +monitor.asm|1829||0|0|59482|L|MONITOR,m_beep,,+used +monitor.asm|1830||0|0|59482|T| +monitor.asm|1831||0|0|59485|T| +monitor.asm|1832||0|0|59486|T| +monitor.asm|1833||0|0|59489|T| +monitor.asm|1834||0|0|59491|T| +monitor.asm|1835||0|0|59493|T| +monitor.asm|1836||0|0|59494|T| +monitor.asm|1837||0|0|59496|T| +monitor.asm|1838||0|0|59497|T| +monitor.asm|1839||0|0|59499|T| +monitor.asm|1840||0|0|59502|T| +monitor.asm|1841||0|0|59503|F|MONITOR.m_bell_cont +monitor.asm|1841||0|0|59503|L|MONITOR,m_bell_cont,,+used +monitor.asm|1842||0|0|59503|T| +monitor.asm|1843||0|0|59504|T| +monitor.asm|1844||0|0|59505|T| +monitor.asm|1845||0|0|59506|T| +monitor.asm|1846||0|0|59507|T| +monitor.asm|1847||0|0|59508|T| +monitor.asm|1848||0|0|59510|T| +monitor.asm|1849||0|0|59511|T| +monitor.asm|1850||0|0|59513|F|MONITOR.m_bell_wait_tmr1 +monitor.asm|1850||0|0|59513|L|MONITOR,m_bell_wait_tmr1,,+used +monitor.asm|1851||0|0|59513|T| +monitor.asm|1852||0|0|59515|T| +monitor.asm|1853||0|0|59517|T| +monitor.asm|1854||0|0|59520|T| +monitor.asm|1855||0|0|59521|T| +monitor.asm|1856||0|0|59523|T| +monitor.asm|1857||0|0|59524|T| +monitor.asm|1858||0|0|59526|F|MONITOR.m_bell_wait_tmr2 +monitor.asm|1858||0|0|59526|L|MONITOR,m_bell_wait_tmr2,,+used +monitor.asm|1859||0|0|59526|T| +monitor.asm|1860||0|0|59528|T| +monitor.asm|1861||0|0|59530|T| +monitor.asm|1862||0|0|59533|T| +monitor.asm|1868||0|0|59536|F|MONITOR.esc_set_cursor +monitor.asm|1868||0|0|59536|L|MONITOR,esc_set_cursor,,+used +monitor.asm|1869||0|0|59536|T| +monitor.asm|1870||0|0|59539|T| +monitor.asm|1871||0|0|59542|T| +monitor.asm|1872||0|0|59545|T| +monitor.asm|1873||0|0|59546|T| +monitor.asm|1874||0|0|59547|T| +monitor.asm|1875||0|0|59549|T| +monitor.asm|1876||0|0|59550|T| +monitor.asm|1877||0|0|59553|T| +monitor.asm|1878||0|0|59555|T| +monitor.asm|1879||0|0|59558|T| +monitor.asm|1880||0|0|59560|T| +monitor.asm|1881||0|0|59563|T| +monitor.asm|1882||0|0|59564|T| +monitor.asm|1883||0|0|59567|T| +monitor.asm|1884||0|0|59569|T| +monitor.asm|1886||0|0|59572|T| +monitor.asm|1887||0|0|59573|T| +monitor.asm|1888||0|0|59575|T| +monitor.asm|1889||0|0|59578|T| +monitor.asm|1890||0|0|59580|T| +monitor.asm|1892||0|0|59583|F|MONITOR.esc_set_cursor.mode_40 +monitor.asm|1892||0|0|59583|L|MONITOR,esc_set_cursor,mode_40,+used +monitor.asm|1893||0|0|59583|T| +monitor.asm|1894||0|0|59584|T| +monitor.asm|1895||0|0|59586|T| +monitor.asm|1896||0|0|59589|T| +monitor.asm|1897||0|0|59591|T| +monitor.asm|1899||0|0|59594|F|MONITOR.esc_set_cursor.mode_80 +monitor.asm|1899||0|0|59594|L|MONITOR,esc_set_cursor,mode_80,+used +monitor.asm|1900||0|0|59594|T| +monitor.asm|1901||0|0|59595|T| +monitor.asm|1902||0|0|59597|T| +monitor.asm|1903||0|0|59600|T| +monitor.asm|1904||0|0|59602|F|MONITOR.esc_set_cursor.common +monitor.asm|1904||0|0|59602|L|MONITOR,esc_set_cursor,common,+used +monitor.asm|1905||0|0|59602|T| +monitor.asm|1906||0|0|59603|T| +monitor.asm|1907||0|0|59604|T| +monitor.asm|1908||0|0|59605|T| +monitor.asm|1909||0|0|59606|T| +monitor.asm|1910||0|0|59608|T| +monitor.asm|1911||0|0|59610|T| +monitor.asm|1912||0|0|59613|T| +monitor.asm|1913||0|0|59615|F|MONITOR.esc_le_24 +monitor.asm|1913||0|0|59615|L|MONITOR,esc_le_24,,+used +monitor.asm|1914||0|0|59615|T| +monitor.asm|1915||0|0|59616|T| +monitor.asm|1916||0|0|59617|T| +monitor.asm|1917||0|0|59618|T| +monitor.asm|1918||0|0|59619|T| +monitor.asm|1919||0|0|59620|T| +monitor.asm|1920||0|0|59621|T| +monitor.asm|1921||0|0|59624|T| +monitor.asm|1938||0|0|59625|F|MONITOR.esc_set_vmode +monitor.asm|1938||0|0|59625|L|MONITOR,esc_set_vmode,,+used +monitor.asm|1939||0|0|59625|T| +monitor.asm|1940||0|0|59628|T| +monitor.asm|1941||0|0|59631|T| +monitor.asm|1942||0|0|59632|T| +monitor.asm|1943||0|0|59635|T| +monitor.asm|1944||0|0|59637|T| +monitor.asm|1945||0|0|59639|T| +monitor.asm|1946||0|0|59640|T| +monitor.asm|1947||0|0|59642|T| +monitor.asm|1948||0|0|59645|T| +monitor.asm|1949||0|0|59647|T| +monitor.asm|1950||0|0|59650|T| +monitor.asm|1951||0|0|59651|T| +monitor.asm|1952||0|0|59653|T| +monitor.asm|1953||0|0|59656|T| +monitor.asm|1954||0|0|59658|T| +monitor.asm|1955||0|0|59660|T| +monitor.asm|1957||0|0|59663|F|MONITOR.esc_set_vmode.set_color_mode +monitor.asm|1957||0|0|59663|L|MONITOR,esc_set_vmode,set_color_mode,+used +monitor.asm|1958||0|0|59663|T| +monitor.asm|1959||0|0|59665|F|MONITOR.esc_set_vmode.skip_for_mono_mode +monitor.asm|1959||0|0|59665|L|MONITOR,esc_set_vmode,skip_for_mono_mode,+used +monitor.asm|1960||0|0|59665|T| +monitor.asm|1961||0|0|59666|T| +monitor.asm|1963||0|0|59668|T| +monitor.asm|1964||0|0|59671|T| +monitor.asm|1966||0|0|59674|F|MONITOR.esc_set_vmode.draw_cursor +monitor.asm|1966||0|0|59674|L|MONITOR,esc_set_vmode,draw_cursor,+used +monitor.asm|1967||0|0|59674|T| +monitor.asm|1968||0|0|59677|T| +monitor.asm|1970||0|0|59678|F|MONITOR.esc_set_vmode.cursor_hide +monitor.asm|1970||0|0|59678|L|MONITOR,esc_set_vmode,cursor_hide,+used +monitor.asm|1971||0|0|59678|T| +monitor.asm|1972||0|0|59679|T| +monitor.asm|1973||0|0|59681|T| +monitor.asm|1974||0|0|59682|T| +monitor.asm|1975||0|0|59685|T| +monitor.asm|1977||0|0|59688|F|MONITOR.esc_set_vmode.cursor_show +monitor.asm|1977||0|0|59688|L|MONITOR,esc_set_vmode,cursor_show,+used +monitor.asm|1978||0|0|59688|T| +monitor.asm|1979||0|0|59689|T| +monitor.asm|1980||0|0|59691|T| +monitor.asm|1981||0|0|59692|T| +monitor.asm|1987||0|0|59695|F|MONITOR.esc_set_color +monitor.asm|1987||0|0|59695|L|MONITOR,esc_set_color,,+used +monitor.asm|1988||0|0|59695|T| +monitor.asm|1989||0|0|59698|F|MONITOR.m_set_color +monitor.asm|1989||0|0|59698|L|MONITOR,m_set_color,,+used +monitor.asm|1990||0|0|59698|T| +monitor.asm|1991||0|0|59700|T| +monitor.asm|1992||0|0|59701|T| +monitor.asm|1993||0|0|59702|T| +monitor.asm|1994||0|0|59704|T| +monitor.asm|1995||0|0|59705|T| +monitor.asm|1996||0|0|59708|T| +monitor.asm|1997||0|0|59709|T| +monitor.asm|1998||0|0|59710|T| +monitor.asm|1999||0|0|59711|T| +monitor.asm|2000||0|0|59714|T| +monitor.asm|2007||0|0|59715|F|MONITOR.m_print_at_xy +monitor.asm|2007||0|0|59715|L|MONITOR,m_print_at_xy,,+used +monitor.asm|2009||0|0|59715|T| +monitor.asm|2010||0|0|59718|T| +monitor.asm|2011||0|0|59720|T| +monitor.asm|2013||0|0|59723|T| +monitor.asm|2014||0|0|59724|T| +monitor.asm|2015||0|0|59726|T| +monitor.asm|2016||0|0|59727|T| +monitor.asm|2017||0|0|59729|T| +monitor.asm|2019||0|0|59732|T| +monitor.asm|2020||0|0|59734|T| +monitor.asm|2023||0|0|59737|T| +monitor.asm|2024||0|0|59740|T| +monitor.asm|2025||0|0|59741|T| +monitor.asm|2026||0|0|59742|T| +monitor.asm|2027||0|0|59744|T| +monitor.asm|2028||0|0|59747|T| +monitor.asm|2029||0|0|59748|T| +monitor.asm|2030||0|0|59749|T| +monitor.asm|2031||0|0|59751|T| +monitor.asm|2032||0|0|59752|T| +monitor.asm|2034||0|0|59755|T| +monitor.asm|2035||0|0|59756|T| +monitor.asm|2037||0|0|59759|T| +monitor.asm|2038||0|0|59760|T| +monitor.asm|2039||0|0|59762|T| +monitor.asm|2040||0|0|59763|T| +monitor.asm|2042||0|0|59764|T| +monitor.asm|2043||0|0|59767|T| +monitor.asm|2044||0|0|59768|T| +monitor.asm|2047||0|0|59771|T| +monitor.asm|2048||0|0|59772|T| +monitor.asm|2049||0|0|59775|T| +monitor.asm|2050||0|0|59777|T| +monitor.asm|2051||0|0|59778|T| +monitor.asm|2052||0|0|59779|T| +monitor.asm|2055||0|0|59782|F|MONITOR.m_print_at_xy.mode_sp +monitor.asm|2055||0|0|59782|L|MONITOR,m_print_at_xy,mode_sp,+used +monitor.asm|2056||0|0|59782|T| +monitor.asm|2057||0|0|59783|T| +monitor.asm|2058||0|0|59785|T| +monitor.asm|2059||0|0|59787|T| +monitor.asm|2062||0|0|59790|T| +monitor.asm|2063||0|0|59791|T| +monitor.asm|2064||0|0|59792|T| +monitor.asm|2065||0|0|59793|T| +monitor.asm|2066||0|0|59794|T| +monitor.asm|2067||0|0|59795|T| +monitor.asm|2068||0|0|59796|T| +monitor.asm|2069||0|0|59799|T| +monitor.asm|2070||0|0|59800|T| +monitor.asm|2071||0|0|59802|T| +monitor.asm|2076||0|0|59803|F|MONITOR.m_print_at_xy.out_sp +monitor.asm|2076||0|0|59803|L|MONITOR,m_print_at_xy,out_sp,+used +monitor.asm|2077||0|0|59803|T| +monitor.asm|2078||0|0|59806|T| +monitor.asm|2079||0|0|59807|T| +monitor.asm|2081||0|0|59810|F|MONITOR.m_print_at_xy.next_line +monitor.asm|2081||0|0|59810|L|MONITOR,m_print_at_xy,next_line,+used +monitor.asm|2082||0|0|59810|T| +monitor.asm|2084||0|0|59811|T| +monitor.asm|2085||0|0|59813|T| +monitor.asm|2086||0|0|59815|T| +monitor.asm|2087||0|0|59816|T| +monitor.asm|2088||0|0|59818|T| +monitor.asm|2089||0|0|59819|T| +monitor.asm|2090||0|0|59820|T| +monitor.asm|2091||0|0|59823|F|MONITOR.m_print_at_xy.l04 +monitor.asm|2091||0|0|59823|L|MONITOR,m_print_at_xy,l04,+used +monitor.asm|2092||0|0|59823|T| +monitor.asm|2093||0|0|59824|T| +monitor.asm|2094||0|0|59825|T| +monitor.asm|2095||0|0|59828|F|MONITOR.m_print_at_xy.l05 +monitor.asm|2095||0|0|59828|L|MONITOR,m_print_at_xy,l05,+used +monitor.asm|2096||0|0|59828|T| +monitor.asm|2097||0|0|59829|T| +monitor.asm|2098||0|0|59832|T| +monitor.asm|2099||0|0|59833|T| +monitor.asm|2100||0|0|59834|T| +monitor.asm|2101||0|0|59835|T| +monitor.asm|2102||0|0|59836|T| +monitor.asm|2103||0|0|59837|T| +monitor.asm|2104||0|0|59840|T| +monitor.asm|2105||0|0|59841|T| +monitor.asm|2106||0|0|59842|T| +monitor.asm|2107||0|0|59843|T| +monitor.asm|2108||0|0|59844|T| +monitor.asm|2109||0|0|59847|T| +monitor.asm|2110||0|0|59848|T| +monitor.asm|2111||0|0|59849|T| +monitor.asm|2112||0|0|59850|T| +monitor.asm|2113||0|0|59851|T| +monitor.asm|2114||0|0|59852|T| +monitor.asm|2115||0|0|59855|T| +monitor.asm|2116||0|0|59856|T| +monitor.asm|2117||0|0|59857|T| +monitor.asm|2118||0|0|59858|T| +monitor.asm|2119||0|0|59859|T| +monitor.asm|2120||0|0|59860|T| +monitor.asm|2121||0|0|59861|T| +monitor.asm|2122||0|0|59862|T| +monitor.asm|2124||0|0|59863|T| +monitor.asm|2125||0|0|59865|T| +monitor.asm|2126||0|0|59867|T| +monitor.asm|2127||0|0|59868|T| +monitor.asm|2128||0|0|59869|T| +monitor.asm|2129||0|0|59870|T| +monitor.asm|2130||0|0|59873|T| +monitor.asm|2132||0|0|59874|F|MONITOR.m_print_at_xy.sprites_en +monitor.asm|2132||0|0|59874|L|MONITOR,m_print_at_xy,sprites_en,+used +monitor.asm|2133||0|0|59874|T| +monitor.asm|2134||0|0|59877|T| +monitor.asm|2136||0|0|59878|F|MONITOR.mode2_exit +monitor.asm|2136||0|0|59878|L|MONITOR,mode2_exit,,+used +monitor.asm|2137||0|0|59878|T| +monitor.asm|2138||0|0|59879|T| +monitor.asm|2139||0|0|59882|T| +monitor.asm|2141||0|0|59885|F|MONITOR.co_ex_l08 +monitor.asm|2141||0|0|59885|L|MONITOR,co_ex_l08,,+used +monitor.asm|2142||0|0|59885|T| +monitor.asm|2143||0|0|59886|T| +monitor.asm|2145||0|0|59889|F|MONITOR.out_no_xor +monitor.asm|2145||0|0|59889|L|MONITOR,out_no_xor,,+used +monitor.asm|2146||0|0|59889|T| +monitor.asm|2148||0|0|59890|T| +monitor.asm|2149||0|0|59892|T| +monitor.asm|2151||0|0|59894|T| +monitor.asm|2152||0|0|59895|T| +monitor.asm|2153||0|0|59897|T| +monitor.asm|2154||0|0|59898|T| +monitor.asm|2155||0|0|59899|T| +monitor.asm|2156||0|0|59902|F|MONITOR.out_no_xor.l10 +monitor.asm|2156||0|0|59902|L|MONITOR,out_no_xor,l10,+used +monitor.asm|2157||0|0|59902|T| +monitor.asm|2158||0|0|59903|T| +monitor.asm|2159||0|0|59904|T| +monitor.asm|2160||0|0|59907|F|MONITOR.out_no_xor.l11 +monitor.asm|2160||0|0|59907|L|MONITOR,out_no_xor,l11,+used +monitor.asm|2161||0|0|59907|T| +monitor.asm|2162||0|0|59908|T| +monitor.asm|2163||0|0|59909|T| +monitor.asm|2164||0|0|59912|T| +monitor.asm|2165||0|0|59913|T| +monitor.asm|2166||0|0|59914|T| +monitor.asm|2167||0|0|59915|T| +monitor.asm|2168||0|0|59916|T| +monitor.asm|2169||0|0|59917|T| +monitor.asm|2170||0|0|59918|T| +monitor.asm|2171||0|0|59919|T| +monitor.asm|2172||0|0|59920|T| +monitor.asm|2173||0|0|59921|T| +monitor.asm|2174||0|0|59922|T| +monitor.asm|2175||0|0|59923|T| +monitor.asm|2176||0|0|59924|T| +monitor.asm|2177||0|0|59925|T| +monitor.asm|2178||0|0|59926|T| +monitor.asm|2179||0|0|59927|T| +monitor.asm|2180||0|0|59930|T| +monitor.asm|2181||0|0|59931|T| +monitor.asm|2182||0|0|59932|T| +monitor.asm|2183||0|0|59933|T| +monitor.asm|2184||0|0|59934|T| +monitor.asm|2185||0|0|59935|T| +monitor.asm|2186||0|0|59936|T| +monitor.asm|2187||0|0|59937|T| +monitor.asm|2188||0|0|59938|T| +monitor.asm|2189||0|0|59939|T| +monitor.asm|2190||0|0|59940|T| +monitor.asm|2191||0|0|59941|T| +monitor.asm|2192||0|0|59942|T| +monitor.asm|2193||0|0|59943|T| +monitor.asm|2194||0|0|59944|T| +monitor.asm|2195||0|0|59945|T| +monitor.asm|2196||0|0|59946|T| +monitor.asm|2197||0|0|59947|T| +monitor.asm|2198||0|0|59948|T| +monitor.asm|2199||0|0|59949|T| +monitor.asm|2202||0|0|59950|T| +monitor.asm|2203||0|0|59952|T| +monitor.asm|2205||0|0|59954|T| +monitor.asm|2206||0|0|59955|T| +monitor.asm|2207||0|0|59956|T| +monitor.asm|2208||0|0|59957|T| +monitor.asm|2209||0|0|59960|T| +monitor.asm|2211||0|0|59961|F|MONITOR.game_sprite_tab +monitor.asm|2211||0|0|59961|L|MONITOR,game_sprite_tab,,+used +monitor.asm|2254||0|0|60241|F|MONITOR.calc_px_addr +monitor.asm|2254||0|0|60241|L|MONITOR,calc_px_addr,,+used +monitor.asm|2256||0|0|60241|T| +monitor.asm|2257||0|0|60244|T| +monitor.asm|2258||0|0|60245|T| +monitor.asm|2259||0|0|60246|T| +monitor.asm|2261||0|0|60247|T| +monitor.asm|2262||0|0|60248|T| +monitor.asm|2263||0|0|60250|T| +monitor.asm|2265||0|0|60251|T| +monitor.asm|2266||0|0|60252|T| +monitor.asm|2267||0|0|60253|T| +monitor.asm|2268||0|0|60254|T| +monitor.asm|2269||0|0|60256|T| +monitor.asm|2270||0|0|60258|T| +monitor.asm|2271||0|0|60259|T| +monitor.asm|2278||0|0|60260|F|MONITOR.esc_draw_fill_rect +monitor.asm|2278||0|0|60260|L|MONITOR,esc_draw_fill_rect,,+used +monitor.asm|2279||0|0|60260|T| +monitor.asm|2280||0|0|60263|T| +monitor.asm|2281||0|0|60264|T| +monitor.asm|2282||0|0|60265|T| +monitor.asm|2283||0|0|60266|T| +monitor.asm|2284||0|0|60267|T| +monitor.asm|2285||0|0|60268|T| +monitor.asm|2286||0|0|60269|T| +monitor.asm|2287||0|0|60270|T| +monitor.asm|2288||0|0|60271|T| +monitor.asm|2289||0|0|60274|T| +monitor.asm|2290||0|0|60275|F|MONITOR.esc_draw_fill_rect.non_zero_h +monitor.asm|2290||0|0|60275|L|MONITOR,esc_draw_fill_rect,non_zero_h,+used +monitor.asm|2291||0|0|60275|T| +monitor.asm|2293||0|0|60276|T| +monitor.asm|2297||0|0|60279|T| +monitor.asm|2298||0|0|60280|F|MONITOR.esc_draw_fill_rect.shift_mask_l +monitor.asm|2298||0|0|60280|L|MONITOR,esc_draw_fill_rect,shift_mask_l,+used +monitor.asm|2299||0|0|60280|T| +monitor.asm|2300||0|0|60281|T| +monitor.asm|2301||0|0|60282|T| +monitor.asm|2302||0|0|60283|T| +monitor.asm|2303||0|0|60286|T| +monitor.asm|2304||0|0|60287|T| +monitor.asm|2305||0|0|60290|T| +monitor.asm|2306||0|0|60291|T| +monitor.asm|2307||0|0|60294|T| +monitor.asm|2308||0|0|60297|T| +monitor.asm|2309||0|0|60299|T| +monitor.asm|2310||0|0|60300|T| +monitor.asm|2311||0|0|60301|F|MONITOR.esc_draw_fill_rect.shift_mask_r +monitor.asm|2311||0|0|60301|L|MONITOR,esc_draw_fill_rect,shift_mask_r,+used +monitor.asm|2312||0|0|60301|T| +monitor.asm|2313||0|0|60302|T| +monitor.asm|2314||0|0|60303|T| +monitor.asm|2315||0|0|60304|T| +monitor.asm|2316||0|0|60307|T| +monitor.asm|2317||0|0|60310|T| +monitor.asm|2319||0|0|60311|T| +monitor.asm|2320||0|0|60314|T| +monitor.asm|2321||0|0|60315|T| +monitor.asm|2322||0|0|60316|T| +monitor.asm|2323||0|0|60318|T| +monitor.asm|2324||0|0|60320|T| +monitor.asm|2325||0|0|60321|T| +monitor.asm|2326||0|0|60322|T| +monitor.asm|2327||0|0|60323|T| +monitor.asm|2328||0|0|60324|T| +monitor.asm|2329||0|0|60327|T| +monitor.asm|2330||0|0|60328|T| +monitor.asm|2331||0|0|60331|T| +monitor.asm|2332||0|0|60334|T| +monitor.asm|2333||0|0|60335|T| +monitor.asm|2334||0|0|60338|T| +monitor.asm|2335||0|0|60339|T| +monitor.asm|2336||0|0|60342|T| +monitor.asm|2338||0|0|60343|F|MONITOR.esc_draw_fill_rect.next_line +monitor.asm|2338||0|0|60343|L|MONITOR,esc_draw_fill_rect,next_line,+used +monitor.asm|2339||0|0|60343|T| +monitor.asm|2340||0|0|60344|T| +monitor.asm|2341||0|0|60345|T| +monitor.asm|2342||0|0|60346|T| +monitor.asm|2343||0|0|60349|T| +monitor.asm|2344||0|0|60350|T| +monitor.asm|2345||0|0|60351|T| +monitor.asm|2346||0|0|60352|T| +monitor.asm|2347||0|0|60353|T| +monitor.asm|2348||0|0|60354|T| +monitor.asm|2349||0|0|60357|T| +monitor.asm|2352||0|0|60358|F|MONITOR.esc_draw_fill_rect.rectangle_xor +monitor.asm|2352||0|0|60358|L|MONITOR,esc_draw_fill_rect,rectangle_xor,+used +monitor.asm|2353||0|0|60358|T| +monitor.asm|2354||0|0|60361|T| +monitor.asm|2355||0|0|60364|T| +monitor.asm|2356||0|0|60365|T| +monitor.asm|2357||0|0|60368|T| +monitor.asm|2359||0|0|60369|T| +monitor.asm|2360||0|0|60371|T| +monitor.asm|2362||0|0|60373|F|MONITOR.esc_draw_fill_rect.edf_l6 +monitor.asm|2362||0|0|60373|L|MONITOR,esc_draw_fill_rect,edf_l6,+used +monitor.asm|2363||0|0|60373|T| +monitor.asm|2364||0|0|60374|T| +monitor.asm|2365||0|0|60375|T| +monitor.asm|2366||0|0|60376|T| +monitor.asm|2367||0|0|60377|T| +monitor.asm|2368||0|0|60378|T| +monitor.asm|2369||0|0|60381|T| +monitor.asm|2370||0|0|60382|T| +monitor.asm|2371||0|0|60383|F|MONITOR.esc_draw_fill_rect.next_8px +monitor.asm|2371||0|0|60383|L|MONITOR,esc_draw_fill_rect,next_8px,+used +monitor.asm|2372||0|0|60383|T| +monitor.asm|2373||0|0|60384|F|MONITOR.esc_draw_fill_rect.w_ne_0 +monitor.asm|2373||0|0|60384|L|MONITOR,esc_draw_fill_rect,w_ne_0,+used +monitor.asm|2374||0|0|60384|T| +monitor.asm|2375||0|0|60385|T| +monitor.asm|2376||0|0|60386|T| +monitor.asm|2377||0|0|60389|T| +monitor.asm|2379||0|0|60390|T| +monitor.asm|2380||0|0|60391|T| +monitor.asm|2381||0|0|60392|T| +monitor.asm|2382||0|0|60393|T| +monitor.asm|2384||0|0|60394|T| +monitor.asm|2385||0|0|60395|T| +monitor.asm|2386||0|0|60396|T| +monitor.asm|2387||0|0|60397|T| +monitor.asm|2388||0|0|60398|T| +monitor.asm|2390||0|0|60399|T| +monitor.asm|2391||0|0|60400|T| +monitor.asm|2392||0|0|60401|T| +monitor.asm|2393||0|0|60402|T| +monitor.asm|2394||0|0|60405|T| +monitor.asm|2396||0|0|60406|F|MONITOR.esc_draw_fill_rect.r_mask +monitor.asm|2396||0|0|60406|L|MONITOR,esc_draw_fill_rect,r_mask,+used +monitor.asm|2397||0|0|60406|T| +monitor.asm|2398||0|0|60409|T| +monitor.asm|2400||0|0|60412|F|MONITOR.esc_draw_fill_rect.next_full +monitor.asm|2400||0|0|60412|L|MONITOR,esc_draw_fill_rect,next_full,+used +monitor.asm|2401||0|0|60412|T| +monitor.asm|2402||0|0|60413|T| +monitor.asm|2403||0|0|60414|T| +monitor.asm|2404||0|0|60415|T| +monitor.asm|2405||0|0|60416|T| +monitor.asm|2406||0|0|60417|T| +monitor.asm|2407||0|0|60418|T| +monitor.asm|2408||0|0|60419|T| +monitor.asm|2409||0|0|60420|T| +monitor.asm|2410||0|0|60421|T| +monitor.asm|2411||0|0|60424|T| +monitor.asm|2412||0|0|60427|F|MONITOR.esc_draw_fill_rect.complete +monitor.asm|2412||0|0|60427|L|MONITOR,esc_draw_fill_rect,complete,+used +monitor.asm|2413||0|0|60427|T| +monitor.asm|2414||0|0|60428|T| +monitor.asm|2415||0|0|60429|T| +monitor.asm|2416||0|0|60430|T| +monitor.asm|2417||0|0|60431|T| +monitor.asm|2418||0|0|60432|T| +monitor.asm|2420||0|0|60435|T| +monitor.asm|2421||0|0|60437|T| +monitor.asm|2422||0|0|60439|T| +monitor.asm|2428||0|0|60440|F|MONITOR.esc_paint +monitor.asm|2428||0|0|60440|L|MONITOR,esc_paint,,+used +monitor.asm|2430||0|0|60440|T| +monitor.asm|2431||0|0|60443|T| +monitor.asm|2432||0|0|60444|T| +monitor.asm|2435||0|0|60447|T| +monitor.asm|2436||0|0|60450|T| +monitor.asm|2439||0|0|60451|T| +monitor.asm|2440||0|0|60454|T| +monitor.asm|2443||0|0|60457|T| +monitor.asm|2444||0|0|60460|T| +monitor.asm|2445||0|0|60461|T| +monitor.asm|2448||0|0|60464|T| +monitor.asm|2449||0|0|60467|T| +monitor.asm|2450||0|0|60468|T| +monitor.asm|2453||0|0|60471|T| +monitor.asm|2454||0|0|60474|T| +monitor.asm|2455||0|0|60475|T| +monitor.asm|2456||0|0|60478|T| +monitor.asm|2457||0|0|60479|T| +monitor.asm|2459||0|0|60482|T| +monitor.asm|2460||0|0|60485|T| +monitor.asm|2461||0|0|60486|T| +monitor.asm|2463||0|0|60489|T| +monitor.asm|2464||0|0|60491|T| +monitor.asm|2466||0|0|60494|T| +monitor.asm|2467||0|0|60495|T| +monitor.asm|2468||0|0|60498|T| +monitor.asm|2470||0|0|60501|T| +monitor.asm|2471||0|0|60503|F|MONITOR.esc_paint.l1 +monitor.asm|2471||0|0|60503|L|MONITOR,esc_paint,l1,+used +monitor.asm|2472||0|0|60503|T| +monitor.asm|2473||0|0|60504|T| +monitor.asm|2474||0|0|60505|T| +monitor.asm|2476||0|0|60508|T| +monitor.asm|2477||0|0|60509|T| +monitor.asm|2480||0|0|60512|T| +monitor.asm|2481||0|0|60515|T| +monitor.asm|2482||0|0|60516|T| +monitor.asm|2483||0|0|60517|T| +monitor.asm|2485||0|0|60520|T| +monitor.asm|2486||0|0|60523|T| +monitor.asm|2487||0|0|60526|T| +monitor.asm|2488||0|0|60527|T| +monitor.asm|2490||0|0|60530|T| +monitor.asm|2491||0|0|60533|T| +monitor.asm|2492||0|0|60534|T| +monitor.asm|2494||0|0|60535|T| +monitor.asm|2495||0|0|60538|T| +monitor.asm|2496||0|0|60539|T| +monitor.asm|2498||0|0|60542|T| +monitor.asm|2499||0|0|60545|T| +monitor.asm|2500||0|0|60546|T| +monitor.asm|2501||0|0|60547|T| +monitor.asm|2502||0|0|60548|T| +monitor.asm|2503||0|0|60549|T| +monitor.asm|2504||0|0|60552|T| +monitor.asm|2505||0|0|60553|T| +monitor.asm|2506||0|0|60554|T| +monitor.asm|2508||0|0|60555|F|MONITOR.ep_fm_0 +monitor.asm|2508||0|0|60555|L|MONITOR,ep_fm_0,,+used +monitor.asm|2510||0|0|60555|T| +monitor.asm|2511||0|0|60558|T| +monitor.asm|2512||0|0|60559|T| +monitor.asm|2513||0|0|60560|T| +monitor.asm|2514||0|0|60561|T| +monitor.asm|2515||0|0|60564|T| +monitor.asm|2516||0|0|60565|T| +monitor.asm|2517||0|0|60566|T| +monitor.asm|2518||0|0|60567|T| +monitor.asm|2520||0|0|60570|F|MONITOR.ep_task_end +monitor.asm|2520||0|0|60570|L|MONITOR,ep_task_end,,+used +monitor.asm|2521||0|0|60570|T| +monitor.asm|2522||0|0|60573|T| +monitor.asm|2524||0|0|60574|T| +monitor.asm|2525||0|0|60577|T| +monitor.asm|2526||0|0|60578|T| +monitor.asm|2528||0|0|60581|T| +monitor.asm|2529||0|0|60583|T| +monitor.asm|2530||0|0|60586|T| +monitor.asm|2531||0|0|60589|T| +monitor.asm|2532||0|0|60591|T| +monitor.asm|2533||0|0|60594|T| +monitor.asm|2535||0|0|60597|F|MONITOR.ep_l4 +monitor.asm|2535||0|0|60597|L|MONITOR,ep_l4,,+used +monitor.asm|2536||0|0|60597|T| +monitor.asm|2537||0|0|60599|T| +monitor.asm|2538||0|0|60602|T| +monitor.asm|2540||0|0|60605|F|MONITOR.ep_l5 +monitor.asm|2540||0|0|60605|L|MONITOR,ep_l5,,+used +monitor.asm|2541||0|0|60605|T| +monitor.asm|2542||0|0|60607|T| +monitor.asm|2543||0|0|60610|T| +monitor.asm|2545||0|0|60613|F|MONITOR.ep_l6 +monitor.asm|2545||0|0|60613|L|MONITOR,ep_l6,,+used +monitor.asm|2546||0|0|60613|T| +monitor.asm|2547||0|0|60616|T| +monitor.asm|2548||0|0|60617|T| +monitor.asm|2549||0|0|60620|T| +monitor.asm|2550||0|0|60623|T| +monitor.asm|2551||0|0|60625|T| +monitor.asm|2552||0|0|60628|T| +monitor.asm|2554||0|0|60631|F|MONITOR.ep_f_fast +monitor.asm|2554||0|0|60631|L|MONITOR,ep_f_fast,,+used +monitor.asm|2555||0|0|60631|T| +monitor.asm|2556||0|0|60634|T| +monitor.asm|2557||0|0|60637|T| +monitor.asm|2558||0|0|60639|T| +monitor.asm|2559||0|0|60642|T| +monitor.asm|2561||0|0|60645|F|MONITOR.ep_l8 +monitor.asm|2561||0|0|60645|L|MONITOR,ep_l8,,+used +monitor.asm|2562||0|0|60645|T| +monitor.asm|2563||0|0|60648|T| +monitor.asm|2564||0|0|60649|T| +monitor.asm|2565||0|0|60652|T| +monitor.asm|2566||0|0|60653|T| +monitor.asm|2567||0|0|60656|T| +monitor.asm|2568||0|0|60659|T| +monitor.asm|2569||0|0|60660|T| +monitor.asm|2570||0|0|60663|T| +monitor.asm|2571||0|0|60664|T| +monitor.asm|2572||0|0|60667|T| +monitor.asm|2573||0|0|60670|T| +monitor.asm|2574||0|0|60671|T| +monitor.asm|2575||0|0|60674|T| +monitor.asm|2576||0|0|60677|T| +monitor.asm|2577||0|0|60680|T| +monitor.asm|2578||0|0|60683|T| +monitor.asm|2579||0|0|60684|T| +monitor.asm|2580||0|0|60685|T| +monitor.asm|2581||0|0|60688|T| +monitor.asm|2582||0|0|60691|T| +monitor.asm|2583||0|0|60694|T| +monitor.asm|2584||0|0|60695|T| +monitor.asm|2585||0|0|60698|T| +monitor.asm|2587||0|0|60701|F|MONITOR.ep_l9 +monitor.asm|2587||0|0|60701|L|MONITOR,ep_l9,,+used +monitor.asm|2588||0|0|60701|T| +monitor.asm|2589||0|0|60704|T| +monitor.asm|2590||0|0|60705|T| +monitor.asm|2591||0|0|60706|T| +monitor.asm|2592||0|0|60707|T| +monitor.asm|2593||0|0|60710|T| +monitor.asm|2594||0|0|60711|T| +monitor.asm|2595||0|0|60712|T| +monitor.asm|2596||0|0|60713|T| +monitor.asm|2598||0|0|60716|F|MONITOR.ep_l10 +monitor.asm|2598||0|0|60716|L|MONITOR,ep_l10,,+used +monitor.asm|2599||0|0|60716|T| +monitor.asm|2600||0|0|60719|T| +monitor.asm|2601||0|0|60720|T| +monitor.asm|2602||0|0|60723|T| +monitor.asm|2603||0|0|60726|T| +monitor.asm|2604||0|0|60727|T| +monitor.asm|2605||0|0|60730|T| +monitor.asm|2607||0|0|60733|F|MONITOR.ep_l11 +monitor.asm|2607||0|0|60733|L|MONITOR,ep_l11,,+used +monitor.asm|2608||0|0|60733|T| +monitor.asm|2609||0|0|60736|T| +monitor.asm|2610||0|0|60737|T| +monitor.asm|2611||0|0|60740|T| +monitor.asm|2612||0|0|60741|T| +monitor.asm|2613||0|0|60744|T| +monitor.asm|2614||0|0|60747|T| +monitor.asm|2615||0|0|60748|T| +monitor.asm|2616||0|0|60751|T| +monitor.asm|2617||0|0|60752|T| +monitor.asm|2618||0|0|60754|T| +monitor.asm|2619||0|0|60757|T| +monitor.asm|2620||0|0|60760|T| +monitor.asm|2621||0|0|60761|T| +monitor.asm|2622||0|0|60764|T| +monitor.asm|2623||0|0|60767|T| +monitor.asm|2624||0|0|60770|T| +monitor.asm|2625||0|0|60773|T| +monitor.asm|2626||0|0|60774|T| +monitor.asm|2627||0|0|60775|T| +monitor.asm|2628||0|0|60778|T| +monitor.asm|2629||0|0|60781|T| +monitor.asm|2630||0|0|60784|T| +monitor.asm|2631||0|0|60785|T| +monitor.asm|2632||0|0|60788|T| +monitor.asm|2637||0|0|60791|F|MONITOR.paint_find_next_right +monitor.asm|2637||0|0|60791|L|MONITOR,paint_find_next_right,,+used +monitor.asm|2638||0|0|60791|T| +monitor.asm|2639||0|0|60794|T| +monitor.asm|2640||0|0|60797|T| +monitor.asm|2641||0|0|60800|T| +monitor.asm|2642||0|0|60802|T| +monitor.asm|2643||0|0|60803|T| +monitor.asm|2645||0|0|60804|F|MONITOR.paint_find_next_right.l1 +monitor.asm|2645||0|0|60804|L|MONITOR,paint_find_next_right,l1,+used +monitor.asm|2646||0|0|60804|T| +monitor.asm|2647||0|0|60805|T| +monitor.asm|2648||0|0|60806|T| +monitor.asm|2649||0|0|60807|T| +monitor.asm|2650||0|0|60808|T| +monitor.asm|2651||0|0|60809|T| +monitor.asm|2652||0|0|60810|T| +monitor.asm|2653||0|0|60811|T| +monitor.asm|2654||0|0|60814|T| +monitor.asm|2655||0|0|60815|T| +monitor.asm|2656||0|0|60816|F|MONITOR.paint_find_next_right.l2 +monitor.asm|2656||0|0|60816|L|MONITOR,paint_find_next_right,l2,+used +monitor.asm|2657||0|0|60816|T| +monitor.asm|2658||0|0|60819|T| +monitor.asm|2659||0|0|60822|T| +monitor.asm|2660||0|0|60824|T| +monitor.asm|2661||0|0|60825|T| +monitor.asm|2666||0|0|60826|F|MONITOR.paint_find_next_left +monitor.asm|2666||0|0|60826|L|MONITOR,paint_find_next_left,,+used +monitor.asm|2667||0|0|60826|T| +monitor.asm|2668||0|0|60829|T| +monitor.asm|2669||0|0|60832|T| +monitor.asm|2670||0|0|60835|T| +monitor.asm|2671||0|0|60837|T| +monitor.asm|2672||0|0|60838|T| +monitor.asm|2673||0|0|60839|F|MONITOR.paint_find_next_left.l1 +monitor.asm|2673||0|0|60839|L|MONITOR,paint_find_next_left,l1,+used +monitor.asm|2674||0|0|60839|T| +monitor.asm|2675||0|0|60840|T| +monitor.asm|2676||0|0|60841|T| +monitor.asm|2677||0|0|60842|T| +monitor.asm|2678||0|0|60843|T| +monitor.asm|2679||0|0|60844|T| +monitor.asm|2680||0|0|60845|T| +monitor.asm|2681||0|0|60846|T| +monitor.asm|2682||0|0|60849|T| +monitor.asm|2683||0|0|60850|T| +monitor.asm|2684||0|0|60851|F|MONITOR.paint_find_next_left.l2 +monitor.asm|2684||0|0|60851|L|MONITOR,paint_find_next_left,l2,+used +monitor.asm|2685||0|0|60851|T| +monitor.asm|2686||0|0|60854|T| +monitor.asm|2687||0|0|60857|T| +monitor.asm|2688||0|0|60859|T| +monitor.asm|2689||0|0|60860|T| +monitor.asm|2691||0|0|60861|F|MONITOR.ep_l12 +monitor.asm|2691||0|0|60861|L|MONITOR,ep_l12,,+used +monitor.asm|2692||0|0|60861|T| +monitor.asm|2693||0|0|60862|T| +monitor.asm|2694||0|0|60865|T| +monitor.asm|2695||0|0|60868|T| +monitor.asm|2696||0|0|60869|T| +monitor.asm|2697||0|0|60870|T| +monitor.asm|2698||0|0|60873|T| +monitor.asm|2699||0|0|60874|T| +monitor.asm|2700||0|0|60877|T| +monitor.asm|2701||0|0|60878|T| +monitor.asm|2702||0|0|60881|T| +monitor.asm|2703||0|0|60882|T| +monitor.asm|2704||0|0|60883|T| +monitor.asm|2705||0|0|60886|F|MONITOR.ep_l13 +monitor.asm|2705||0|0|60886|L|MONITOR,ep_l13,,+used +monitor.asm|2706||0|0|60886|T| +monitor.asm|2707||0|0|60887|T| +monitor.asm|2708||0|0|60890|T| +monitor.asm|2709||0|0|60891|T| +monitor.asm|2710||0|0|60894|T| +monitor.asm|2711||0|0|60895|T| +monitor.asm|2712||0|0|60896|T| +monitor.asm|2713||0|0|60899|T| +monitor.asm|2714||0|0|60900|T| +monitor.asm|2715||0|0|60901|T| +monitor.asm|2716||0|0|60904|F|MONITOR.ep_l14 +monitor.asm|2716||0|0|60904|L|MONITOR,ep_l14,,+used +monitor.asm|2717||0|0|60904|T| +monitor.asm|2718||0|0|60905|T| +monitor.asm|2719||0|0|60906|T| +monitor.asm|2720||0|0|60907|T| +monitor.asm|2721||0|0|60908|T| +monitor.asm|2722||0|0|60911|T| +monitor.asm|2723||0|0|60912|T| +monitor.asm|2724||0|0|60913|F|MONITOR.ep_l15 +monitor.asm|2724||0|0|60913|L|MONITOR,ep_l15,,+used +monitor.asm|2725||0|0|60913|T| +monitor.asm|2726||0|0|60916|T| +monitor.asm|2727||0|0|60919|T| +monitor.asm|2728||0|0|60922|F|MONITOR.ep_l16 +monitor.asm|2728||0|0|60922|L|MONITOR,ep_l16,,+used +monitor.asm|2729||0|0|60922|T| +monitor.asm|2737||0|0|60925|F|MONITOR.paint_find_right +monitor.asm|2737||0|0|60925|L|MONITOR,paint_find_right,,+used +monitor.asm|2738||0|0|60925|T| +monitor.asm|2739||0|0|60926|T| +monitor.asm|2740||0|0|60928|T| +monitor.asm|2741||0|0|60929|T| +monitor.asm|2743||0|0|60930|T| +monitor.asm|2744||0|0|60931|T| +monitor.asm|2745||0|0|60932|T| +monitor.asm|2746||0|0|60933|T| +monitor.asm|2748||0|0|60936|T| +monitor.asm|2749||0|0|60937|T| +monitor.asm|2751||0|0|60938|F|MONITOR.paint_find_right.in_byte +monitor.asm|2751||0|0|60938|L|MONITOR,paint_find_right,in_byte,+used +monitor.asm|2752||0|0|60938|T| +monitor.asm|2753||0|0|60941|T| +monitor.asm|2755||0|0|60944|T| +monitor.asm|2757||0|0|60945|T| +monitor.asm|2758||0|0|60946|T| +monitor.asm|2759||0|0|60947|T| +monitor.asm|2760||0|0|60948|T| +monitor.asm|2762||0|0|60949|T| +monitor.asm|2763||0|0|60950|T| +monitor.asm|2764||0|0|60951|T| +monitor.asm|2772||0|0|60952|F|MONITOR.paint_find_left +monitor.asm|2772||0|0|60952|L|MONITOR,paint_find_left,,+used +monitor.asm|2773||0|0|60952|T| +monitor.asm|2774||0|0|60953|T| +monitor.asm|2775||0|0|60954|T| +monitor.asm|2777||0|0|60955|T| +monitor.asm|2778||0|0|60956|T| +monitor.asm|2779||0|0|60957|T| +monitor.asm|2780||0|0|60958|T| +monitor.asm|2781||0|0|60959|T| +monitor.asm|2782||0|0|60962|T| +monitor.asm|2783||0|0|60963|T| +monitor.asm|2785||0|0|60964|F|MONITOR.paint_find_left.in_byte +monitor.asm|2785||0|0|60964|L|MONITOR,paint_find_left,in_byte,+used +monitor.asm|2786||0|0|60964|T| +monitor.asm|2787||0|0|60967|T| +monitor.asm|2789||0|0|60970|T| +monitor.asm|2791||0|0|60971|T| +monitor.asm|2792||0|0|60972|T| +monitor.asm|2793||0|0|60973|T| +monitor.asm|2794||0|0|60974|T| +monitor.asm|2796||0|0|60975|T| +monitor.asm|2797||0|0|60976|T| +monitor.asm|2798||0|0|60977|T| +monitor.asm|2807||0|0|60978|F|MONITOR.get_pixel +monitor.asm|2807||0|0|60978|L|MONITOR,get_pixel,,+used +monitor.asm|2809||0|0|60978|T| +monitor.asm|2810||0|0|60980|T| +monitor.asm|2812||0|0|60982|T| +monitor.asm|2813||0|0|60983|T| +monitor.asm|2814||0|0|60984|T| +monitor.asm|2815||0|0|60987|T| +monitor.asm|2816||0|0|60988|T| +monitor.asm|2817||0|0|60989|T| +monitor.asm|2818||0|0|60990|T| +monitor.asm|2819||0|0|60991|T| +monitor.asm|2821||0|0|60994|T| +monitor.asm|2822||0|0|60996|T| +monitor.asm|2823||0|0|60998|T| +monitor.asm|2824||0|0|60999|T| +monitor.asm|2826||0|0|61000|F|MONITOR.get_pixel.bit1_set +monitor.asm|2826||0|0|61000|L|MONITOR,get_pixel,bit1_set,+used +monitor.asm|2827||0|0|61000|T| +monitor.asm|2828||0|0|61001|T| +monitor.asm|2829||0|0|61002|T| +monitor.asm|2830||0|0|61003|T| +monitor.asm|2831||0|0|61004|T| +monitor.asm|2833||0|0|61007|T| +monitor.asm|2834||0|0|61009|T| +monitor.asm|2835||0|0|61011|T| +monitor.asm|2836||0|0|61013|T| +monitor.asm|2837||0|0|61014|T| +monitor.asm|2839||0|0|61015|F|MONITOR.get_pixel.bit2_set +monitor.asm|2839||0|0|61015|L|MONITOR,get_pixel,bit2_set,+used +monitor.asm|2841||0|0|61015|T| +monitor.asm|2842||0|0|61017|T| +monitor.asm|2843||0|0|61019|T| +monitor.asm|2844||0|0|61021|T| +monitor.asm|2845||0|0|61022|T| +monitor.asm|2847||0|0|61023|F|MONITOR.get_pixel.bit12_set +monitor.asm|2847||0|0|61023|L|MONITOR,get_pixel,bit12_set,+used +monitor.asm|2848||0|0|61023|T| +monitor.asm|2849||0|0|61025|T| +monitor.asm|2850||0|0|61027|T| +monitor.asm|2851||0|0|61029|T| +monitor.asm|2852||0|0|61030|T| +monitor.asm|2854||0|0|61031|F|MONITOR.paint_task +monitor.asm|2854||0|0|61031|L|MONITOR,paint_task,,+used +monitor.asm|2855||0|0|61031|T| +monitor.asm|2856||0|0|61032|T| +monitor.asm|2857||0|0|61035|T| +monitor.asm|2859||0|0|61036|T| +monitor.asm|2860||0|0|61037|T| +monitor.asm|2861||0|0|61038|T| +monitor.asm|2862||0|0|61039|T| +monitor.asm|2865||0|0|61042|T| +monitor.asm|2866||0|0|61045|T| +monitor.asm|2867||0|0|61048|T| +monitor.asm|2868||0|0|61051|T| +monitor.asm|2869||0|0|61052|T| +monitor.asm|2870||0|0|61054|F|MONITOR.paint_task.lmp_mask +monitor.asm|2870||0|0|61054|L|MONITOR,paint_task,lmp_mask,+used +monitor.asm|2871||0|0|61054|T| +monitor.asm|2872||0|0|61055|T| +monitor.asm|2873||0|0|61056|T| +monitor.asm|2874||0|0|61059|T| +monitor.asm|2876||0|0|61062|T| +monitor.asm|2877||0|0|61065|T| +monitor.asm|2878||0|0|61066|T| +monitor.asm|2879||0|0|61069|T| +monitor.asm|2880||0|0|61070|T| +monitor.asm|2881||0|0|61073|T| +monitor.asm|2882||0|0|61076|T| +monitor.asm|2883||0|0|61077|T| +monitor.asm|2884||0|0|61079|F|MONITOR.paint_task.rmp_mask +monitor.asm|2884||0|0|61079|L|MONITOR,paint_task,rmp_mask,+used +monitor.asm|2885||0|0|61079|T| +monitor.asm|2886||0|0|61080|T| +monitor.asm|2887||0|0|61081|T| +monitor.asm|2888||0|0|61084|T| +monitor.asm|2889||0|0|61087|T| +monitor.asm|2891||0|0|61090|T| +monitor.asm|2892||0|0|61091|F|MONITOR.paint_task.lmi_mask +monitor.asm|2892||0|0|61091|L|MONITOR,paint_task,lmi_mask,+used +monitor.asm|2893||0|0|61091|T| +monitor.asm|2894||0|0|61092|T| +monitor.asm|2895||0|0|61093|T| +monitor.asm|2896||0|0|61094|T| +monitor.asm|2897||0|0|61097|T| +monitor.asm|2898||0|0|61098|T| +monitor.asm|2900||0|0|61099|T| +monitor.asm|2901||0|0|61100|F|MONITOR.paint_task.rmi_mask +monitor.asm|2901||0|0|61100|L|MONITOR,paint_task,rmi_mask,+used +monitor.asm|2902||0|0|61100|T| +monitor.asm|2903||0|0|61101|T| +monitor.asm|2904||0|0|61102|T| +monitor.asm|2905||0|0|61103|T| +monitor.asm|2906||0|0|61106|T| +monitor.asm|2907||0|0|61107|T| +monitor.asm|2909||0|0|61108|T| +monitor.asm|2910||0|0|61111|T| +monitor.asm|2911||0|0|61114|T| +monitor.asm|2912||0|0|61117|T| +monitor.asm|2913||0|0|61118|T| +monitor.asm|2914||0|0|61119|T| +monitor.asm|2915||0|0|61120|T| +monitor.asm|2916||0|0|61123|T| +monitor.asm|2918||0|0|61126|F|MONITOR.paint_exit +monitor.asm|2918||0|0|61126|L|MONITOR,paint_exit,,+used +monitor.asm|2919||0|0|61126|T| +monitor.asm|2920||0|0|61129|T| +monitor.asm|2921||0|0|61132|T| +monitor.asm|2922||0|0|61135|T| +monitor.asm|2923||0|0|61136|T| +monitor.asm|2931||0|0|61137|F|MONITOR.draw_line_h +monitor.asm|2931||0|0|61137|L|MONITOR,draw_line_h,,+used +monitor.asm|2933||0|0|61137|T| +monitor.asm|2934||0|0|61139|T| +monitor.asm|2935||0|0|61141|T| +monitor.asm|2936||0|0|61142|T| +monitor.asm|2937||0|0|61143|T| +monitor.asm|2938||0|0|61146|T| +monitor.asm|2939||0|0|61147|T| +monitor.asm|2940||0|0|61148|F|MONITOR.draw_line_h.next_byte +monitor.asm|2940||0|0|61148|L|MONITOR,draw_line_h,next_byte,+used +monitor.asm|2941||0|0|61148|T| +monitor.asm|2942||0|0|61149|F|MONITOR.draw_line_h.width_ne0 +monitor.asm|2942||0|0|61149|L|MONITOR,draw_line_h,width_ne0,+used +monitor.asm|2943||0|0|61149|T| +monitor.asm|2944||0|0|61150|T| +monitor.asm|2945||0|0|61151|T| +monitor.asm|2946||0|0|61154|T| +monitor.asm|2948||0|0|61155|T| +monitor.asm|2949||0|0|61156|T| +monitor.asm|2950||0|0|61157|T| +monitor.asm|2951||0|0|61158|T| +monitor.asm|2952||0|0|61159|T| +monitor.asm|2954||0|0|61160|T| +monitor.asm|2955||0|0|61161|T| +monitor.asm|2956||0|0|61162|T| +monitor.asm|2957||0|0|61163|T| +monitor.asm|2958||0|0|61164|T| +monitor.asm|2959||0|0|61165|T| +monitor.asm|2961||0|0|61166|T| +monitor.asm|2962||0|0|61167|T| +monitor.asm|2963||0|0|61168|T| +monitor.asm|2964||0|0|61169|T| +monitor.asm|2965||0|0|61172|T| +monitor.asm|2966||0|0|61173|F|MONITOR.draw_line_h.r_mask +monitor.asm|2966||0|0|61173|L|MONITOR,draw_line_h,r_mask,+used +monitor.asm|2968||0|0|61173|T| +monitor.asm|2969||0|0|61176|T| +monitor.asm|2970||0|0|61179|F|MONITOR.draw_line_h.full_8 +monitor.asm|2970||0|0|61179|L|MONITOR,draw_line_h,full_8,+used +monitor.asm|2971||0|0|61179|T| +monitor.asm|2972||0|0|61180|T| +monitor.asm|2973||0|0|61181|T| +monitor.asm|2974||0|0|61182|T| +monitor.asm|2975||0|0|61183|T| +monitor.asm|2976||0|0|61184|T| +monitor.asm|2977||0|0|61187|T| +monitor.asm|2978||0|0|61190|F|MONITOR.draw_line_h.complete +monitor.asm|2978||0|0|61190|L|MONITOR,draw_line_h,complete,+used +monitor.asm|2980||0|0|61190|T| +monitor.asm|2981||0|0|61192|T| +monitor.asm|2982||0|0|61194|T| +monitor.asm|2987||0|0|61195|F|MONITOR.esc_draw_line +monitor.asm|2987||0|0|61195|L|MONITOR,esc_draw_line,,+used +monitor.asm|2988||0|0|61195|T| +monitor.asm|2989||0|0|61198|T| +monitor.asm|2990||0|0|61199|T| +monitor.asm|2991||0|0|61200|T| +monitor.asm|2992||0|0|61201|T| +monitor.asm|2993||0|0|61202|T| +monitor.asm|2994||0|0|61203|T| +monitor.asm|2995||0|0|61204|T| +monitor.asm|2996||0|0|61205|T| +monitor.asm|2997||0|0|61206|T| +monitor.asm|2998||0|0|61207|T| +monitor.asm|2999||0|0|61210|T| +monitor.asm|3000||0|0|61211|F|MONITOR.esc_draw_line.x1_le_x2 +monitor.asm|3000||0|0|61211|L|MONITOR,esc_draw_line,x1_le_x2,+used +monitor.asm|3001||0|0|61211|T| +monitor.asm|3002||0|0|61214|T| +monitor.asm|3003||0|0|61215|T| +monitor.asm|3004||0|0|61216|T| +monitor.asm|3005||0|0|61217|T| +monitor.asm|3006||0|0|61218|T| +monitor.asm|3007||0|0|61219|T| +monitor.asm|3008||0|0|61220|T| +monitor.asm|3009||0|0|61221|T| +monitor.asm|3011||0|0|61224|T| +monitor.asm|3012||0|0|61225|T| +monitor.asm|3013||0|0|61226|T| +monitor.asm|3014||0|0|61227|F|MONITOR.esc_draw_line.pos_height +monitor.asm|3014||0|0|61227|L|MONITOR,esc_draw_line,pos_height,+used +monitor.asm|3015||0|0|61227|T| +monitor.asm|3016||0|0|61228|T| +monitor.asm|3017||0|0|61231|T| +monitor.asm|3018||0|0|61232|T| +monitor.asm|3019||0|0|61235|T| +monitor.asm|3020||0|0|61236|T| +monitor.asm|3021||0|0|61237|T| +monitor.asm|3022||0|0|61240|T| +monitor.asm|3023||0|0|61241|T| +monitor.asm|3024||0|0|61242|T| +monitor.asm|3025||0|0|61244|T| +monitor.asm|3026||0|0|61245|T| +monitor.asm|3028||0|0|61248|T| +monitor.asm|3029||0|0|61249|T| +monitor.asm|3030||0|0|61251|T| +monitor.asm|3031||0|0|61253|F|MONITOR.esc_draw_line.next_16 +monitor.asm|3031||0|0|61253|L|MONITOR,esc_draw_line,next_16,+used +monitor.asm|3032||0|0|61253|T| +monitor.asm|3033||0|0|61254|T| +monitor.asm|3034||0|0|61255|T| +monitor.asm|3035||0|0|61256|T| +monitor.asm|3036||0|0|61257|T| +monitor.asm|3037||0|0|61258|T| +monitor.asm|3038||0|0|61261|T| +monitor.asm|3039||0|0|61262|T| +monitor.asm|3040||0|0|61265|F|MONITOR.esc_draw_line.edl_l4 +monitor.asm|3040||0|0|61265|L|MONITOR,esc_draw_line,edl_l4,+used +monitor.asm|3041||0|0|61265|T| +monitor.asm|3042||0|0|61266|T| +monitor.asm|3043||0|0|61267|T| +monitor.asm|3044||0|0|61268|F|MONITOR.esc_draw_line.edl_l5 +monitor.asm|3044||0|0|61268|L|MONITOR,esc_draw_line,edl_l5,+used +monitor.asm|3045||0|0|61268|T| +monitor.asm|3046||0|0|61269|T| +monitor.asm|3047||0|0|61272|T| +monitor.asm|3048||0|0|61275|T| +monitor.asm|3050||0|0|61276|T| +monitor.asm|3052||0|0|61277|T| +monitor.asm|3053||0|0|61280|T| +monitor.asm|3054||0|0|61281|T| +monitor.asm|3055||0|0|61282|T| +monitor.asm|3058||0|0|61285|T| +monitor.asm|3059||0|0|61287|F|MONITOR.esc_draw_line.roll_l +monitor.asm|3059||0|0|61287|L|MONITOR,esc_draw_line,roll_l,+used +monitor.asm|3060||0|0|61287|T| +monitor.asm|3061||0|0|61288|T| +monitor.asm|3062||0|0|61289|T| +monitor.asm|3063||0|0|61292|T| +monitor.asm|3064||0|0|61293|T| +monitor.asm|3066||0|0|61294|F|MONITOR.esc_draw_line.edl_l7 +monitor.asm|3066||0|0|61294|L|MONITOR,esc_draw_line,edl_l7,+used +monitor.asm|3067||0|0|61294|T| +monitor.asm|3068||0|0|61295|T| +monitor.asm|3069||0|0|61296|T| +monitor.asm|3070||0|0|61297|T| +monitor.asm|3071||0|0|61298|T| +monitor.asm|3072||0|0|61299|T| +monitor.asm|3073||0|0|61300|T| +monitor.asm|3074||0|0|61301|T| +monitor.asm|3075||0|0|61302|T| +monitor.asm|3076||0|0|61303|T| +monitor.asm|3077||0|0|61304|T| +monitor.asm|3078||0|0|61305|T| +monitor.asm|3080||0|0|61306|T| +monitor.asm|3081||0|0|61309|T| +monitor.asm|3083||0|0|61310|T| +monitor.asm|3084||0|0|61312|T| +monitor.asm|3086||0|0|61314|T| +monitor.asm|3087||0|0|61317|T| +monitor.asm|3088||0|0|61318|T| +monitor.asm|3089||0|0|61321|F|MONITOR.esc_draw_line.next_up +monitor.asm|3089||0|0|61321|L|MONITOR,esc_draw_line,next_up,+used +monitor.asm|3091||0|0|61321|T| +monitor.asm|3092||0|0|61322|T| +monitor.asm|3093||0|0|61323|T| +monitor.asm|3094||0|0|61324|T| +monitor.asm|3095||0|0|61325|T| +monitor.asm|3097||0|0|61326|T| +monitor.asm|3098||0|0|61327|T| +monitor.asm|3099||0|0|61328|T| +monitor.asm|3100||0|0|61329|T| +monitor.asm|3101||0|0|61330|T| +monitor.asm|3102||0|0|61331|T| +monitor.asm|3103||0|0|61332|T| +monitor.asm|3104||0|0|61333|T| +monitor.asm|3105||0|0|61334|T| +monitor.asm|3106||0|0|61335|T| +monitor.asm|3107||0|0|61338|T| +monitor.asm|3109||0|0|61339|T| +monitor.asm|3110||0|0|61340|T| +monitor.asm|3111||0|0|61343|F|MONITOR.esc_draw_line.next_down +monitor.asm|3111||0|0|61343|L|MONITOR,esc_draw_line,next_down,+used +monitor.asm|3113||0|0|61343|T| +monitor.asm|3114||0|0|61344|T| +monitor.asm|3115||0|0|61345|T| +monitor.asm|3116||0|0|61346|T| +monitor.asm|3117||0|0|61347|T| +monitor.asm|3119||0|0|61348|T| +monitor.asm|3120||0|0|61349|T| +monitor.asm|3121||0|0|61350|T| +monitor.asm|3122||0|0|61351|T| +monitor.asm|3123||0|0|61352|T| +monitor.asm|3124||0|0|61353|T| +monitor.asm|3126||0|0|61354|T| +monitor.asm|3127||0|0|61355|T| +monitor.asm|3128||0|0|61356|T| +monitor.asm|3129||0|0|61357|T| +monitor.asm|3130||0|0|61360|T| +monitor.asm|3132||0|0|61361|T| +monitor.asm|3133||0|0|61362|T| +monitor.asm|3134||0|0|61365|F|MONITOR.esc_draw_line.is_last +monitor.asm|3134||0|0|61365|L|MONITOR,esc_draw_line,is_last,+used +monitor.asm|3136||0|0|61365|T| +monitor.asm|3137||0|0|61367|T| +monitor.asm|3138||0|0|61369|T| +monitor.asm|3139||0|0|61370|T| +monitor.asm|3141||0|0|61371|T| +monitor.asm|3142||0|0|61372|T| +monitor.asm|3143||0|0|61373|T| +monitor.asm|3144||0|0|61376|T| +monitor.asm|3145||0|0|61377|T| +monitor.asm|3146||0|0|61378|T| +monitor.asm|3147||0|0|61379|F|MONITOR.esc_draw_line.edl_l11 +monitor.asm|3147||0|0|61379|L|MONITOR,esc_draw_line,edl_l11,+used +monitor.asm|3148||0|0|61379|T| +monitor.asm|3149||0|0|61380|T| +monitor.asm|3150||0|0|61381|T| +monitor.asm|3151||0|0|61384|T| +monitor.asm|3152||0|0|61385|T| +monitor.asm|3153||0|0|61386|T| +monitor.asm|3160||0|0|61387|F|MONITOR.esc_draw_line.width0 +monitor.asm|3160||0|0|61387|L|MONITOR,esc_draw_line,width0,+used +monitor.asm|3161||0|0|61387|T| +monitor.asm|3162||0|0|61388|T| +monitor.asm|3165||0|0|61391|T| +monitor.asm|3166||0|0|61393|F|MONITOR.esc_draw_line.edl_l13 +monitor.asm|3166||0|0|61393|L|MONITOR,esc_draw_line,edl_l13,+used +monitor.asm|3167||0|0|61393|T| +monitor.asm|3168||0|0|61394|T| +monitor.asm|3169||0|0|61395|T| +monitor.asm|3170||0|0|61398|T| +monitor.asm|3171||0|0|61399|T| +monitor.asm|3173||0|0|61400|T| +monitor.asm|3174||0|0|61401|T| +monitor.asm|3175||0|0|61404|T| +monitor.asm|3176||0|0|61405|T| +monitor.asm|3179||0|0|61406|T| +monitor.asm|3180||0|0|61408|T| +monitor.asm|3181||0|0|61410|T| +monitor.asm|3183||0|0|61413|F|MONITOR.esc_draw_line.next_row_up +monitor.asm|3183||0|0|61413|L|MONITOR,esc_draw_line,next_row_up,+used +monitor.asm|3185||0|0|61413|T| +monitor.asm|3186||0|0|61414|T| +monitor.asm|3187||0|0|61415|T| +monitor.asm|3188||0|0|61416|T| +monitor.asm|3189||0|0|61417|T| +monitor.asm|3191||0|0|61418|T| +monitor.asm|3192||0|0|61419|T| +monitor.asm|3193||0|0|61420|T| +monitor.asm|3194||0|0|61421|T| +monitor.asm|3195||0|0|61422|T| +monitor.asm|3196||0|0|61423|T| +monitor.asm|3198||0|0|61424|T| +monitor.asm|3199||0|0|61425|T| +monitor.asm|3200||0|0|61426|T| +monitor.asm|3201||0|0|61427|T| +monitor.asm|3202||0|0|61430|T| +monitor.asm|3204||0|0|61431|T| +monitor.asm|3205||0|0|61432|T| +monitor.asm|3207||0|0|61435|F|MONITOR.esc_draw_line.next_row_down +monitor.asm|3207||0|0|61435|L|MONITOR,esc_draw_line,next_row_down,+used +monitor.asm|3209||0|0|61435|T| +monitor.asm|3210||0|0|61436|T| +monitor.asm|3211||0|0|61437|T| +monitor.asm|3212||0|0|61438|T| +monitor.asm|3213||0|0|61439|T| +monitor.asm|3215||0|0|61440|T| +monitor.asm|3216||0|0|61441|T| +monitor.asm|3217||0|0|61442|T| +monitor.asm|3218||0|0|61443|T| +monitor.asm|3219||0|0|61444|T| +monitor.asm|3220||0|0|61445|T| +monitor.asm|3222||0|0|61446|T| +monitor.asm|3223||0|0|61447|T| +monitor.asm|3224||0|0|61448|T| +monitor.asm|3225||0|0|61449|T| +monitor.asm|3226||0|0|61452|T| +monitor.asm|3228||0|0|61453|T| +monitor.asm|3229||0|0|61454|T| +monitor.asm|3231||0|0|61457|F|MONITOR.close_vram_ret +monitor.asm|3231||0|0|61457|L|MONITOR,close_vram_ret,,+used +monitor.asm|3233||0|0|61457|T| +monitor.asm|3234||0|0|61459|T| +monitor.asm|3235||0|0|61461|T| +monitor.asm|3242||0|0|61462|F|MONITOR.height0 +monitor.asm|3242||0|0|61462|L|MONITOR,height0,,+used +monitor.asm|3243||0|0|61462|T| +monitor.asm|3244||0|0|61463|T| +monitor.asm|3245||0|0|61464|T| +monitor.asm|3246||0|0|61465|T| +monitor.asm|3247||0|0|61466|T| +monitor.asm|3248||0|0|61469|T| +monitor.asm|3249||0|0|61470|F|MONITOR.height0.len_ne0 +monitor.asm|3249||0|0|61470|L|MONITOR,height0,len_ne0,+used +monitor.asm|3250||0|0|61470|T| +monitor.asm|3252||0|0|61473|T| +monitor.asm|3253||0|0|61475|F|MONITOR.height0.edl_l19 +monitor.asm|3253||0|0|61475|L|MONITOR,height0,edl_l19,+used +monitor.asm|3254||0|0|61475|T| +monitor.asm|3255||0|0|61476|T| +monitor.asm|3256||0|0|61477|T| +monitor.asm|3257||0|0|61480|T| +monitor.asm|3258||0|0|61481|T| +monitor.asm|3260||0|0|61482|T| +monitor.asm|3261||0|0|61483|T| +monitor.asm|3262||0|0|61486|T| +monitor.asm|3265||0|0|61487|T| +monitor.asm|3266||0|0|61489|T| +monitor.asm|3268||0|0|61491|F|MONITOR.height0.next_col +monitor.asm|3268||0|0|61491|L|MONITOR,height0,next_col,+used +monitor.asm|3270||0|0|61491|T| +monitor.asm|3271||0|0|61492|T| +monitor.asm|3272||0|0|61493|T| +monitor.asm|3273||0|0|61494|T| +monitor.asm|3274||0|0|61495|T| +monitor.asm|3276||0|0|61496|T| +monitor.asm|3277||0|0|61497|T| +monitor.asm|3278||0|0|61498|T| +monitor.asm|3279||0|0|61499|T| +monitor.asm|3280||0|0|61500|T| +monitor.asm|3281||0|0|61501|T| +monitor.asm|3283||0|0|61502|T| +monitor.asm|3285||0|0|61503|T| +monitor.asm|3286||0|0|61504|T| +monitor.asm|3287||0|0|61505|T| +monitor.asm|3288||0|0|61506|T| +monitor.asm|3289||0|0|61509|T| +monitor.asm|3290||0|0|61510|T| +monitor.asm|3291||0|0|61511|T| +monitor.asm|3292||0|0|61512|F|MONITOR.height0.edl_l21 +monitor.asm|3292||0|0|61512|L|MONITOR,height0,edl_l21,+used +monitor.asm|3293||0|0|61512|T| +monitor.asm|3294||0|0|61513|T| +monitor.asm|3295||0|0|61514|T| +monitor.asm|3297||0|0|61517|T| +monitor.asm|3298||0|0|61519|T| +monitor.asm|3299||0|0|61521|T| +monitor.asm|3304||0|0|61522|F|MONITOR.esc_draw_dot +monitor.asm|3304||0|0|61522|L|MONITOR,esc_draw_dot,,+used +monitor.asm|3305||0|0|61522|T| +monitor.asm|3306||0|0|61525|T| +monitor.asm|3307||0|0|61526|T| +monitor.asm|3308||0|0|61529|T| +monitor.asm|3309||0|0|61531|F|MONITOR.edd_l1 +monitor.asm|3309||0|0|61531|L|MONITOR,edd_l1,,+used +monitor.asm|3310||0|0|61531|T| +monitor.asm|3311||0|0|61532|T| +monitor.asm|3312||0|0|61533|T| +monitor.asm|3313||0|0|61536|T| +monitor.asm|3314||0|0|61537|T| +monitor.asm|3315||0|0|61540|T| +monitor.asm|3316||0|0|61542|T| +monitor.asm|3317||0|0|61545|T| +monitor.asm|3318||0|0|61546|T| +monitor.asm|3319||0|0|61547|T| +monitor.asm|3320||0|0|61548|T| +monitor.asm|3321||0|0|61551|T| +monitor.asm|3322||0|0|61553|T| +monitor.asm|3323||0|0|61556|T| +monitor.asm|3324||0|0|61558|T| +monitor.asm|3325||0|0|61560|T| +monitor.asm|3326||0|0|61561|T| +monitor.asm|3327||0|0|61562|T| +monitor.asm|3328||0|0|61563|T| +monitor.asm|3329||0|0|61564|T| +monitor.asm|3330||0|0|61565|T| +monitor.asm|3331||0|0|61566|T| +monitor.asm|3332||0|0|61567|T| +monitor.asm|3333||0|0|61569|T| +monitor.asm|3334||0|0|61571|T| +monitor.asm|3335||0|0|61572|F|MONITOR.edd_ep_fm_0 +monitor.asm|3335||0|0|61572|L|MONITOR,edd_ep_fm_0,,+used +monitor.asm|3336||0|0|61572|T| +monitor.asm|3337||0|0|61573|T| +monitor.asm|3338||0|0|61576|T| +monitor.asm|3339||0|0|61577|T| +monitor.asm|3340||0|0|61579|T| +monitor.asm|3341||0|0|61581|T| +monitor.asm|3342||0|0|61582|T| +monitor.asm|3343||0|0|61583|T| +monitor.asm|3344||0|0|61584|T| +monitor.asm|3345||0|0|61585|T| +monitor.asm|3346||0|0|61586|T| +monitor.asm|3347||0|0|61587|T| +monitor.asm|3348||0|0|61588|T| +monitor.asm|3349||0|0|61589|T| +monitor.asm|3350||0|0|61590|T| +monitor.asm|3351||0|0|61591|T| +monitor.asm|3352||0|0|61592|T| +monitor.asm|3353||0|0|61594|T| +monitor.asm|3354||0|0|61596|T| +monitor.asm|3355||0|0|61597|F|MONITOR.edd_ep_task_end +monitor.asm|3355||0|0|61597|L|MONITOR,edd_ep_task_end,,+used +monitor.asm|3356||0|0|61597|T| +monitor.asm|3357||0|0|61600|T| +monitor.asm|3358||0|0|61603|T| +monitor.asm|3363||0|0|61604|F|MONITOR.esc_picture +monitor.asm|3363||0|0|61604|L|MONITOR,esc_picture,,+used +monitor.asm|3364||0|0|61604|T| +monitor.asm|3365||0|0|61607|T| +monitor.asm|3366||0|0|61608|T| +monitor.asm|3367||0|0|61610|T| +monitor.asm|3368||0|0|61611|T| +monitor.asm|3369||0|0|61612|T| +monitor.asm|3370||0|0|61613|T| +monitor.asm|3371||0|0|61614|T| +monitor.asm|3372||0|0|61615|T| +monitor.asm|3373||0|0|61616|T| +monitor.asm|3374||0|0|61617|T| +monitor.asm|3375||0|0|61620|T| +monitor.asm|3376||0|0|61621|T| +monitor.asm|3377||0|0|61622|T| +monitor.asm|3378||0|0|61625|T| +monitor.asm|3379||0|0|61626|T| +monitor.asm|3380||0|0|61627|T| +monitor.asm|3381||0|0|61628|T| +monitor.asm|3382||0|0|61629|T| +monitor.asm|3383||0|0|61630|T| +monitor.asm|3384||0|0|61631|T| +monitor.asm|3385||0|0|61632|T| +monitor.asm|3386||0|0|61633|T| +monitor.asm|3389||0|0|61634|T| +monitor.asm|3390||0|0|61636|T| +monitor.asm|3391||0|0|61638|T| +monitor.asm|3393||0|0|61641|T| +monitor.asm|3394||0|0|61643|T| +monitor.asm|3396||0|0|61645|T| +monitor.asm|3397||0|0|61646|T| +monitor.asm|3398||0|0|61647|T| +monitor.asm|3399||0|0|61648|T| +monitor.asm|3400||0|0|61649|T| +monitor.asm|3401||0|0|61650|T| +monitor.asm|3402||0|0|61653|T| +monitor.asm|3404||0|0|61654|F|MONITOR.pict_sub1 +monitor.asm|3404||0|0|61654|L|MONITOR,pict_sub1,,+used +monitor.asm|3405||0|0|61654|T| +monitor.asm|3406||0|0|61657|T| +monitor.asm|3407||0|0|61659|T| +monitor.asm|3408||0|0|61662|T| +monitor.asm|3409||0|0|61664|T| +monitor.asm|3410||0|0|61667|T| +monitor.asm|3411||0|0|61669|T| +monitor.asm|3412||0|0|61672|T| +monitor.asm|3413||0|0|61674|T| +monitor.asm|3414||0|0|61677|T| +monitor.asm|3415||0|0|61679|T| +monitor.asm|3416||0|0|61682|T| +monitor.asm|3418||0|0|61683|F|MONITOR.pict_clr +monitor.asm|3418||0|0|61683|L|MONITOR,pict_clr,,+used +monitor.asm|3419||0|0|61683|T| +monitor.asm|3420||0|0|61684|T| +monitor.asm|3421||0|0|61685|T| +monitor.asm|3422||0|0|61688|T| +monitor.asm|3423||0|0|61689|T| +monitor.asm|3424||0|0|61692|T| +monitor.asm|3425||0|0|61693|T| +monitor.asm|3426||0|0|61696|T| +monitor.asm|3427||0|0|61697|T| +monitor.asm|3428||0|0|61698|T| +monitor.asm|3429||0|0|61699|T| +monitor.asm|3431||0|0|61700|F|MONITOR.ehd_l1 +monitor.asm|3431||0|0|61700|L|MONITOR,ehd_l1,,+used +monitor.asm|3432||0|0|61700|T| +monitor.asm|3433||0|0|61702|T| +monitor.asm|3434||0|0|61705|T| +monitor.asm|3435||0|0|61707|T| +monitor.asm|3436||0|0|61710|T| +monitor.asm|3441||0|0|61711|F|MONITOR.m_fn_39 +monitor.asm|3441||0|0|61711|L|MONITOR,m_fn_39,,+used +monitor.asm|3442||0|0|61711|T| +monitor.asm|3443||0|0|61714|T| +monitor.asm|3444||0|0|61715|T| +monitor.asm|3445||0|0|61716|T| +monitor.asm|3446||0|0|61717|T| +monitor.asm|3447||0|0|61718|T| +monitor.asm|3448||0|0|61721|T| +monitor.asm|3449||0|0|61722|T| +monitor.asm|3450||0|0|61723|T| +monitor.asm|3451||0|0|61726|T| +monitor.asm|3452||0|0|61727|T| +monitor.asm|3453||0|0|61728|T| +monitor.asm|3454||0|0|61731|T| +monitor.asm|3455||0|0|61732|T| +monitor.asm|3456||0|0|61733|T| +monitor.asm|3457||0|0|61734|T| +monitor.asm|3458||0|0|61735|T| +monitor.asm|3459||0|0|61736|T| +monitor.asm|3460||0|0|61737|T| +monitor.asm|3461||0|0|61738|T| +monitor.asm|3462||0|0|61739|T| +monitor.asm|3463||0|0|61740|T| +monitor.asm|3464||0|0|61742|F|MONITOR.m_fn_39.l1 +monitor.asm|3464||0|0|61742|L|MONITOR,m_fn_39,l1,+used +monitor.asm|3465||0|0|61742|T| +monitor.asm|3466||0|0|61743|T| +monitor.asm|3467||0|0|61744|T| +monitor.asm|3468||0|0|61745|T| +monitor.asm|3469||0|0|61746|T| +monitor.asm|3470||0|0|61747|T| +monitor.asm|3471||0|0|61748|T| +monitor.asm|3472||0|0|61749|T| +monitor.asm|3473||0|0|61750|T| +monitor.asm|3474||0|0|61751|T| +monitor.asm|3475||0|0|61752|T| +monitor.asm|3476||0|0|61755|T| +monitor.asm|3477||0|0|61756|T| +monitor.asm|3478||0|0|61759|T| +monitor.asm|3479||0|0|61760|T| +monitor.asm|3480||0|0|61761|T| +monitor.asm|3481||0|0|61762|T| +monitor.asm|3482||0|0|61763|T| +monitor.asm|3483||0|0|61764|T| +monitor.asm|3484||0|0|61765|T| +monitor.asm|3485||0|0|61767|T| +monitor.asm|3487||0|0|61768|F|MONITOR.m_fn_39.l2 +monitor.asm|3487||0|0|61768|L|MONITOR,m_fn_39,l2,+used +monitor.asm|3488||0|0|61768|T| +monitor.asm|3489||0|0|61769|T| +monitor.asm|3490||0|0|61770|T| +monitor.asm|3491||0|0|61771|T| +monitor.asm|3492||0|0|61772|T| +monitor.asm|3493||0|0|61775|T| +monitor.asm|3494||0|0|61776|T| +monitor.asm|3496||0|0|61779|T| +monitor.asm|3497||0|0|61780|T| +monitor.asm|3498||0|0|61783|T| +monitor.asm|3499||0|0|61784|T| +monitor.asm|3500||0|0|61787|T| +monitor.asm|3501||0|0|61790|T| +monitor.asm|3502||0|0|61791|F|MONITOR.m_fn_39.l3 +monitor.asm|3502||0|0|61791|L|MONITOR,m_fn_39,l3,+used +monitor.asm|3503||0|0|61791|T| +monitor.asm|3504||0|0|61792|T| +monitor.asm|3505||0|0|61795|T| +monitor.asm|3506||0|0|61796|T| +monitor.asm|3507||0|0|61797|T| +monitor.asm|3508||0|0|61800|T| +monitor.asm|3509||0|0|61801|T| +monitor.asm|3510||0|0|61804|T| +monitor.asm|3511||0|0|61806|T| +monitor.asm|3512||0|0|61809|T| +monitor.asm|3513||0|0|61811|T| +monitor.asm|3514||0|0|61812|T| +monitor.asm|3519||0|0|61815|F|MONITOR.get_image_hdr +monitor.asm|3519||0|0|61815|L|MONITOR,get_image_hdr,,+used +monitor.asm|3520||0|0|61815|T| +monitor.asm|3521||0|0|61818|T| +monitor.asm|3522||0|0|61820|T| +monitor.asm|3523||0|0|61821|T| +monitor.asm|3524||0|0|61822|T| +monitor.asm|3525||0|0|61825|T| +monitor.asm|3526||0|0|61826|T| +monitor.asm|3527||0|0|61827|T| +monitor.asm|3528||0|0|61828|T| +monitor.asm|3529||0|0|61830|T| +monitor.asm|3530||0|0|61831|T| +monitor.asm|3531||0|0|61832|T| +monitor.asm|3532||0|0|61833|T| +monitor.asm|3533||0|0|61836|T| +monitor.asm|3534||0|0|61837|T| +monitor.asm|3535||0|0|61838|T| +monitor.asm|3536||0|0|61839|T| +monitor.asm|3537||0|0|61840|T| +monitor.asm|3538||0|0|61841|T| +monitor.asm|3539||0|0|61842|T| +monitor.asm|3540||0|0|61843|T| +monitor.asm|3541||0|0|61844|T| +monitor.asm|3542||0|0|61845|T| +monitor.asm|3543||0|0|61846|T| +monitor.asm|3544||0|0|61847|T| +monitor.asm|3545||0|0|61848|T| +monitor.asm|3546||0|0|61851|T| +monitor.asm|3547||0|0|61852|T| +monitor.asm|3548||0|0|61853|T| +monitor.asm|3549||0|0|61854|T| +monitor.asm|3550||0|0|61855|T| +monitor.asm|3551||0|0|61858|T| +monitor.asm|3552||0|0|61859|T| +monitor.asm|3553||0|0|61860|T| +monitor.asm|3554||0|0|61861|T| +monitor.asm|3555||0|0|61862|T| +monitor.asm|3556||0|0|61863|T| +monitor.asm|3557||0|0|61864|T| +monitor.asm|3558||0|0|61865|T| +monitor.asm|3559||0|0|61866|T| +monitor.asm|3560||0|0|61867|T| +monitor.asm|3561||0|0|61868|T| +monitor.asm|3562||0|0|61869|T| +monitor.asm|3563||0|0|61871|T| +monitor.asm|3564||0|0|61873|T| +monitor.asm|3565||0|0|61876|T| +monitor.asm|3570||0|0|61877|F|MONITOR.esc_get_put_image +monitor.asm|3570||0|0|61877|L|MONITOR,esc_get_put_image,,+used +monitor.asm|3571||0|0|61877|T| +monitor.asm|3572||0|0|61880|T| +monitor.asm|3573||0|0|61882|T| +monitor.asm|3574||0|0|61885|T| +monitor.asm|3575||0|0|61888|T| +monitor.asm|3576||0|0|61889|T| +monitor.asm|3577||0|0|61890|T| +monitor.asm|3578||0|0|61891|T| +monitor.asm|3579||0|0|61892|T| +monitor.asm|3580||0|0|61893|T| +monitor.asm|3581||0|0|61894|T| +monitor.asm|3582||0|0|61895|T| +monitor.asm|3583||0|0|61898|T| +monitor.asm|3584||0|0|61899|T| +monitor.asm|3585||0|0|61902|T| +monitor.asm|3586||0|0|61903|T| +monitor.asm|3587||0|0|61905|T| +monitor.asm|3589||0|0|61906|T| +monitor.asm|3590||0|0|61908|T| +monitor.asm|3592||0|0|61909|T| +monitor.asm|3595||0|0|61910|T| +monitor.asm|3596||0|0|61912|T| +monitor.asm|3597||0|0|61914|T| +monitor.asm|3598||0|0|61917|T| +monitor.asm|3599||0|0|61918|T| +monitor.asm|3607||0|0|61921|F|MONITOR.get_image +monitor.asm|3607||0|0|61921|L|MONITOR,get_image,,+used +monitor.asm|3608||0|0|61921|T| +monitor.asm|3609||0|0|61922|T| +monitor.asm|3610||0|0|61923|F|MONITOR.get_image.next_row +monitor.asm|3610||0|0|61923|L|MONITOR,get_image,next_row,+used +monitor.asm|3612||0|0|61923|T| +monitor.asm|3613||0|0|61924|T| +monitor.asm|3614||0|0|61925|T| +monitor.asm|3615||0|0|61926|T| +monitor.asm|3617||0|0|61927|T| +monitor.asm|3618||0|0|61928|T| +monitor.asm|3619||0|0|61929|T| +monitor.asm|3620||0|0|61930|T| +monitor.asm|3621||0|0|61931|T| +monitor.asm|3622||0|0|61933|T| +monitor.asm|3623||0|0|61936|T| +monitor.asm|3624||0|0|61938|F|MONITOR.get_image.l2 +monitor.asm|3624||0|0|61938|L|MONITOR,get_image,l2,+used +monitor.asm|3625||0|0|61938|T| +monitor.asm|3626||0|0|61939|T| +monitor.asm|3627||0|0|61940|T| +monitor.asm|3628||0|0|61943|T| +monitor.asm|3629||0|0|61944|T| +monitor.asm|3630||0|0|61945|T| +monitor.asm|3631||0|0|61946|T| +monitor.asm|3632||0|0|61947|T| +monitor.asm|3633||0|0|61950|T| +monitor.asm|3641||0|0|61953|F|MONITOR.put_image +monitor.asm|3641||0|0|61953|L|MONITOR,put_image,,+used +monitor.asm|3642||0|0|61953|T| +monitor.asm|3643||0|0|61954|T| +monitor.asm|3644||0|0|61955|F|MONITOR.put_image.next_row +monitor.asm|3644||0|0|61955|L|MONITOR,put_image,next_row,+used +monitor.asm|3647||0|0|61955|T| +monitor.asm|3648||0|0|61956|T| +monitor.asm|3649||0|0|61957|T| +monitor.asm|3650||0|0|61958|T| +monitor.asm|3652||0|0|61959|T| +monitor.asm|3653||0|0|61960|T| +monitor.asm|3654||0|0|61961|T| +monitor.asm|3655||0|0|61962|T| +monitor.asm|3656||0|0|61963|T| +monitor.asm|3657||0|0|61964|T| +monitor.asm|3658||0|0|61966|T| +monitor.asm|3659||0|0|61969|T| +monitor.asm|3660||0|0|61971|F|MONITOR.put_image.l2 +monitor.asm|3660||0|0|61971|L|MONITOR,put_image,l2,+used +monitor.asm|3661||0|0|61971|T| +monitor.asm|3662||0|0|61972|T| +monitor.asm|3663||0|0|61975|T| +monitor.asm|3664||0|0|61976|T| +monitor.asm|3666||0|0|61977|T| +monitor.asm|3667||0|0|61978|T| +monitor.asm|3668||0|0|61979|T| +monitor.asm|3670||0|0|61982|F|MONITOR.img_task_end +monitor.asm|3670||0|0|61982|L|MONITOR,img_task_end,,+used +monitor.asm|3671||0|0|61982|T| +monitor.asm|3672||0|0|61984|T| +monitor.asm|3673||0|0|61986|T| +monitor.asm|3678||0|0|61987|F|MONITOR.fn39_sub2 +monitor.asm|3678||0|0|61987|L|MONITOR,fn39_sub2,,+used +monitor.asm|3679||0|0|61987|T| +monitor.asm|3680||0|0|61988|F|MONITOR.fn39_sub2.l1 +monitor.asm|3680||0|0|61988|L|MONITOR,fn39_sub2,l1,+used +monitor.asm|3681||0|0|61988|T| +monitor.asm|3682||0|0|61989|F|MONITOR.fn39_sub2.l2 +monitor.asm|3682||0|0|61989|L|MONITOR,fn39_sub2,l2,+used +monitor.asm|3683||0|0|61989|T| +monitor.asm|3684||0|0|61990|T| +monitor.asm|3685||0|0|61991|T| +monitor.asm|3686||0|0|61992|T| +monitor.asm|3687||0|0|61993|T| +monitor.asm|3688||0|0|61995|T| +monitor.asm|3689||0|0|61998|T| +monitor.asm|3690||0|0|61999|T| +monitor.asm|3691||0|0|62000|T| +monitor.asm|3692||0|0|62003|F|MONITOR.fn39_sub2.l3 +monitor.asm|3692||0|0|62003|L|MONITOR,fn39_sub2,l3,+used +monitor.asm|3693||0|0|62003|T| +monitor.asm|3694||0|0|62004|T| +monitor.asm|3695||0|0|62005|T| +monitor.asm|3696||0|0|62008|F|MONITOR.fn39_sub2.l4 +monitor.asm|3696||0|0|62008|L|MONITOR,fn39_sub2,l4,+used +monitor.asm|3697||0|0|62008|T| +monitor.asm|3698||0|0|62009|T| +monitor.asm|3699||0|0|62010|T| +monitor.asm|3700||0|0|62011|T| +monitor.asm|3701||0|0|62012|T| +monitor.asm|3702||0|0|62013|T| +monitor.asm|3703||0|0|62014|T| +monitor.asm|3704||0|0|62015|T| +monitor.asm|3705||0|0|62017|T| +monitor.asm|3706||0|0|62018|T| +monitor.asm|3707||0|0|62021|F|MONITOR.fn39_sub2.l5 +monitor.asm|3707||0|0|62021|L|MONITOR,fn39_sub2,l5,+used +monitor.asm|3708||0|0|62021|T| +monitor.asm|3709||0|0|62022|T| +monitor.asm|3710||0|0|62023|T| +monitor.asm|3711||0|0|62026|F|MONITOR.fn39_sub2.l6 +monitor.asm|3711||0|0|62026|L|MONITOR,fn39_sub2,l6,+used +monitor.asm|3712||0|0|62026|T| +monitor.asm|3713||0|0|62027|T| +monitor.asm|3714||0|0|62028|T| +monitor.asm|3715||0|0|62029|T| +monitor.asm|3716||0|0|62030|T| +monitor.asm|3717||0|0|62031|T| +monitor.asm|3718||0|0|62032|T| +monitor.asm|3719||0|0|62033|T| +monitor.asm|3720||0|0|62034|T| +monitor.asm|3721||0|0|62035|T| +monitor.asm|3722||0|0|62036|T| +monitor.asm|3723||0|0|62037|T| +monitor.asm|3724||0|0|62038|T| +monitor.asm|3725||0|0|62039|T| +monitor.asm|3726||0|0|62040|T| +monitor.asm|3727||0|0|62041|T| +monitor.asm|3728||0|0|62042|T| +monitor.asm|3729||0|0|62043|T| +monitor.asm|3730||0|0|62046|T| +monitor.asm|3731||0|0|62047|T| +monitor.asm|3732||0|0|62048|T| +monitor.asm|3733||0|0|62049|T| +monitor.asm|3734||0|0|62050|T| +monitor.asm|3735||0|0|62053|T| +monitor.asm|3740||0|0|62054|F|MONITOR.gih_rt +monitor.asm|3740||0|0|62054|L|MONITOR,gih_rt,,+used +monitor.asm|3741||0|0|62054|T| +monitor.asm|3742||0|0|62055|T| +monitor.asm|3743||0|0|62056|T| +monitor.asm|3744||0|0|62058|T| +monitor.asm|3745||0|0|62059|T| +monitor.asm|3746||0|0|62061|T| +monitor.asm|3747||0|0|62062|T| +monitor.asm|3748||0|0|62064|T| +monitor.asm|3749||0|0|62065|T| +monitor.asm|3750||0|0|62066|T| +monitor.asm|3751||0|0|62067|T| +monitor.asm|3752||0|0|62068|T| +monitor.asm|3753||0|0|62069|T| +monitor.asm|3754||0|0|62070|T| +monitor.asm|3755||0|0|62071|T| +monitor.asm|3756||0|0|62074|T| +monitor.asm|3757||0|0|62075|T| +monitor.asm|3758||0|0|62076|T| +monitor.asm|3759||0|0|62079|T| +monitor.asm|3760||0|0|62080|T| +monitor.asm|3761||0|0|62081|T| +monitor.asm|3762||0|0|62082|T| +monitor.asm|3763||0|0|62084|T| +monitor.asm|3764||0|0|62087|T| +monitor.asm|3765||0|0|62089|F|MONITOR.gih_rt.l1 +monitor.asm|3765||0|0|62089|L|MONITOR,gih_rt,l1,+used +monitor.asm|3766||0|0|62089|T| +monitor.asm|3767||0|0|62090|T| +monitor.asm|3768||0|0|62093|F|MONITOR.gih_rt.l2 +monitor.asm|3768||0|0|62093|L|MONITOR,gih_rt,l2,+used +monitor.asm|3769||0|0|62093|T| +monitor.asm|3770||0|0|62094|T| +monitor.asm|3771||0|0|62097|F|MONITOR.gih_rt.l3 +monitor.asm|3771||0|0|62097|L|MONITOR,gih_rt,l3,+used +monitor.asm|3772||0|0|62097|T| +monitor.asm|3773||0|0|62098|T| +monitor.asm|3774||0|0|62099|T| +monitor.asm|3775||0|0|62100|T| +monitor.asm|3776||0|0|62101|T| +monitor.asm|3777||0|0|62102|T| +monitor.asm|3778||0|0|62103|T| +monitor.asm|3779||0|0|62104|T| +monitor.asm|3780||0|0|62105|T| +monitor.asm|3781||0|0|62106|T| +monitor.asm|3782||0|0|62107|T| +monitor.asm|3783||0|0|62108|T| +monitor.asm|3784||0|0|62111|T| +monitor.asm|3785||0|0|62112|T| +monitor.asm|3786||0|0|62113|T| +monitor.asm|3787||0|0|62114|T| +monitor.asm|3788||0|0|62115|T| +monitor.asm|3789||0|0|62116|T| +monitor.asm|3790||0|0|62117|T| +monitor.asm|3791||0|0|62118|T| +monitor.asm|3792||0|0|62119|T| +monitor.asm|3793||0|0|62120|T| +monitor.asm|3794||0|0|62121|T| +monitor.asm|3795||0|0|62122|T| +monitor.asm|3796||0|0|62123|T| +monitor.asm|3797||0|0|62124|T| +monitor.asm|3798||0|0|62127|T| +monitor.asm|3799||0|0|62128|T| +monitor.asm|3800||0|0|62131|T| +monitor.asm|3801||0|0|62132|T| +monitor.asm|3802||0|0|62133|T| +monitor.asm|3803||0|0|62134|T| +monitor.asm|3804||0|0|62135|T| +monitor.asm|3805||0|0|62137|T| +monitor.asm|3806||0|0|62138|T| +monitor.asm|3807||0|0|62140|T| +monitor.asm|3812||0|0|62141|F|MONITOR.gih_bs +monitor.asm|3812||0|0|62141|L|MONITOR,gih_bs,,+used +monitor.asm|3813||0|0|62141|T| +monitor.asm|3814||0|0|62142|T| +monitor.asm|3815||0|0|62143|T| +monitor.asm|3816||0|0|62145|T| +monitor.asm|3817||0|0|62146|T| +monitor.asm|3819||0|0|62147|T| +monitor.asm|3820||0|0|62149|T| +monitor.asm|3821||0|0|62150|T| +monitor.asm|3822||0|0|62151|T| +monitor.asm|3823||0|0|62152|T| +monitor.asm|3824||0|0|62153|T| +monitor.asm|3825||0|0|62154|T| +monitor.asm|3826||0|0|62155|T| +monitor.asm|3827||0|0|62156|T| +monitor.asm|3828||0|0|62157|T| +monitor.asm|3829||0|0|62158|T| +monitor.asm|3830||0|0|62161|T| +monitor.asm|3831||0|0|62162|T| +monitor.asm|3832||0|0|62163|T| +monitor.asm|3833||0|0|62164|T| +monitor.asm|3834||0|0|62165|T| +monitor.asm|3835||0|0|62166|T| +monitor.asm|3836||0|0|62168|T| +monitor.asm|3837||0|0|62171|T| +monitor.asm|3838||0|0|62173|F|MONITOR.gih_bs.l1 +monitor.asm|3838||0|0|62173|L|MONITOR,gih_bs,l1,+used +monitor.asm|3839||0|0|62173|T| +monitor.asm|3840||0|0|62174|T| +monitor.asm|3841||0|0|62177|T| +monitor.asm|3842||0|0|62178|T| +monitor.asm|3843||0|0|62179|T| +monitor.asm|3844||0|0|62182|T| +monitor.asm|3845||0|0|62185|F|MONITOR.gih_bs.l2 +monitor.asm|3845||0|0|62185|L|MONITOR,gih_bs,l2,+used +monitor.asm|3846||0|0|62185|T| +monitor.asm|3847||0|0|62186|T| +monitor.asm|3848||0|0|62189|F|MONITOR.gih_bs.l3 +monitor.asm|3848||0|0|62189|L|MONITOR,gih_bs,l3,+used +monitor.asm|3849||0|0|62189|T| +monitor.asm|3850||0|0|62190|T| +monitor.asm|3851||0|0|62191|T| +monitor.asm|3852||0|0|62192|T| +monitor.asm|3853||0|0|62193|T| +monitor.asm|3854||0|0|62194|T| +monitor.asm|3855||0|0|62195|T| +monitor.asm|3856||0|0|62196|T| +monitor.asm|3857||0|0|62197|T| +monitor.asm|3858||0|0|62198|T| +monitor.asm|3859||0|0|62199|T| +monitor.asm|3860||0|0|62200|T| +monitor.asm|3861||0|0|62203|T| +monitor.asm|3862||0|0|62204|T| +monitor.asm|3863||0|0|62205|T| +monitor.asm|3864||0|0|62206|T| +monitor.asm|3865||0|0|62207|T| +monitor.asm|3866||0|0|62208|T| +monitor.asm|3867||0|0|62209|T| +monitor.asm|3868||0|0|62210|T| +monitor.asm|3869||0|0|62211|T| +monitor.asm|3870||0|0|62212|T| +monitor.asm|3871||0|0|62213|T| +monitor.asm|3872||0|0|62214|T| +monitor.asm|3873||0|0|62215|T| +monitor.asm|3874||0|0|62216|T| +monitor.asm|3875||0|0|62219|T| +monitor.asm|3876||0|0|62220|T| +monitor.asm|3877||0|0|62223|T| +monitor.asm|3878||0|0|62224|T| +monitor.asm|3879||0|0|62225|T| +monitor.asm|3880||0|0|62226|T| +monitor.asm|3881||0|0|62227|T| +monitor.asm|3882||0|0|62229|T| +monitor.asm|3883||0|0|62230|T| +monitor.asm|3884||0|0|62232|T| +monitor.asm|3889||0|0|62233|F|MONITOR.gih_ctrl_z +monitor.asm|3889||0|0|62233|L|MONITOR,gih_ctrl_z,,+used +monitor.asm|3890||0|0|62233|T| +monitor.asm|3891||0|0|62234|T| +monitor.asm|3892||0|0|62237|T| +monitor.asm|3893||0|0|62238|T| +monitor.asm|3894||0|0|62239|T| +monitor.asm|3895||0|0|62240|T| +monitor.asm|3896||0|0|62241|T| +monitor.asm|3897||0|0|62242|T| +monitor.asm|3898||0|0|62245|T| +monitor.asm|3899||0|0|62246|T| +monitor.asm|3900||0|0|62247|T| +monitor.asm|3901||0|0|62248|T| +monitor.asm|3902||0|0|62251|T| +monitor.asm|3903||0|0|62252|T| +monitor.asm|3904||0|0|62253|T| +monitor.asm|3905||0|0|62254|F|MONITOR.gih_ctrl_z.l1 +monitor.asm|3905||0|0|62254|L|MONITOR,gih_ctrl_z,l1,+used +monitor.asm|3906||0|0|62254|T| +monitor.asm|3907||0|0|62257|T| +monitor.asm|3908||0|0|62258|F|MONITOR.gih_ctrl_z.l2 +monitor.asm|3908||0|0|62258|L|MONITOR,gih_ctrl_z,l2,+used +monitor.asm|3909||0|0|62258|T| +monitor.asm|3910||0|0|62259|T| +monitor.asm|3911||0|0|62260|T| +monitor.asm|3912||0|0|62261|T| +monitor.asm|3913||0|0|62262|T| +monitor.asm|3914||0|0|62263|T| +monitor.asm|3915||0|0|62264|T| +monitor.asm|3916||0|0|62265|T| +monitor.asm|3917||0|0|62266|T| +monitor.asm|3918||0|0|62267|T| +monitor.asm|3919||0|0|62270|T| +monitor.asm|3920||0|0|62271|T| +monitor.asm|3921||0|0|62274|T| +monitor.asm|3922||0|0|62275|T| +monitor.asm|3923||0|0|62277|F|MONITOR.gih_ctrl_z.l3 +monitor.asm|3923||0|0|62277|L|MONITOR,gih_ctrl_z,l3,+used +monitor.asm|3924||0|0|62277|T| +monitor.asm|3925||0|0|62280|T| +monitor.asm|3926||0|0|62281|T| +monitor.asm|3927||0|0|62282|F|MONITOR.gih_ctrl_z.l4 +monitor.asm|3927||0|0|62282|L|MONITOR,gih_ctrl_z,l4,+used +monitor.asm|3928||0|0|62282|T| +monitor.asm|3929||0|0|62283|T| +monitor.asm|3930||0|0|62284|T| +monitor.asm|3931||0|0|62285|T| +monitor.asm|3932||0|0|62286|T| +monitor.asm|3933||0|0|62287|T| +monitor.asm|3934||0|0|62288|T| +monitor.asm|3935||0|0|62289|T| +monitor.asm|3936||0|0|62290|T| +monitor.asm|3937||0|0|62291|T| +monitor.asm|3938||0|0|62293|T| +monitor.asm|3939||0|0|62296|T| +monitor.asm|3940||0|0|62298|F|MONITOR.gih_ctrl_z.l5 +monitor.asm|3940||0|0|62298|L|MONITOR,gih_ctrl_z,l5,+used +monitor.asm|3941||0|0|62298|T| +monitor.asm|3942||0|0|62299|T| +monitor.asm|3943||0|0|62302|T| +monitor.asm|3944||0|0|62303|T| +monitor.asm|3945||0|0|62304|T| +monitor.asm|3946||0|0|62305|T| +monitor.asm|3947||0|0|62308|T| +monitor.asm|3948||0|0|62309|T| +monitor.asm|3949||0|0|62310|T| +monitor.asm|3950||0|0|62311|T| +monitor.asm|3955||0|0|62312|F|MONITOR.gih_up +monitor.asm|3955||0|0|62312|L|MONITOR,gih_up,,+used +monitor.asm|3956||0|0|62312|T| +monitor.asm|3957||0|0|62313|T| +monitor.asm|3958||0|0|62316|T| +monitor.asm|3959||0|0|62317|T| +monitor.asm|3960||0|0|62318|T| +monitor.asm|3961||0|0|62320|T| +monitor.asm|3962||0|0|62323|T| +monitor.asm|3963||0|0|62326|T| +monitor.asm|3964||0|0|62328|F|MONITOR.gih_up.l1 +monitor.asm|3964||0|0|62328|L|MONITOR,gih_up,l1,+used +monitor.asm|3965||0|0|62328|T| +monitor.asm|3966||0|0|62329|T| +monitor.asm|3967||0|0|62330|T| +monitor.asm|3968||0|0|62331|T| +monitor.asm|3969||0|0|62332|T| +monitor.asm|3970||0|0|62333|T| +monitor.asm|3971||0|0|62336|T| +monitor.asm|3972||0|0|62337|T| +monitor.asm|3973||0|0|62338|T| +monitor.asm|3974||0|0|62339|T| +monitor.asm|3975||0|0|62340|T| +monitor.asm|3976||0|0|62341|T| +monitor.asm|3977||0|0|62342|T| +monitor.asm|3978||0|0|62343|T| +monitor.asm|3979||0|0|62344|T| +monitor.asm|3980||0|0|62345|T| +monitor.asm|3981||0|0|62346|T| +monitor.asm|3982||0|0|62349|T| +monitor.asm|3983||0|0|62350|T| +monitor.asm|3984||0|0|62351|T| +monitor.asm|3985||0|0|62352|F|MONITOR.gih_up.l2 +monitor.asm|3985||0|0|62352|L|MONITOR,gih_up,l2,+used +monitor.asm|3986||0|0|62352|T| +monitor.asm|3987||0|0|62355|T| +monitor.asm|3988||0|0|62356|F|MONITOR.gih_up.l3 +monitor.asm|3988||0|0|62356|L|MONITOR,gih_up,l3,+used +monitor.asm|3989||0|0|62356|T| +monitor.asm|3990||0|0|62357|T| +monitor.asm|3991||0|0|62358|T| +monitor.asm|3992||0|0|62359|T| +monitor.asm|3993||0|0|62360|T| +monitor.asm|3994||0|0|62361|T| +monitor.asm|3995||0|0|62362|T| +monitor.asm|3996||0|0|62363|T| +monitor.asm|3997||0|0|62364|T| +monitor.asm|3998||0|0|62365|T| +monitor.asm|3999||0|0|62368|T| +monitor.asm|4000||0|0|62369|T| +monitor.asm|4001||0|0|62372|T| +monitor.asm|4002||0|0|62373|T| +monitor.asm|4004||0|0|62375|F|MONITOR.gih_up.l4 +monitor.asm|4004||0|0|62375|L|MONITOR,gih_up,l4,+used +monitor.asm|4005||0|0|62375|T| +monitor.asm|4006||0|0|62378|T| +monitor.asm|4007||0|0|62379|T| +monitor.asm|4009||0|0|62380|F|MONITOR.gih_up.l5 +monitor.asm|4009||0|0|62380|L|MONITOR,gih_up,l5,+used +monitor.asm|4010||0|0|62380|T| +monitor.asm|4011||0|0|62381|T| +monitor.asm|4012||0|0|62382|T| +monitor.asm|4013||0|0|62383|T| +monitor.asm|4014||0|0|62384|T| +monitor.asm|4015||0|0|62385|T| +monitor.asm|4016||0|0|62386|T| +monitor.asm|4017||0|0|62387|T| +monitor.asm|4018||0|0|62388|T| +monitor.asm|4019||0|0|62389|T| +monitor.asm|4020||0|0|62391|T| +monitor.asm|4021||0|0|62394|T| +monitor.asm|4023||0|0|62396|F|MONITOR.gih_up.l6 +monitor.asm|4023||0|0|62396|L|MONITOR,gih_up,l6,+used +monitor.asm|4024||0|0|62396|T| +monitor.asm|4025||0|0|62397|T| +monitor.asm|4026||0|0|62400|T| +monitor.asm|4027||0|0|62401|T| +monitor.asm|4028||0|0|62402|T| +monitor.asm|4029||0|0|62403|T| +monitor.asm|4030||0|0|62406|T| +monitor.asm|4031||0|0|62407|T| +monitor.asm|4032||0|0|62408|T| +monitor.asm|4033||0|0|62409|T| +monitor.asm|4038||0|0|62410|F|MONITOR.pict_sub2 +monitor.asm|4038||0|0|62410|L|MONITOR,pict_sub2,,+used +monitor.asm|4039||0|0|62410|T| +monitor.asm|4040||0|0|62411|T| +monitor.asm|4041||0|0|62412|T| +monitor.asm|4042||0|0|62413|T| +monitor.asm|4043||0|0|62414|T| +monitor.asm|4044||0|0|62416|T| +monitor.asm|4045||0|0|62419|T| +monitor.asm|4046||0|0|62420|T| +monitor.asm|4047||0|0|62421|T| +monitor.asm|4048||0|0|62422|T| +monitor.asm|4049||0|0|62423|T| +monitor.asm|4050||0|0|62424|T| +monitor.asm|4051||0|0|62425|T| +monitor.asm|4052||0|0|62426|T| +monitor.asm|4053||0|0|62427|T| +monitor.asm|4054||0|0|62430|T| +monitor.asm|4055||0|0|62431|T| +monitor.asm|4056||0|0|62432|T| +monitor.asm|4057||0|0|62433|T| +monitor.asm|4058||0|0|62434|T| +monitor.asm|4059||0|0|62435|T| +monitor.asm|4060||0|0|62436|T| +monitor.asm|4061||0|0|62437|T| +monitor.asm|4062||0|0|62438|T| +monitor.asm|4063||0|0|62439|T| +monitor.asm|4064||0|0|62442|T| +monitor.asm|4065||0|0|62445|T| +monitor.asm|4066||0|0|62446|T| +monitor.asm|4067||0|0|62449|T| +monitor.asm|4068||0|0|62450|F|MONITOR.pict_sub2.l1 +monitor.asm|4068||0|0|62450|L|MONITOR,pict_sub2,l1,+used +monitor.asm|4069||0|0|62450|T| +monitor.asm|4070||0|0|62453|T| +monitor.asm|4071||0|0|62455|F|MONITOR.pict_sub2.l2 +monitor.asm|4071||0|0|62455|L|MONITOR,pict_sub2,l2,+used +monitor.asm|4072||0|0|62455|T| +monitor.asm|4073||0|0|62456|T| +monitor.asm|4074||0|0|62459|F|MONITOR.pict_sub2.l3 +monitor.asm|4074||0|0|62459|L|MONITOR,pict_sub2,l3,+used +monitor.asm|4075||0|0|62459|T| +monitor.asm|4076||0|0|62460|T| +monitor.asm|4077||0|0|62461|T| +monitor.asm|4078||0|0|62462|T| +monitor.asm|4079||0|0|62463|T| +monitor.asm|4080||0|0|62464|T| +monitor.asm|4081||0|0|62465|T| +monitor.asm|4082||0|0|62466|T| +monitor.asm|4083||0|0|62467|T| +monitor.asm|4084||0|0|62468|T| +monitor.asm|4085||0|0|62469|T| +monitor.asm|4086||0|0|62470|T| +monitor.asm|4087||0|0|62471|T| +monitor.asm|4088||0|0|62472|T| +monitor.asm|4089||0|0|62473|T| +monitor.asm|4090||0|0|62474|T| +monitor.asm|4091||0|0|62475|T| +monitor.asm|4092||0|0|62476|T| +monitor.asm|4093||0|0|62477|T| +monitor.asm|4094||0|0|62478|T| +monitor.asm|4095||0|0|62479|T| +monitor.asm|4096||0|0|62480|T| +monitor.asm|4097||0|0|62481|T| +monitor.asm|4098||0|0|62482|T| +monitor.asm|4099||0|0|62483|T| +monitor.asm|4100||0|0|62484|T| +monitor.asm|4101||0|0|62485|T| +monitor.asm|4102||0|0|62486|T| +monitor.asm|4103||0|0|62489|T| +monitor.asm|4104||0|0|62490|T| +monitor.asm|4105||0|0|62491|T| +monitor.asm|4106||0|0|62494|T| +monitor.asm|4107||0|0|62497|T| +monitor.asm|4108||0|0|62498|T| +monitor.asm|4109||0|0|62501|T| +monitor.asm|4110||0|0|62502|F|MONITOR.pict_sub2.l4 +monitor.asm|4110||0|0|62502|L|MONITOR,pict_sub2,l4,+used +monitor.asm|4111||0|0|62502|T| +monitor.asm|4112||0|0|62505|T| +monitor.asm|4113||0|0|62506|T| +monitor.asm|4114||0|0|62507|T| +monitor.asm|4115||0|0|62510|T| +monitor.asm|4116||0|0|62511|T| +monitor.asm|4117||0|0|62514|T| +monitor.asm|4118||0|0|62515|T| +monitor.asm|4119||0|0|62517|T| +monitor.asm|4120||0|0|62519|T| +monitor.asm|4121||0|0|62522|T| +monitor.asm|4129||0|0|62523|F|MONITOR.mov_hl_bc +monitor.asm|4129||0|0|62523|L|MONITOR,mov_hl_bc,,+used +monitor.asm|4130||0|0|62523|T| +monitor.asm|4131||0|0|62524|T| +monitor.asm|4132||0|0|62527|T| +monitor.asm|4133||0|0|62528|T| +monitor.asm|4134||0|0|62529|T| +monitor.asm|4136||0|0|62530|F|MONITOR.mov_hl_bc.next +monitor.asm|4136||0|0|62530|L|MONITOR,mov_hl_bc,next,+used +monitor.asm|4137||0|0|62530|T| +monitor.asm|4138||0|0|62531|T| +monitor.asm|4139||0|0|62532|T| +monitor.asm|4140||0|0|62533|T| +monitor.asm|4141||0|0|62534|T| +monitor.asm|4142||0|0|62535|T| +monitor.asm|4143||0|0|62538|T| +monitor.asm|4144||0|0|62539|T| +monitor.asm|4150||0|0|62540|F|MONITOR.esc_draw_circle +monitor.asm|4150||0|0|62540|L|MONITOR,esc_draw_circle,,+used +monitor.asm|4151||0|0|62540|T| +monitor.asm|4152||0|0|62543|T| +monitor.asm|4153||0|0|62544|T| +monitor.asm|4154||0|0|62545|T| +monitor.asm|4155||0|0|62546|T| +monitor.asm|4156||0|0|62548|T| +monitor.asm|4157||0|0|62549|T| +monitor.asm|4159||0|0|62550|T| +monitor.asm|4160||0|0|62551|T| +monitor.asm|4161||0|0|62552|T| +monitor.asm|4162||0|0|62553|T| +monitor.asm|4164||0|0|62556|T| +monitor.asm|4165||0|0|62558|T| +monitor.asm|4166||0|0|62559|T| +monitor.asm|4167||0|0|62560|T| +monitor.asm|4168||0|0|62561|T| +monitor.asm|4169||0|0|62562|T| +monitor.asm|4170||0|0|62563|T| +monitor.asm|4171||0|0|62564|T| +monitor.asm|4172||0|0|62566|T| +monitor.asm|4173||0|0|62567|T| +monitor.asm|4174||0|0|62568|T| +monitor.asm|4175||0|0|62569|F|MONITOR.esc_draw_circle.l1 +monitor.asm|4175||0|0|62569|L|MONITOR,esc_draw_circle,l1,+used +monitor.asm|4176||0|0|62569|T| +monitor.asm|4177||0|0|62570|T| +monitor.asm|4178||0|0|62571|T| +monitor.asm|4179||0|0|62572|T| +monitor.asm|4180||0|0|62575|T| +monitor.asm|4181||0|0|62578|T| +monitor.asm|4182||0|0|62579|T| +monitor.asm|4183||0|0|62581|T| +monitor.asm|4184||0|0|62582|T| +monitor.asm|4185||0|0|62583|T| +monitor.asm|4186||0|0|62585|T| +monitor.asm|4187||0|0|62586|T| +monitor.asm|4188||0|0|62587|T| +monitor.asm|4189||0|0|62588|T| +monitor.asm|4190||0|0|62589|T| +monitor.asm|4191||0|0|62592|F|MONITOR.esc_draw_circle.l2 +monitor.asm|4191||0|0|62592|L|MONITOR,esc_draw_circle,l2,+used +monitor.asm|4192||0|0|62592|T| +monitor.asm|4193||0|0|62593|T| +monitor.asm|4194||0|0|62594|T| +monitor.asm|4195||0|0|62595|T| +monitor.asm|4196||0|0|62596|T| +monitor.asm|4197||0|0|62597|T| +monitor.asm|4198||0|0|62600|T| +monitor.asm|4199||0|0|62601|T| +monitor.asm|4200||0|0|62603|T| +monitor.asm|4201||0|0|62604|T| +monitor.asm|4202||0|0|62605|T| +monitor.asm|4203||0|0|62606|T| +monitor.asm|4204||0|0|62608|T| +monitor.asm|4205||0|0|62611|T| +monitor.asm|4206||0|0|62614|T| +monitor.asm|4207||0|0|62615|T| +monitor.asm|4208||0|0|62617|T| +monitor.asm|4209||0|0|62618|T| +monitor.asm|4210||0|0|62619|T| +monitor.asm|4211||0|0|62621|T| +monitor.asm|4212||0|0|62622|T| +monitor.asm|4213||0|0|62625|T| +monitor.asm|4214||0|0|62626|F|MONITOR.esc_draw_circle.l3 +monitor.asm|4214||0|0|62626|L|MONITOR,esc_draw_circle,l3,+used +monitor.asm|4215||0|0|62626|T| +monitor.asm|4216||0|0|62627|T| +monitor.asm|4217||0|0|62628|T| +monitor.asm|4218||0|0|62629|T| +monitor.asm|4219||0|0|62632|T| +monitor.asm|4224||0|0|62635|F|MONITOR.dc_draw_8px +monitor.asm|4224||0|0|62635|L|MONITOR,dc_draw_8px,,+used +monitor.asm|4225||0|0|62635|T| +monitor.asm|4226||0|0|62636|T| +monitor.asm|4227||0|0|62637|T| +monitor.asm|4228||0|0|62638|T| +monitor.asm|4229||0|0|62639|T| +monitor.asm|4230||0|0|62642|T| +monitor.asm|4231||0|0|62645|T| +monitor.asm|4232||0|0|62648|T| +monitor.asm|4233||0|0|62649|T| +monitor.asm|4234||0|0|62652|T| +monitor.asm|4235||0|0|62655|T| +monitor.asm|4236||0|0|62658|T| +monitor.asm|4237||0|0|62659|T| +monitor.asm|4238||0|0|62660|T| +monitor.asm|4239||0|0|62661|T| +monitor.asm|4240||0|0|62662|T| +monitor.asm|4247||0|0|62663|F|MONITOR.dc_aspect_ratio_1 +monitor.asm|4247||0|0|62663|L|MONITOR,dc_aspect_ratio_1,,+used +monitor.asm|4248||0|0|62663|T| +monitor.asm|4249||0|0|62666|T| +monitor.asm|4250||0|0|62667|T| +monitor.asm|4251||0|0|62668|T| +monitor.asm|4252||0|0|62669|T| +monitor.asm|4253||0|0|62670|T| +monitor.asm|4254||0|0|62673|T| +monitor.asm|4255||0|0|62674|T| +monitor.asm|4256||0|0|62675|T| +monitor.asm|4257||0|0|62678|T| +monitor.asm|4258||0|0|62679|F|MONITOR.dc_aspect_ratio_1.dc_ax_ne0 +monitor.asm|4258||0|0|62679|L|MONITOR,dc_aspect_ratio_1,dc_ax_ne0,+used +monitor.asm|4259||0|0|62679|T| +monitor.asm|4260||0|0|62680|T| +monitor.asm|4261||0|0|62681|T| +monitor.asm|4262||0|0|62682|T| +monitor.asm|4263||0|0|62685|T| +monitor.asm|4264||0|0|62686|T| +monitor.asm|4265||0|0|62687|T| +monitor.asm|4266||0|0|62688|F|MONITOR.dc_aspect_ratio_1.dc_ay_ne0 +monitor.asm|4266||0|0|62688|L|MONITOR,dc_aspect_ratio_1,dc_ay_ne0,+used +monitor.asm|4267||0|0|62688|T| +monitor.asm|4268||0|0|62689|T| +monitor.asm|4269||0|0|62690|T| +monitor.asm|4270||0|0|62693|T| +monitor.asm|4271||0|0|62694|T| +monitor.asm|4277||0|0|62695|F|MONITOR.dc_aspect_ratio2 +monitor.asm|4277||0|0|62695|L|MONITOR,dc_aspect_ratio2,,+used +monitor.asm|4278||0|0|62695|T| +monitor.asm|4279||0|0|62698|T| +monitor.asm|4280||0|0|62699|T| +monitor.asm|4281||0|0|62700|T| +monitor.asm|4282||0|0|62701|T| +monitor.asm|4283||0|0|62702|T| +monitor.asm|4284||0|0|62705|T| +monitor.asm|4285||0|0|62706|T| +monitor.asm|4286||0|0|62707|T| +monitor.asm|4287||0|0|62710|T| +monitor.asm|4288||0|0|62711|F|MONITOR.dc_aspect_ratio2.dc_ax_ne0 +monitor.asm|4288||0|0|62711|L|MONITOR,dc_aspect_ratio2,dc_ax_ne0,+used +monitor.asm|4289||0|0|62711|T| +monitor.asm|4290||0|0|62712|T| +monitor.asm|4291||0|0|62713|T| +monitor.asm|4292||0|0|62714|T| +monitor.asm|4293||0|0|62717|T| +monitor.asm|4294||0|0|62718|T| +monitor.asm|4295||0|0|62719|T| +monitor.asm|4297||0|0|62720|F|MONITOR.dc_aspect_ratio2.dc_ay_ne0 +monitor.asm|4297||0|0|62720|L|MONITOR,dc_aspect_ratio2,dc_ay_ne0,+used +monitor.asm|4298||0|0|62720|T| +monitor.asm|4299||0|0|62721|T| +monitor.asm|4300||0|0|62722|T| +monitor.asm|4301||0|0|62725|T| +monitor.asm|4302||0|0|62726|T| +monitor.asm|4307||0|0|62727|F|MONITOR.dc_mul_e_h +monitor.asm|4307||0|0|62727|L|MONITOR,dc_mul_e_h,,+used +monitor.asm|4308||0|0|62727|T| +monitor.asm|4309||0|0|62729|T| +monitor.asm|4310||0|0|62730|T| +monitor.asm|4311||0|0|62731|T| +monitor.asm|4312||0|0|62734|T| +monitor.asm|4313||0|0|62735|F|MONITOR.dc_mul_e_h.l1 +monitor.asm|4313||0|0|62735|L|MONITOR,dc_mul_e_h,l1,+used +monitor.asm|4314||0|0|62735|T| +monitor.asm|4315||0|0|62736|T| +monitor.asm|4316||0|0|62739|T| +monitor.asm|4317||0|0|62740|F|MONITOR.dc_mul_e_h.l2 +monitor.asm|4317||0|0|62740|L|MONITOR,dc_mul_e_h,l2,+used +monitor.asm|4318||0|0|62740|T| +monitor.asm|4319||0|0|62741|T| +monitor.asm|4320||0|0|62744|T| +monitor.asm|4321||0|0|62745|F|MONITOR.dc_mul_e_h.l3 +monitor.asm|4321||0|0|62745|L|MONITOR,dc_mul_e_h,l3,+used +monitor.asm|4322||0|0|62745|T| +monitor.asm|4323||0|0|62746|T| +monitor.asm|4324||0|0|62749|T| +monitor.asm|4325||0|0|62750|F|MONITOR.dc_mul_e_h.l4 +monitor.asm|4325||0|0|62750|L|MONITOR,dc_mul_e_h,l4,+used +monitor.asm|4326||0|0|62750|T| +monitor.asm|4327||0|0|62751|T| +monitor.asm|4328||0|0|62754|T| +monitor.asm|4329||0|0|62755|F|MONITOR.dc_mul_e_h.l5 +monitor.asm|4329||0|0|62755|L|MONITOR,dc_mul_e_h,l5,+used +monitor.asm|4330||0|0|62755|T| +monitor.asm|4331||0|0|62756|T| +monitor.asm|4332||0|0|62759|T| +monitor.asm|4333||0|0|62760|F|MONITOR.dc_mul_e_h.l6 +monitor.asm|4333||0|0|62760|L|MONITOR,dc_mul_e_h,l6,+used +monitor.asm|4334||0|0|62760|T| +monitor.asm|4335||0|0|62761|T| +monitor.asm|4336||0|0|62764|T| +monitor.asm|4337||0|0|62765|F|MONITOR.dc_mul_e_h.l7 +monitor.asm|4337||0|0|62765|L|MONITOR,dc_mul_e_h,l7,+used +monitor.asm|4338||0|0|62765|T| +monitor.asm|4339||0|0|62766|T| +monitor.asm|4340||0|0|62769|T| +monitor.asm|4341||0|0|62770|F|MONITOR.dc_mul_e_h.l8 +monitor.asm|4341||0|0|62770|L|MONITOR,dc_mul_e_h,l8,+used +monitor.asm|4342||0|0|62770|T| +monitor.asm|4343||0|0|62771|T| +monitor.asm|4348||0|0|62772|F|MONITOR.dc_draw_4px_bc +monitor.asm|4348||0|0|62772|L|MONITOR,dc_draw_4px_bc,,+used +monitor.asm|4350||0|0|62772|T| +monitor.asm|4351||0|0|62773|T| +monitor.asm|4352||0|0|62774|T| +monitor.asm|4353||0|0|62777|T| +monitor.asm|4354||0|0|62778|T| +monitor.asm|4355||0|0|62779|T| +monitor.asm|4356||0|0|62780|T| +monitor.asm|4357||0|0|62781|T| +monitor.asm|4358||0|0|62784|F|MONITOR.dc_draw_4px_bc.l1 +monitor.asm|4358||0|0|62784|L|MONITOR,dc_draw_4px_bc,l1,+used +monitor.asm|4360||0|0|62784|T| +monitor.asm|4361||0|0|62785|T| +monitor.asm|4362||0|0|62786|T| +monitor.asm|4363||0|0|62789|T| +monitor.asm|4364||0|0|62790|T| +monitor.asm|4365||0|0|62791|T| +monitor.asm|4366||0|0|62792|T| +monitor.asm|4367||0|0|62793|T| +monitor.asm|4368||0|0|62796|F|MONITOR.dc_draw_4px_bc.l2 +monitor.asm|4368||0|0|62796|L|MONITOR,dc_draw_4px_bc,l2,+used +monitor.asm|4370||0|0|62796|T| +monitor.asm|4371||0|0|62797|T| +monitor.asm|4372||0|0|62798|T| +monitor.asm|4373||0|0|62801|T| +monitor.asm|4374||0|0|62802|T| +monitor.asm|4375||0|0|62803|T| +monitor.asm|4376||0|0|62804|T| +monitor.asm|4377||0|0|62805|T| +monitor.asm|4378||0|0|62808|F|MONITOR.dc_draw_4px_bc.l3 +monitor.asm|4378||0|0|62808|L|MONITOR,dc_draw_4px_bc,l3,+used +monitor.asm|4380||0|0|62808|T| +monitor.asm|4381||0|0|62809|T| +monitor.asm|4382||0|0|62810|T| +monitor.asm|4383||0|0|62811|T| +monitor.asm|4384||0|0|62812|T| +monitor.asm|4385||0|0|62813|T| +monitor.asm|4386||0|0|62814|T| +monitor.asm|4387||0|0|62815|T| +monitor.asm|4388||0|0|62818|T| +monitor.asm|4393||0|0|62819|F|MONITOR.dc_draw_4px_cb +monitor.asm|4393||0|0|62819|L|MONITOR,dc_draw_4px_cb,,+used +monitor.asm|4395||0|0|62819|T| +monitor.asm|4396||0|0|62820|T| +monitor.asm|4397||0|0|62821|T| +monitor.asm|4398||0|0|62824|T| +monitor.asm|4399||0|0|62825|T| +monitor.asm|4400||0|0|62826|T| +monitor.asm|4401||0|0|62827|T| +monitor.asm|4402||0|0|62828|T| +monitor.asm|4403||0|0|62831|F|MONITOR.dc_draw_4px_cb.l1 +monitor.asm|4403||0|0|62831|L|MONITOR,dc_draw_4px_cb,l1,+used +monitor.asm|4405||0|0|62831|T| +monitor.asm|4406||0|0|62832|T| +monitor.asm|4407||0|0|62833|T| +monitor.asm|4408||0|0|62836|T| +monitor.asm|4409||0|0|62837|T| +monitor.asm|4410||0|0|62838|T| +monitor.asm|4411||0|0|62839|T| +monitor.asm|4412||0|0|62840|T| +monitor.asm|4413||0|0|62843|F|MONITOR.dc_draw_4px_cb.l2 +monitor.asm|4413||0|0|62843|L|MONITOR,dc_draw_4px_cb,l2,+used +monitor.asm|4415||0|0|62843|T| +monitor.asm|4416||0|0|62844|T| +monitor.asm|4417||0|0|62845|T| +monitor.asm|4418||0|0|62848|T| +monitor.asm|4419||0|0|62849|T| +monitor.asm|4420||0|0|62850|T| +monitor.asm|4421||0|0|62851|T| +monitor.asm|4422||0|0|62852|T| +monitor.asm|4423||0|0|62855|F|MONITOR.l3 +monitor.asm|4423||0|0|62855|L|MONITOR,l3,,+used +monitor.asm|4425||0|0|62855|T| +monitor.asm|4426||0|0|62856|T| +monitor.asm|4427||0|0|62857|T| +monitor.asm|4428||0|0|62858|T| +monitor.asm|4429||0|0|62859|T| +monitor.asm|4430||0|0|62860|T| +monitor.asm|4431||0|0|62861|T| +monitor.asm|4432||0|0|62862|T| +monitor.asm|4433||0|0|62865|T| +monitor.asm|4439||0|0|62866|F|MONITOR.dc_put_pixel +monitor.asm|4439||0|0|62866|L|MONITOR,dc_put_pixel,,+used +monitor.asm|4440||0|0|62866|T| +monitor.asm|4441||0|0|62867|T| +monitor.asm|4442||0|0|62868|T| +monitor.asm|4443||0|0|62869|T| +monitor.asm|4445||0|0|62872|T| +monitor.asm|4446||0|0|62874|F|MONITOR.dc_put_pixel.roll +monitor.asm|4446||0|0|62874|L|MONITOR,dc_put_pixel,roll,+used +monitor.asm|4447||0|0|62874|T| +monitor.asm|4448||0|0|62875|T| +monitor.asm|4449||0|0|62876|T| +monitor.asm|4450||0|0|62879|T| +monitor.asm|4451||0|0|62880|T| +monitor.asm|4453||0|0|62881|T| +monitor.asm|4454||0|0|62882|T| +monitor.asm|4455||0|0|62885|T| +monitor.asm|4457||0|0|62886|T| +monitor.asm|4458||0|0|62888|T| +monitor.asm|4460||0|0|62890|T| +monitor.asm|4461||0|0|62891|T| +monitor.asm|4462||0|0|62892|T| +monitor.asm|4463||0|0|62893|T| +monitor.asm|4464||0|0|62894|T| +monitor.asm|4466||0|0|62895|T| +monitor.asm|4467||0|0|62896|T| +monitor.asm|4468||0|0|62897|T| +monitor.asm|4469||0|0|62898|T| +monitor.asm|4470||0|0|62899|T| +monitor.asm|4471||0|0|62900|T| +monitor.asm|4473||0|0|62901|T| +monitor.asm|4474||0|0|62903|T| +monitor.asm|4475||0|0|62905|T| +monitor.asm|4476||0|0|62906|T| +monitor.asm|4477||0|0|62907|T| +font-6x7.inc|2||0|0|62908|F|MONITOR.m_font_cp0 +font-6x7.inc|2||0|0|62908|L|MONITOR,m_font_cp0,,+used +font-6x7.inc|101||0|0|63580|F|MONITOR.m_font_cp1 +font-6x7.inc|101||0|0|63580|L|MONITOR,m_font_cp1, +monitor.asm|4485||0|0|64028|F|MONITOR.conv_nibble +monitor.asm|4485||0|0|64028|L|MONITOR,conv_nibble,,+used +monitor.asm|4486||0|0|64028|T| +monitor.asm|4487||0|0|64030|T| +monitor.asm|4488||0|0|64032|T| +monitor.asm|4489||0|0|64033|T| +monitor.asm|4490||0|0|64035|T| +monitor.asm|4491||0|0|64036|T| +monitor.asm|4492||0|0|64037|T| +monitor.asm|4498||0|0|64038|F|MONITOR.m_hexb +monitor.asm|4498||0|0|64038|L|MONITOR,m_hexb,,+used +monitor.asm|4499||0|0|64038|T| +monitor.asm|4500||0|0|64039|T| +monitor.asm|4501||0|0|64040|T| +monitor.asm|4502||0|0|64041|T| +monitor.asm|4503||0|0|64042|T| +monitor.asm|4504||0|0|64043|T| +monitor.asm|4505||0|0|64046|T| +monitor.asm|4507||0|0|64047|F|MONITOR.out_hex +monitor.asm|4507||0|0|64047|L|MONITOR,out_hex,,+used +monitor.asm|4508||0|0|64047|T| +monitor.asm|4509||0|0|64050|T| +monitor.asm|4510||0|0|64053|T| +monitor.asm|4515||0|0|64054|F|MONITOR.m_tape_write_ram2 +monitor.asm|4515||0|0|64054|L|MONITOR,m_tape_write_ram2,,+used +monitor.asm|4516||0|0|64054|T| +monitor.asm|4517||0|0|64057|T| +monitor.asm|4518||0|0|64059|F|MONITOR.m_tape_write_ram2.cl_stack +monitor.asm|4518||0|0|64059|L|MONITOR,m_tape_write_ram2,cl_stack,+used +monitor.asm|4519||0|0|64059|T| +monitor.asm|4520||0|0|64061|T| +monitor.asm|4521||0|0|64062|T| +monitor.asm|4522||0|0|64063|T| +monitor.asm|4523||0|0|64066|T| +monitor.asm|4524||0|0|64069|T| +monitor.asm|4528||0|0|64072|T| +monitor.asm|4529||0|0|64075|T| +monitor.asm|4530||0|0|64078|T| +monitor.asm|4531||0|0|64081|T| +monitor.asm|4532||0|0|64084|T| +monitor.asm|4533||0|0|64087|T| +monitor.asm|4534||0|0|64090|T| +monitor.asm|4535||0|0|64093|F|MONITOR.m_tape_write_ram2.nxt_blk +monitor.asm|4535||0|0|64093|L|MONITOR,m_tape_write_ram2,nxt_blk,+used +monitor.asm|4536||0|0|64093|T| +monitor.asm|4537||0|0|64094|T| +monitor.asm|4538||0|0|64097|T| +monitor.asm|4539||0|0|64100|T| +monitor.asm|4540||0|0|64101|T| +monitor.asm|4541||0|0|64104|T| +monitor.asm|4542||0|0|64107|T| +monitor.asm|4543||0|0|64108|T| +monitor.asm|4544||0|0|64109|T| +monitor.asm|4545||0|0|64110|T| +monitor.asm|4546||0|0|64111|T| +monitor.asm|4547||0|0|64114|T| +monitor.asm|4552||0|0|64115|F|MONITOR.twr2_delay +monitor.asm|4552||0|0|64115|L|MONITOR,twr2_delay,,+used +monitor.asm|4553||0|0|64115|T| +monitor.asm|4554||0|0|64118|F|MONITOR.twr2_delay.delay +monitor.asm|4554||0|0|64118|L|MONITOR,twr2_delay,delay,+used +monitor.asm|4555||0|0|64118|T| +monitor.asm|4556||0|0|64119|T| +monitor.asm|4557||0|0|64120|T| +monitor.asm|4558||0|0|64121|T| +monitor.asm|4559||0|0|64124|T| +monitor.asm|4564||0|0|64125|F|MONITOR.m_tape_read_ram2 +monitor.asm|4564||0|0|64125|L|MONITOR,m_tape_read_ram2,,+used +monitor.asm|4565||0|0|64125|T| +monitor.asm|4566||0|0|64127|T| +monitor.asm|4567||0|0|64130|T| +monitor.asm|4568||0|0|64131|T| +monitor.asm|4569||0|0|64134|T| +monitor.asm|4571||0|0|64136|F|MONITOR.m_tape_read_ram2.srch_first +monitor.asm|4571||0|0|64136|L|MONITOR,m_tape_read_ram2,srch_first,+used +monitor.asm|4572||0|0|64136|T| +monitor.asm|4573||0|0|64137|T| +monitor.asm|4575||0|0|64140|T| +monitor.asm|4576||0|0|64143|T| +monitor.asm|4577||0|0|64146|T| +monitor.asm|4578||0|0|64148|T| +monitor.asm|4579||0|0|64151|T| +monitor.asm|4580||0|0|64152|T| +monitor.asm|4581||0|0|64155|T| +monitor.asm|4582||0|0|64156|T| +monitor.asm|4583||0|0|64157|T| +monitor.asm|4585||0|0|64160|T| +monitor.asm|4586||0|0|64163|T| +monitor.asm|4588||0|0|64166|F|MONITOR.m_tape_read_ram2.rd_next +monitor.asm|4588||0|0|64166|L|MONITOR,m_tape_read_ram2,rd_next,+used +monitor.asm|4589||0|0|64166|T| +monitor.asm|4591||0|0|64167|T| +monitor.asm|4592||0|0|64170|T| +monitor.asm|4593||0|0|64171|T| +monitor.asm|4594||0|0|64174|T| +monitor.asm|4595||0|0|64175|T| +monitor.asm|4596||0|0|64176|T| +monitor.asm|4597||0|0|64177|T| +monitor.asm|4598||0|0|64180|T| +monitor.asm|4599||0|0|64181|T| +monitor.asm|4600||0|0|64182|T| +monitor.asm|4602||0|0|64185|T| +monitor.asm|4603||0|0|64188|T| +monitor.asm|4604||0|0|64189|T| +monitor.asm|4605||0|0|64190|T| +monitor.asm|4606||0|0|64191|T| +monitor.asm|4607||0|0|64192|T| +monitor.asm|4608||0|0|64193|T| +monitor.asm|4609||0|0|64196|T| +monitor.asm|4610||0|0|64197|F|MONITOR.m_tape_read_ram2.not_found +monitor.asm|4610||0|0|64197|L|MONITOR,m_tape_read_ram2,not_found,+used +monitor.asm|4611||0|0|64197|T| +monitor.asm|4612||0|0|64200|T| +monitor.asm|4613||0|0|64203|T| +monitor.asm|4614||0|0|64204|F|MONITOR.m_tape_read_ram2.rd_error +monitor.asm|4614||0|0|64204|L|MONITOR,m_tape_read_ram2,rd_error,+used +monitor.asm|4615||0|0|64204|T| +monitor.asm|4616||0|0|64206|T| +monitor.asm|4617||0|0|64209|T| +monitor.asm|4618||0|0|64211|T| +monitor.asm|4619||0|0|64214|T| +monitor.asm|4620||0|0|64217|T| +monitor.asm|4621||0|0|64220|T| +monitor.asm|4622||0|0|64223|T| +monitor.asm|4623||0|0|64224|T| +monitor.asm|4626||0|0|64225|F|MONITOR.m_tape_read_ram2.inv_id +monitor.asm|4626||0|0|64225|L|MONITOR,m_tape_read_ram2,inv_id,+used +monitor.asm|4627||0|0|64225|T| +monitor.asm|4628||0|0|64228|T| +monitor.asm|4629||0|0|64231|T| +monitor.asm|4630||0|0|64232|T| +monitor.asm|4631||0|0|64235|T| +monitor.asm|4632||0|0|64236|T| +monitor.asm|4634||0|0|64237|F|MONITOR.m_tape_read_ram2.err_ubi +monitor.asm|4634||0|0|64237|L|MONITOR,m_tape_read_ram2,err_ubi,+used +monitor.asm|4635||0|0|64237|T| +monitor.asm|4636||0|0|64240|T| +monitor.asm|4637||0|0|64243|T| +monitor.asm|4638||0|0|64244|T| +monitor.asm|4641||0|0|64245|F|MONITOR.m_tape_read_ram2.err_ibu +monitor.asm|4641||0|0|64245|L|MONITOR,m_tape_read_ram2,err_ibu,+used +monitor.asm|4642||0|0|64245|T| +monitor.asm|4643||0|0|64246|F|MONITOR.m_tape_read_ram2.end +monitor.asm|4643||0|0|64246|L|MONITOR,m_tape_read_ram2,end,+used +monitor.asm|4644||0|0|64246|T| +monitor.asm|4645||0|0|64249|T| +monitor.asm|4646||0|0|64252|T| +monitor.asm|4652||0|0|64253|F|MONITOR.out_hexw +monitor.asm|4652||0|0|64253|L|MONITOR,out_hexw,,+used +monitor.asm|4653||0|0|64253|T| +monitor.asm|4654||0|0|64254|T| +monitor.asm|4655||0|0|64255|T| +monitor.asm|4656||0|0|64258|T| +monitor.asm|4657||0|0|64259|T| +monitor.asm|4658||0|0|64260|T| +monitor.asm|4659||0|0|64263|T| +monitor.asm|4661||0|0|64264|F|MONITOR.msg_no_start_rec +monitor.asm|4661||0|0|64264|L|MONITOR,msg_no_start_rec,,+used +monitor.asm|4663||0|0|64280|F|MONITOR.msg_checksum +monitor.asm|4663||0|0|64280|L|MONITOR,msg_checksum,,+used +monitor.asm|4665||0|0|64290|F|MONITOR.msg_sequence +monitor.asm|4665||0|0|64290|L|MONITOR,msg_sequence,,+used +monitor.asm|4667||0|0|64300|F|MONITOR.msg_ibg +monitor.asm|4667||0|0|64300|L|MONITOR,msg_ibg,,+used +monitor.asm|4669||0|0|64304|F|MONITOR.msg_break +monitor.asm|4669||0|0|64304|L|MONITOR,msg_break,,+used +monitor.asm|4676||0|0|64310|F|MONITOR.me_out_strz +monitor.asm|4676||0|0|64310|L|MONITOR,me_out_strz,,+used +monitor.asm|4677||0|0|64310|T| +monitor.asm|4678||0|0|64311|T| +monitor.asm|4679||0|0|64312|T| +monitor.asm|4680||0|0|64313|T| +monitor.asm|4681||0|0|64314|T| +monitor.asm|4682||0|0|64315|T| +monitor.asm|4683||0|0|64318|T| +monitor.asm|4684||0|0|64319|T| +monitor.asm|4685||0|0|64320|T| +monitor.asm|4694||0|0|64323|F|MONITOR.m_ramdisk_read +monitor.asm|4694||0|0|64323|L|MONITOR,m_ramdisk_read,,+used +monitor.asm|4695||0|0|64323|T| +monitor.asm|4696||0|0|64324|T| +monitor.asm|4697||0|0|64325|T| +monitor.asm|4699||0|0|64326|T| +monitor.asm|4700||0|0|64328|T| +monitor.asm|4701||0|0|64330|T| +monitor.asm|4702||0|0|64332|T| +monitor.asm|4704||0|0|64333|T| +monitor.asm|4705||0|0|64334|T| +monitor.asm|4706||0|0|64335|T| +monitor.asm|4707||0|0|64336|T| +monitor.asm|4708||0|0|64337|T| +monitor.asm|4709||0|0|64339|T| +monitor.asm|4710||0|0|64340|T| +monitor.asm|4711||0|0|64341|F|MONITOR.m_ramdisk_read.read +monitor.asm|4711||0|0|64341|L|MONITOR,m_ramdisk_read,read,+used +monitor.asm|4713||0|0|64341|T| +monitor.asm|4714||0|0|64342|T| +monitor.asm|4716||0|0|64344|T| +monitor.asm|4717||0|0|64345|T| +monitor.asm|4719||0|0|64346|T| +monitor.asm|4720||0|0|64348|T| +monitor.asm|4722||0|0|64350|T| +monitor.asm|4724||0|0|64351|T| +monitor.asm|4725||0|0|64352|T| +monitor.asm|4726||0|0|64353|T| +monitor.asm|4727||0|0|64354|T| +monitor.asm|4728||0|0|64355|T| +monitor.asm|4731||0|0|64358|T| +monitor.asm|4732||0|0|64360|T| +monitor.asm|4734||0|0|64362|T| +monitor.asm|4735||0|0|64363|T| +monitor.asm|4736||0|0|64364|T| +monitor.asm|4743||0|0|64365|F|MONITOR.m_ramdisk_write +monitor.asm|4743||0|0|64365|L|MONITOR,m_ramdisk_write,,+used +monitor.asm|4744||0|0|64365|T| +monitor.asm|4745||0|0|64366|T| +monitor.asm|4746||0|0|64367|T| +monitor.asm|4747||0|0|64368|T| +monitor.asm|4748||0|0|64370|T| +monitor.asm|4749||0|0|64372|T| +monitor.asm|4750||0|0|64374|T| +monitor.asm|4751||0|0|64375|T| +monitor.asm|4752||0|0|64376|T| +monitor.asm|4753||0|0|64377|T| +monitor.asm|4754||0|0|64378|T| +monitor.asm|4755||0|0|64379|T| +monitor.asm|4756||0|0|64381|T| +monitor.asm|4757||0|0|64382|T| +monitor.asm|4758||0|0|64383|F|MONITOR.m_ramdisk_write.wr_byte +monitor.asm|4758||0|0|64383|L|MONITOR,m_ramdisk_write,wr_byte,+used +monitor.asm|4759||0|0|64383|T| +monitor.asm|4760||0|0|64385|T| +monitor.asm|4761||0|0|64387|T| +monitor.asm|4762||0|0|64388|T| +monitor.asm|4763||0|0|64389|T| +monitor.asm|4764||0|0|64391|T| +monitor.asm|4765||0|0|64392|T| +monitor.asm|4766||0|0|64393|T| +monitor.asm|4767||0|0|64394|T| +monitor.asm|4768||0|0|64395|T| +monitor.asm|4769||0|0|64396|T| +monitor.asm|4770||0|0|64397|T| +monitor.asm|4771||0|0|64400|T| +monitor.asm|4772||0|0|64402|T| +monitor.asm|4773||0|0|64404|T| +monitor.asm|4774||0|0|64405|T| +monitor.asm|4775||0|0|64406|T| +monitor.asm|4782||0|0|64407|F|MONITOR.m_tape_write +monitor.asm|4782||0|0|64407|L|MONITOR,m_tape_write,,+used +monitor.asm|4783||0|0|64407|T| +monitor.asm|4784||0|0|64408|T| +monitor.asm|4785||0|0|64409|T| +monitor.asm|4786||0|0|64410|T| +monitor.asm|4787||0|0|64413|T| +monitor.asm|4788||0|0|64415|T| +monitor.asm|4789||0|0|64417|T| +monitor.asm|4790||0|0|64419|T| +monitor.asm|4791||0|0|64421|T| +monitor.asm|4792||0|0|64422|T| +monitor.asm|4793||0|0|64424|T| +monitor.asm|4794||0|0|64425|T| +monitor.asm|4796||0|0|64427|T| +monitor.asm|4797||0|0|64430|F|MONITOR.m_tape_write.l1 +monitor.asm|4797||0|0|64430|L|MONITOR,m_tape_write,l1,+used +monitor.asm|4798||0|0|64430|T| +monitor.asm|4799||0|0|64432|T| +monitor.asm|4800||0|0|64434|T| +monitor.asm|4801||0|0|64437|T| +monitor.asm|4802||0|0|64438|T| +monitor.asm|4803||0|0|64439|T| +monitor.asm|4804||0|0|64440|T| +monitor.asm|4805||0|0|64441|T| +monitor.asm|4806||0|0|64443|T| +monitor.asm|4807||0|0|64446|T| +monitor.asm|4808||0|0|64448|F|MONITOR.m_tape_write.set_lvl +monitor.asm|4808||0|0|64448|L|MONITOR,m_tape_write,set_lvl,+used +monitor.asm|4809||0|0|64448|T| +monitor.asm|4810||0|0|64450|T| +monitor.asm|4812||0|0|64452|T| +monitor.asm|4813||0|0|64454|T| +monitor.asm|4814||0|0|64455|T| +monitor.asm|4815||0|0|64457|T| +monitor.asm|4816||0|0|64458|T| +monitor.asm|4817||0|0|64460|T| +monitor.asm|4818||0|0|64461|T| +monitor.asm|4820||0|0|64464|F|MONITOR.m_tape_write.l2 +monitor.asm|4820||0|0|64464|L|MONITOR,m_tape_write,l2,+used +monitor.asm|4821||0|0|64464|T| +monitor.asm|4822||0|0|64466|T| +monitor.asm|4823||0|0|64468|T| +monitor.asm|4826||0|0|64471|T| +monitor.asm|4827||0|0|64473|T| +monitor.asm|4829||0|0|64476|T| +monitor.asm|4830||0|0|64478|T| +monitor.asm|4831||0|0|64481|T| +monitor.asm|4833||0|0|64483|T| +monitor.asm|4834||0|0|64484|T| +monitor.asm|4835||0|0|64485|T| +monitor.asm|4836||0|0|64488|T| +monitor.asm|4837||0|0|64489|T| +monitor.asm|4839||0|0|64492|T| +monitor.asm|4840||0|0|64494|F|MONITOR.m_tape_write.next_byte +monitor.asm|4840||0|0|64494|L|MONITOR,m_tape_write,next_byte,+used +monitor.asm|4841||0|0|64494|T| +monitor.asm|4842||0|0|64495|T| +monitor.asm|4843||0|0|64498|T| +monitor.asm|4844||0|0|64499|T| +monitor.asm|4845||0|0|64500|T| +monitor.asm|4847||0|0|64503|T| +monitor.asm|4848||0|0|64504|T| +monitor.asm|4850||0|0|64507|T| +monitor.asm|4851||0|0|64509|T| +monitor.asm|4852||0|0|64512|F|MONITOR.m_tape_write.wait_end +monitor.asm|4852||0|0|64512|L|MONITOR,m_tape_write,wait_end,+used +monitor.asm|4853||0|0|64512|T| +monitor.asm|4854||0|0|64514|T| +monitor.asm|4855||0|0|64516|T| +monitor.asm|4856||0|0|64519|T| +monitor.asm|4857||0|0|64521|T| +monitor.asm|4858||0|0|64523|T| +monitor.asm|4859||0|0|64524|T| +monitor.asm|4860||0|0|64525|T| +monitor.asm|4869||0|0|64526|F|MONITOR.m_tape_wr_byte +monitor.asm|4869||0|0|64526|L|MONITOR,m_tape_wr_byte,,+used +monitor.asm|4870||0|0|64526|T| +monitor.asm|4872||0|0|64527|T| +monitor.asm|4873||0|0|64528|T| +monitor.asm|4874||0|0|64529|T| +monitor.asm|4875||0|0|64530|T| +monitor.asm|4876||0|0|64531|T| +monitor.asm|4877||0|0|64533|F|MONITOR.m_tape_wr_byte.get_bit +monitor.asm|4877||0|0|64533|L|MONITOR,m_tape_wr_byte,get_bit,+used +monitor.asm|4878||0|0|64533|T| +monitor.asm|4879||0|0|64534|T| +monitor.asm|4880||0|0|64535|T| +monitor.asm|4881||0|0|64536|T| +monitor.asm|4882||0|0|64539|F|MONITOR.m_tape_wr_byte.wait_t +monitor.asm|4882||0|0|64539|L|MONITOR,m_tape_wr_byte,wait_t,+used +monitor.asm|4883||0|0|64539|T| +monitor.asm|4884||0|0|64541|T| +monitor.asm|4885||0|0|64543|T| +monitor.asm|4886||0|0|64546|T| +monitor.asm|4887||0|0|64548|T| +monitor.asm|4889||0|0|64550|T| +monitor.asm|4890||0|0|64552|T| +monitor.asm|4891||0|0|64554|T| +monitor.asm|4892||0|0|64556|T| +monitor.asm|4894||0|0|64558|T| +monitor.asm|4895||0|0|64559|T| +monitor.asm|4896||0|0|64560|T| +monitor.asm|4897||0|0|64561|T| +monitor.asm|4898||0|0|64562|T| +monitor.asm|4899||0|0|64564|T| +monitor.asm|4900||0|0|64567|T| +monitor.asm|4901||0|0|64569|F|MONITOR.m_tape_wr_byte.out_bit +monitor.asm|4901||0|0|64569|L|MONITOR,m_tape_wr_byte,out_bit,+used +monitor.asm|4902||0|0|64569|T| +monitor.asm|4903||0|0|64571|T| +monitor.asm|4904||0|0|64572|T| +monitor.asm|4905||0|0|64575|T| +monitor.asm|4906||0|0|64576|T| +monitor.asm|4907||0|0|64577|F|MONITOR.m_tape_wr_byte.bit_hi +monitor.asm|4907||0|0|64577|L|MONITOR,m_tape_wr_byte,bit_hi,+used +monitor.asm|4908||0|0|64577|T| +monitor.asm|4909||0|0|64579|T| +monitor.asm|4910||0|0|64581|T| +monitor.asm|4912||0|0|64584|T| +monitor.asm|4913||0|0|64586|T| +monitor.asm|4914||0|0|64588|T| +monitor.asm|4915||0|0|64590|T| +monitor.asm|4916||0|0|64592|T| +monitor.asm|4917||0|0|64594|T| +monitor.asm|4919||0|0|64596|T| +monitor.asm|4920||0|0|64597|T| +monitor.asm|4921||0|0|64598|T| +monitor.asm|4922||0|0|64599|T| +monitor.asm|4923||0|0|64600|T| +monitor.asm|4924||0|0|64602|T| +monitor.asm|4925||0|0|64605|T| +monitor.asm|4926||0|0|64607|F|MONITOR.m_tape_wr_byte.out_bit_hi +monitor.asm|4926||0|0|64607|L|MONITOR,m_tape_wr_byte,out_bit_hi,+used +monitor.asm|4927||0|0|64607|T| +monitor.asm|4928||0|0|64609|T| +monitor.asm|4929||0|0|64610|T| +monitor.asm|4930||0|0|64613|T| +monitor.asm|4931||0|0|64614|T| +monitor.asm|4941||0|0|64615|F|MONITOR.m_tape_read +monitor.asm|4941||0|0|64615|L|MONITOR,m_tape_read,,+used +monitor.asm|4942||0|0|64615|T| +monitor.asm|4943||0|0|64616|T| +monitor.asm|4944||0|0|64617|T| +monitor.asm|4945||0|0|64619|T| +monitor.asm|4946||0|0|64621|T| +monitor.asm|4947||0|0|64623|T| +monitor.asm|4948||0|0|64625|T| +monitor.asm|4950||0|0|64627|T| +monitor.asm|4951||0|0|64629|T| +monitor.asm|4952||0|0|64631|T| +monitor.asm|4953||0|0|64633|F|MONITOR.m_tape_read.wait_3_changes +monitor.asm|4953||0|0|64633|L|MONITOR,m_tape_read,wait_3_changes,+used +monitor.asm|4954||0|0|64633|T| +monitor.asm|4955||0|0|64636|T| +monitor.asm|4956||0|0|64637|T| +monitor.asm|4957||0|0|64640|T| +monitor.asm|4958||0|0|64641|T| +monitor.asm|4959||0|0|64643|T| +monitor.asm|4960||0|0|64646|T| +monitor.asm|4961||0|0|64647|T| +monitor.asm|4962||0|0|64650|F|MONITOR.m_tape_read.wait_4th_change +monitor.asm|4962||0|0|64650|L|MONITOR,m_tape_read,wait_4th_change,+used +monitor.asm|4963||0|0|64650|T| +monitor.asm|4964||0|0|64653|T| +monitor.asm|4965||0|0|64654|T| +monitor.asm|4966||0|0|64657|T| +monitor.asm|4967||0|0|64658|T| +monitor.asm|4968||0|0|64660|T| +monitor.asm|4969||0|0|64663|T| +monitor.asm|4970||0|0|64665|F|MONITOR.m_tape_read.wait_f5_marker +monitor.asm|4970||0|0|64665|L|MONITOR,m_tape_read,wait_f5_marker,+used +monitor.asm|4971||0|0|64665|T| +monitor.asm|4972||0|0|64668|T| +monitor.asm|4973||0|0|64669|T| +monitor.asm|4974||0|0|64672|T| +monitor.asm|4975||0|0|64673|T| +monitor.asm|4976||0|0|64674|T| +monitor.asm|4977||0|0|64675|T| +monitor.asm|4978||0|0|64676|T| +monitor.asm|4979||0|0|64677|T| +monitor.asm|4980||0|0|64679|T| +monitor.asm|4981||0|0|64682|T| +monitor.asm|4983||0|0|64684|T| +monitor.asm|4984||0|0|64687|T| +monitor.asm|4985||0|0|64690|T| +monitor.asm|4986||0|0|64691|T| +monitor.asm|4987||0|0|64694|T| +monitor.asm|4988||0|0|64697|T| +monitor.asm|4989||0|0|64698|T| +monitor.asm|4991||0|0|64699|T| +monitor.asm|4992||0|0|64701|F|MONITOR.m_tape_read.read_next_b +monitor.asm|4992||0|0|64701|L|MONITOR,m_tape_read,read_next_b,+used +monitor.asm|4993||0|0|64701|T| +monitor.asm|4994||0|0|64704|T| +monitor.asm|4995||0|0|64707|T| +monitor.asm|4996||0|0|64708|T| +monitor.asm|4997||0|0|64709|T| +monitor.asm|4998||0|0|64710|T| +monitor.asm|5001||0|0|64713|T| +monitor.asm|5002||0|0|64716|T| +monitor.asm|5003||0|0|64719|T| +monitor.asm|5004||0|0|64720|T| +monitor.asm|5005||0|0|64721|T| +monitor.asm|5006||0|0|64724|T| +monitor.asm|5007||0|0|64726|F|MONITOR.m_tape_read.checksum_ok +monitor.asm|5007||0|0|64726|L|MONITOR,m_tape_read,checksum_ok,+used +monitor.asm|5008||0|0|64726|T| +monitor.asm|5009||0|0|64727|F|MONITOR.m_tape_read.return +monitor.asm|5009||0|0|64727|L|MONITOR,m_tape_read,return,+used +monitor.asm|5010||0|0|64727|T| +monitor.asm|5011||0|0|64728|T| +monitor.asm|5012||0|0|64729|T| +monitor.asm|5014||0|0|64730|F|MONITOR.m_tape_read.err_read_blk +monitor.asm|5014||0|0|64730|L|MONITOR,m_tape_read,err_read_blk,+used +monitor.asm|5015||0|0|64730|T| +monitor.asm|5016||0|0|64731|T| +monitor.asm|5017||0|0|64734|F|MONITOR.m_tape_read.err_read_id +monitor.asm|5017||0|0|64734|L|MONITOR,m_tape_read,err_read_id,+used +monitor.asm|5018||0|0|64734|T| +monitor.asm|5019||0|0|64736|T| +monitor.asm|5020||0|0|64739|F|MONITOR.m_tape_read.key_pressed +monitor.asm|5020||0|0|64739|L|MONITOR,m_tape_read,key_pressed,+used +monitor.asm|5021||0|0|64739|T| +monitor.asm|5022||0|0|64742|T| +monitor.asm|5023||0|0|64743|T| +monitor.asm|5024||0|0|64745|T| +monitor.asm|5025||0|0|64747|T| +monitor.asm|5032||0|0|64750|F|MONITOR.m_tape_read_byte +monitor.asm|5032||0|0|64750|L|MONITOR,m_tape_read_byte,,+used +monitor.asm|5033||0|0|64750|T| +monitor.asm|5034||0|0|64751|T| +monitor.asm|5035||0|0|64753|F|MONITOR.m_tape_read_byte.next_bit +monitor.asm|5035||0|0|64753|L|MONITOR,m_tape_read_byte,next_bit,+used +monitor.asm|5036||0|0|64753|T| +monitor.asm|5038||0|0|64756|T| +monitor.asm|5039||0|0|64757|T| +monitor.asm|5040||0|0|64758|T| +monitor.asm|5041||0|0|64759|T| +monitor.asm|5042||0|0|64760|T| +monitor.asm|5043||0|0|64762|T| +monitor.asm|5044||0|0|64763|T| +monitor.asm|5045||0|0|64766|T| +monitor.asm|5046||0|0|64767|T| +monitor.asm|5048||0|0|64770|T| +monitor.asm|5049||0|0|64771|T| +monitor.asm|5050||0|0|64772|T| +monitor.asm|5051||0|0|64773|T| +monitor.asm|5052||0|0|64774|F|MONITOR.m_tape_read_byte.ret_err +monitor.asm|5052||0|0|64774|L|MONITOR,m_tape_read_byte,ret_err,+used +monitor.asm|5053||0|0|64774|T| +monitor.asm|5054||0|0|64775|T| +monitor.asm|5061||0|0|64776|F|MONITOR.m_read_tape_bit +monitor.asm|5061||0|0|64776|L|MONITOR,m_read_tape_bit,,+used +monitor.asm|5062||0|0|64776|T| +monitor.asm|5063||0|0|64778|T| +monitor.asm|5064||0|0|64780|T| +monitor.asm|5065||0|0|64781|F|MONITOR.m_read_tape_bit.wait_change +monitor.asm|5065||0|0|64781|L|MONITOR,m_read_tape_bit,wait_change,+used +monitor.asm|5066||0|0|64781|T| +monitor.asm|5067||0|0|64783|T| +monitor.asm|5068||0|0|64785|T| +monitor.asm|5069||0|0|64786|T| +monitor.asm|5070||0|0|64789|T| +monitor.asm|5071||0|0|64791|T| +monitor.asm|5073||0|0|64793|T| +monitor.asm|5074||0|0|64795|T| +monitor.asm|5075||0|0|64797|T| +monitor.asm|5076||0|0|64799|T| +monitor.asm|5077||0|0|64800|T| +monitor.asm|5079||0|0|64802|T| +monitor.asm|5080||0|0|64804|T| +monitor.asm|5081||0|0|64806|T| +monitor.asm|5084||0|0|64808|T| +monitor.asm|5085||0|0|64809|T| +monitor.asm|5086||0|0|64810|T| +monitor.asm|5093||0|0|64811|F|MONITOR.read_tape_bit_kbd +monitor.asm|5093||0|0|64811|L|MONITOR,read_tape_bit_kbd,,+used +monitor.asm|5094||0|0|64811|T| +monitor.asm|5095||0|0|64813|T| +monitor.asm|5096||0|0|64815|T| +monitor.asm|5098||0|0|64816|F|MONITOR.read_tape_bit_kbd.wait_change +monitor.asm|5098||0|0|64816|L|MONITOR,read_tape_bit_kbd,wait_change,+used +monitor.asm|5099||0|0|64816|T| +monitor.asm|5100||0|0|64818|T| +monitor.asm|5101||0|0|64820|T| +monitor.asm|5102||0|0|64823|T| +monitor.asm|5103||0|0|64825|T| +monitor.asm|5104||0|0|64827|T| +monitor.asm|5105||0|0|64828|T| +monitor.asm|5107||0|0|64831|T| +monitor.asm|5108||0|0|64833|T| +monitor.asm|5110||0|0|64835|T| +monitor.asm|5111||0|0|64837|T| +monitor.asm|5112||0|0|64839|T| +monitor.asm|5113||0|0|64841|T| +monitor.asm|5114||0|0|64842|T| +monitor.asm|5116||0|0|64844|T| +monitor.asm|5117||0|0|64846|T| +monitor.asm|5118||0|0|64848|T| +monitor.asm|5120||0|0|64850|T| +monitor.asm|5121||0|0|64851|T| +monitor.asm|5122||0|0|64852|T| +monitor.asm|5123||0|0|64853|F|MONITOR.read_tape_bit_kbd.key_pressed +monitor.asm|5123||0|0|64853|L|MONITOR,read_tape_bit_kbd,key_pressed,+used +monitor.asm|5124||0|0|64853|T| +monitor.asm|5125||0|0|64855|T| +monitor.asm|5132||0|0|64856|F|MONITOR.m_tape_wait +monitor.asm|5132||0|0|64856|L|MONITOR,m_tape_wait,,+used +monitor.asm|5133||0|0|64856|T| +monitor.asm|5134||0|0|64857|T| +monitor.asm|5135||0|0|64858|T| +monitor.asm|5136||0|0|64859|T| +monitor.asm|5137||0|0|64860|F|MONITOR.m_tape_wait.wait_t4 +monitor.asm|5137||0|0|64860|L|MONITOR,m_tape_wait,wait_t4,+used +monitor.asm|5138||0|0|64860|T| +monitor.asm|5139||0|0|64861|T| +monitor.asm|5140||0|0|64863|T| +monitor.asm|5141||0|0|64865|T| +monitor.asm|5142||0|0|64866|F|MONITOR.m_tape_wait.wait_next_2ms +monitor.asm|5142||0|0|64866|L|MONITOR,m_tape_wait,wait_next_2ms,+used +monitor.asm|5143||0|0|64866|T| +monitor.asm|5144||0|0|64868|T| +monitor.asm|5146||0|0|64870|T| +monitor.asm|5147||0|0|64871|T| +monitor.asm|5148||0|0|64873|T| +monitor.asm|5149||0|0|64875|T| +monitor.asm|5150||0|0|64877|F|MONITOR.m_tape_wait.wait_tmr_key +monitor.asm|5150||0|0|64877|L|MONITOR,m_tape_wait,wait_tmr_key,+used +monitor.asm|5151||0|0|64877|T| +monitor.asm|5152||0|0|64879|T| +monitor.asm|5153||0|0|64881|T| +monitor.asm|5154||0|0|64884|T| +monitor.asm|5155||0|0|64886|T| +monitor.asm|5156||0|0|64888|T| +monitor.asm|5157||0|0|64891|T| +monitor.asm|5158||0|0|64893|T| +monitor.asm|5159||0|0|64895|T| +monitor.asm|5160||0|0|64896|T| +monitor.asm|5161||0|0|64899|T| +monitor.asm|5162||0|0|64902|F|MONITOR.m_tape_wait.wait_no_rst4 +monitor.asm|5162||0|0|64902|L|MONITOR,m_tape_wait,wait_no_rst4,+used +monitor.asm|5163||0|0|64902|T| +monitor.asm|5164||0|0|64903|T| +monitor.asm|5165||0|0|64906|T| +monitor.asm|5166||0|0|64907|T| +monitor.asm|5167||0|0|64908|T| +monitor.asm|5169||0|0|64909|F|MONITOR.m_tape_wait.key_pressed +monitor.asm|5169||0|0|64909|L|MONITOR,m_tape_wait,key_pressed,+used +monitor.asm|5170||0|0|64909|T| +monitor.asm|5171||0|0|64912|T| +monitor.asm|5172||0|0|64913|T| +monitor.asm|5173||0|0|64915|T| +monitor.asm|5174||0|0|64916|T| +monitor.asm|5180||0|0|64917|F|MONITOR.m_tape_blk_detect +monitor.asm|5180||0|0|64917|L|MONITOR,m_tape_blk_detect,,+used +monitor.asm|5181||0|0|64917|T| +monitor.asm|5182||0|0|64919|T| +monitor.asm|5183||0|0|64921|T| +monitor.asm|5184||0|0|64923|T| +monitor.asm|5185||0|0|64924|T| +monitor.asm|5186||0|0|64925|T| +monitor.asm|5198||0|0|64926|F|MONITOR.floppy_init +monitor.asm|5198||0|0|64926|L|MONITOR,floppy_init,,+used +monitor.asm|5200||0|0|64926|T| +monitor.asm|5201||0|0|64928|T| +monitor.asm|5203||0|0|64930|T| +monitor.asm|5204||0|0|64932|T| +monitor.asm|5206||0|0|64934|T| +monitor.asm|5207||0|0|64935|T| +monitor.asm|5209||0|0|64936|F|MONITOR.floppy_init.wait_no_busy +monitor.asm|5209||0|0|64936|L|MONITOR,floppy_init,wait_no_busy,+used +monitor.asm|5210||0|0|64936|T| +monitor.asm|5211||0|0|64938|T| +monitor.asm|5212||0|0|64940|T| +monitor.asm|5213||0|0|64942|T| +monitor.asm|5215||0|0|64945|T| +monitor.asm|5216||0|0|64947|T| +monitor.asm|5217||0|0|64948|T| +monitor.asm|5219||0|0|64951|T| +monitor.asm|5220||0|0|64953|T| +monitor.asm|5224||0|0|64954|F|MONITOR.floppy_init.tr0_ok +monitor.asm|5224||0|0|64954|L|MONITOR,floppy_init,tr0_ok,+used +monitor.asm|5225||0|0|64954|T| +monitor.asm|5226||0|0|64955|T| +monitor.asm|5227||0|0|64956|T| +monitor.asm|5228||0|0|64958|T| +monitor.asm|5229||0|0|64961|T| +monitor.asm|5230||0|0|64964|T| +monitor.asm|5231||0|0|64965|T| +monitor.asm|5232||0|0|64968|T| +monitor.asm|5234||0|0|64969|F|MONITOR.floppy_init.b1 +monitor.asm|5234||0|0|64969|L|MONITOR,floppy_init,b1,+used +monitor.asm|5235||0|0|64969|T| +monitor.asm|5236||0|0|64972|T| +monitor.asm|5237||0|0|64973|T| +monitor.asm|5238||0|0|64976|T| +monitor.asm|5245||0|0|64977|F|MONITOR.m_select_drive +monitor.asm|5245||0|0|64977|L|MONITOR,m_select_drive,,+used +monitor.asm|5246||0|0|64977|T| +monitor.asm|5247||0|0|64978|T| +monitor.asm|5248||0|0|64981|T| +monitor.asm|5249||0|0|64983|T| +monitor.asm|5250||0|0|64986|T| +monitor.asm|5251||0|0|64988|T| +monitor.asm|5252||0|0|64991|F|MONITOR.m_select_drive.sel_b +monitor.asm|5252||0|0|64991|L|MONITOR,m_select_drive,sel_b,+used +monitor.asm|5253||0|0|64991|T| +monitor.asm|5254||0|0|64993|F|MONITOR.m_select_drive.sel_c +monitor.asm|5254||0|0|64993|L|MONITOR,m_select_drive,sel_c,+used +monitor.asm|5255||0|0|64993|T| +monitor.asm|5256||0|0|64994|T| +monitor.asm|5257||0|0|64996|T| +monitor.asm|5258||0|0|64998|T| +monitor.asm|5259||0|0|64999|T| +monitor.asm|5260||0|0|65000|T| +monitor.asm|5261||0|0|65002|T| +monitor.asm|5262||0|0|65003|T| +monitor.asm|5264||0|0|65004|T| +monitor.asm|5265||0|0|65005|T| +monitor.asm|5266||0|0|65008|T| +monitor.asm|5267||0|0|65011|T| +monitor.asm|5268||0|0|65014|F|MONITOR.m_select_drive.side_b +monitor.asm|5268||0|0|65014|L|MONITOR,m_select_drive,side_b,+used +monitor.asm|5269||0|0|65014|T| +monitor.asm|5270||0|0|65017|F|MONITOR.m_select_drive.side_c +monitor.asm|5270||0|0|65017|L|MONITOR,m_select_drive,side_c,+used +monitor.asm|5271||0|0|65017|T| +monitor.asm|5272||0|0|65018|T| +monitor.asm|5273||0|0|65019|T| +monitor.asm|5274||0|0|65020|T| +monitor.asm|5275||0|0|65021|T| +monitor.asm|5276||0|0|65024|T| +monitor.asm|5277||0|0|65025|T| +monitor.asm|5278||0|0|65026|T| +monitor.asm|5280||0|0|65027|T| +monitor.asm|5281||0|0|65028|T| +monitor.asm|5282||0|0|65030|T| +monitor.asm|5284||0|0|65031|T| +monitor.asm|5286||0|0|65032|T| +monitor.asm|5287||0|0|65034|T| +monitor.asm|5289||0|0|65035|T| +monitor.asm|5291||0|0|65036|T| +monitor.asm|5292||0|0|65037|T| +monitor.asm|5293||0|0|65039|T| +monitor.asm|5294||0|0|65041|T| +monitor.asm|5295||0|0|65044|T| +monitor.asm|5296||0|0|65045|F|MONITOR.m_select_drive.side_0 +monitor.asm|5296||0|0|65045|L|MONITOR,m_select_drive,side_0,+used +monitor.asm|5297||0|0|65045|T| +monitor.asm|5299||0|0|65046|T| +monitor.asm|5301||0|0|65047|T| +monitor.asm|5302||0|0|65049|T| +monitor.asm|5304||0|0|65050|T| +monitor.asm|5306||0|0|65051|T| +monitor.asm|5308||0|0|65052|T| +monitor.asm|5309||0|0|65054|T| +monitor.asm|5310||0|0|65056|T| +monitor.asm|5311||0|0|65059|T| +monitor.asm|5316||0|0|65060|F|MONITOR.delay_136uS +monitor.asm|5316||0|0|65060|L|MONITOR,delay_136uS,,+used +monitor.asm|5317||0|0|65060|T| +monitor.asm|5322||0|0|65062|F|MONITOR.delay_b +monitor.asm|5322||0|0|65062|L|MONITOR,delay_b,,+used +monitor.asm|5323||0|0|65062|T| +monitor.asm|5324||0|0|65063|T| +monitor.asm|5325||0|0|65066|T| +monitor.asm|5330||0|0|65067|F|MONITOR.delay_1.4mS +monitor.asm|5330||0|0|65067|L|MONITOR,delay_1.4mS,,+used +monitor.asm|5331||0|0|65067|T| +monitor.asm|5332||0|0|65069|T| +monitor.asm|5337||0|0|65072|F|MONITOR.m_read_floppy +monitor.asm|5337||0|0|65072|L|MONITOR,m_read_floppy,,+used +monitor.asm|5338||0|0|65072|T| +monitor.asm|5339||0|0|65073|T| +monitor.asm|5340||0|0|65076|T| +monitor.asm|5341||0|0|65077|T| +monitor.asm|5342||0|0|65080|T| +monitor.asm|5343||0|0|65083|T| +monitor.asm|5344||0|0|65086|T| +monitor.asm|5345||0|0|65089|T| +monitor.asm|5346||0|0|65090|T| +monitor.asm|5353||0|0|65091|F|MONITOR.m_write_floppy +monitor.asm|5353||0|0|65091|L|MONITOR,m_write_floppy,,+used +monitor.asm|5354||0|0|65091|T| +monitor.asm|5355||0|0|65092|T| +monitor.asm|5356||0|0|65095|T| +monitor.asm|5357||0|0|65096|T| +monitor.asm|5358||0|0|65099|T| +monitor.asm|5359||0|0|65102|T| +monitor.asm|5360||0|0|65105|T| +monitor.asm|5361||0|0|65108|T| +monitor.asm|5362||0|0|65109|T| +monitor.asm|5370||0|0|65110|F|MONITOR.m_start_seek_track +monitor.asm|5370||0|0|65110|L|MONITOR,m_start_seek_track,,+used +monitor.asm|5371||0|0|65110|T| +monitor.asm|5372||0|0|65113|T| +monitor.asm|5373||0|0|65114|T| +monitor.asm|5374||0|0|65117|T| +monitor.asm|5375||0|0|65118|T| +monitor.asm|5382||0|0|65119|F|MONITOR.m_start_floppy +monitor.asm|5382||0|0|65119|L|MONITOR,m_start_floppy,,+used +monitor.asm|5383||0|0|65119|T| +monitor.asm|5384||0|0|65120|T| +monitor.asm|5385||0|0|65123|T| +monitor.asm|5386||0|0|65124|T| +monitor.asm|5387||0|0|65127|T| +monitor.asm|5388||0|0|65130|T| +monitor.asm|5390||0|0|65131|F|MONITOR.m_start_floppy.need_m_start +monitor.asm|5390||0|0|65131|L|MONITOR,m_start_floppy,need_m_start,+used +monitor.asm|5391||0|0|65131|T| +monitor.asm|5392||0|0|65133|T| +monitor.asm|5393||0|0|65134|T| +monitor.asm|5394||0|0|65137|T| +monitor.asm|5395||0|0|65139|T| +monitor.asm|5396||0|0|65141|T| +monitor.asm|5398||0|0|65142|F|MONITOR.m_start_floppy.wait_motor +monitor.asm|5398||0|0|65142|L|MONITOR,m_start_floppy,wait_motor,+used +monitor.asm|5399||0|0|65142|T| +monitor.asm|5400||0|0|65143|T| +monitor.asm|5401||0|0|65146|T| +monitor.asm|5403||0|0|65149|F|MONITOR.m_start_floppy.wait_rdy1 +monitor.asm|5403||0|0|65149|L|MONITOR,m_start_floppy,wait_rdy1,+used +monitor.asm|5404||0|0|65149|T| +monitor.asm|5405||0|0|65151|T| +monitor.asm|5407||0|0|65153|T| +monitor.asm|5410||0|0|65156|T| +monitor.asm|5411||0|0|65158|T| +monitor.asm|5412||0|0|65159|T| +monitor.asm|5414||0|0|65162|T| +monitor.asm|5415||0|0|65164|T| +monitor.asm|5417||0|0|65167|F|MONITOR.m_start_floppy.stop_wait +monitor.asm|5417||0|0|65167|L|MONITOR,m_start_floppy,stop_wait,+used +monitor.asm|5419||0|0|65167|F|MONITOR.m_start_floppy.long_delay +monitor.asm|5419||0|0|65167|L|MONITOR,m_start_floppy,long_delay,+used +monitor.asm|5420||0|0|65167|T| +monitor.asm|5421||0|0|65168|T| +monitor.asm|5422||0|0|65169|T| +monitor.asm|5423||0|0|65170|T| +monitor.asm|5425||0|0|65173|F|MONITOR.m_start_floppy.exit +monitor.asm|5425||0|0|65173|L|MONITOR,m_start_floppy,exit,+used +monitor.asm|5426||0|0|65173|T| +monitor.asm|5427||0|0|65174|T| +monitor.asm|5432||0|0|65175|F|MONITOR.fdc_init +monitor.asm|5432||0|0|65175|L|MONITOR,fdc_init,,+used +monitor.asm|5434||0|0|65175|T| +monitor.asm|5435||0|0|65177|T| +monitor.asm|5436||0|0|65179|T| +monitor.asm|5437||0|0|65180|T| +monitor.asm|5439||0|0|65182|T| +monitor.asm|5441||0|0|65184|T| +monitor.asm|5442||0|0|65186|T| +monitor.asm|5449||0|0|65187|F|MONITOR.m_fdc_seek_trk +monitor.asm|5449||0|0|65187|L|MONITOR,m_fdc_seek_trk,,+used +monitor.asm|5450||0|0|65187|T| +monitor.asm|5451||0|0|65188|T| +monitor.asm|5452||0|0|65189|T| +monitor.asm|5454||0|0|65192|T| +monitor.asm|5455||0|0|65195|T| +monitor.asm|5456||0|0|65196|T| +monitor.asm|5458||0|0|65199|T| +monitor.asm|5460||0|0|65200|T| +monitor.asm|5461||0|0|65203|T| +monitor.asm|5463||0|0|65205|T| +monitor.asm|5464||0|0|65206|T| +monitor.asm|5465||0|0|65209|T| +monitor.asm|5466||0|0|65212|F|MONITOR.m_fdc_seek_trk.drv_c +monitor.asm|5466||0|0|65212|L|MONITOR,m_fdc_seek_trk,drv_c,+used +monitor.asm|5467||0|0|65212|T| +monitor.asm|5468||0|0|65215|T| +monitor.asm|5469||0|0|65216|T| +monitor.asm|5470||0|0|65219|T| +monitor.asm|5471||0|0|65220|T| +monitor.asm|5472||0|0|65223|T| +monitor.asm|5473||0|0|65225|T| +monitor.asm|5475||0|0|65226|F|MONITOR.m_fdc_seek_trk.cmn +monitor.asm|5475||0|0|65226|L|MONITOR,m_fdc_seek_trk,cmn,+used +monitor.asm|5476||0|0|65226|T| +monitor.asm|5477||0|0|65229|T| +monitor.asm|5478||0|0|65230|T| +monitor.asm|5480||0|0|65231|T| +monitor.asm|5482||0|0|65234|T| +monitor.asm|5484||0|0|65237|T| +monitor.asm|5485||0|0|65239|T| +monitor.asm|5486||0|0|65240|T| +monitor.asm|5488||0|0|65243|T| +monitor.asm|5490||0|0|65246|T| +monitor.asm|5491||0|0|65249|T| +monitor.asm|5492||0|0|65250|T| +monitor.asm|5493||0|0|65253|T| +monitor.asm|5494||0|0|65255|T| +monitor.asm|5495||0|0|65258|T| +monitor.asm|5496||0|0|65260|T| +monitor.asm|5497||0|0|65263|T| +monitor.asm|5498||0|0|65266|F|MONITOR.m_fdc_seek_trk.l1 +monitor.asm|5498||0|0|65266|L|MONITOR,m_fdc_seek_trk,l1,+used +monitor.asm|5500||0|0|65266|T| +monitor.asm|5501||0|0|65269|T| +monitor.asm|5502||0|0|65270|T| +monitor.asm|5503||0|0|65273|T| +monitor.asm|5504||0|0|65275|T| +monitor.asm|5505||0|0|65278|T| +monitor.asm|5506||0|0|65280|T| +monitor.asm|5507||0|0|65283|F|MONITOR.m_fdc_seek_trk.set_track +monitor.asm|5507||0|0|65283|L|MONITOR,m_fdc_seek_trk,set_track,+used +monitor.asm|5509||0|0|65283|T| +monitor.asm|5510||0|0|65284|T| +monitor.asm|5512||0|0|65286|T| +monitor.asm|5513||0|0|65288|T| +monitor.asm|5515||0|0|65290|T| +monitor.asm|5516||0|0|65291|T| +monitor.asm|5518||0|0|65292|T| +monitor.asm|5519||0|0|65294|T| +monitor.asm|5520||0|0|65296|T| +monitor.asm|5521||0|0|65298|T| +monitor.asm|5522||0|0|65300|T| +monitor.asm|5523||0|0|65303|T| +monitor.asm|5524||0|0|65306|F|MONITOR.m_fdc_seek_trk.seek_errs +monitor.asm|5524||0|0|65306|L|MONITOR,m_fdc_seek_trk,seek_errs,+used +monitor.asm|5525||0|0|65306|T| +monitor.asm|5526||0|0|65307|T| +monitor.asm|5527||0|0|65309|F|MONITOR.m_fdc_seek_trk.seek_ok +monitor.asm|5527||0|0|65309|L|MONITOR,m_fdc_seek_trk,seek_ok,+used +monitor.asm|5528||0|0|65309|T| +monitor.asm|5529||0|0|65310|T| +monitor.asm|5530||0|0|65311|T| +monitor.asm|5531||0|0|65313|T| +monitor.asm|5532||0|0|65314|T| +monitor.asm|5539||0|0|65315|F|MONITOR.m_fdc_write_bytes +monitor.asm|5539||0|0|65315|L|MONITOR,m_fdc_write_bytes,,+used +monitor.asm|5541||0|0|65315|T| +monitor.asm|5542||0|0|65316|T| +monitor.asm|5543||0|0|65318|F|MONITOR.m_fdc_write_bytes.w_next +monitor.asm|5543||0|0|65318|L|MONITOR,m_fdc_write_bytes,w_next,+used +monitor.asm|5545||0|0|65318|T| +monitor.asm|5546||0|0|65320|T| +monitor.asm|5548||0|0|65321|T| +monitor.asm|5549||0|0|65322|T| +monitor.asm|5550||0|0|65324|T| +monitor.asm|5552||0|0|65325|T| +monitor.asm|5554||0|0|65328|T| +monitor.asm|5555||0|0|65331|T| +monitor.asm|5562||0|0|65332|F|MONITOR.m_fdc_read_c_bytes +monitor.asm|5562||0|0|65332|L|MONITOR,m_fdc_read_c_bytes,,+used +monitor.asm|5564||0|0|65332|T| +monitor.asm|5565||0|0|65333|T| +monitor.asm|5566||0|0|65335|T| +monitor.asm|5567||0|0|65338|F|MONITOR.m_fdc_read_c_bytes.read_next +monitor.asm|5567||0|0|65338|L|MONITOR,m_fdc_read_c_bytes,read_next,+used +monitor.asm|5569||0|0|65338|T| +monitor.asm|5570||0|0|65339|T| +monitor.asm|5571||0|0|65340|F|MONITOR.m_fdc_read_c_bytes.get_drq +monitor.asm|5571||0|0|65340|L|MONITOR,m_fdc_read_c_bytes,get_drq,+used +monitor.asm|5573||0|0|65340|T| +monitor.asm|5574||0|0|65342|T| +monitor.asm|5576||0|0|65343|T| +monitor.asm|5577||0|0|65345|T| +monitor.asm|5578||0|0|65348|T| +monitor.asm|5579||0|0|65351|T| +monitor.asm|5585||0|0|65352|F|MONITOR.fdc_check_status +monitor.asm|5585||0|0|65352|L|MONITOR,fdc_check_status,,+used +monitor.asm|5587||0|0|65352|T| +monitor.asm|5589||0|0|65354|T| +monitor.asm|5590||0|0|65356|T| +monitor.asm|5591||0|0|65358|T| +monitor.asm|5593||0|0|65361|T| +monitor.asm|5594||0|0|65362|F|MONITOR.fdc_ret +monitor.asm|5594||0|0|65362|L|MONITOR,fdc_ret,,+used +monitor.asm|5595||0|0|65362|T| +monitor.asm|5597||0|0|65363|F|MONITOR.filler1 +monitor.asm|5597||0|0|65363|L|MONITOR,filler1, +monitor.asm|5605||0|-1|65364|D|MONITOR.LAST +monitor.asm|5605||0|-1|65364|L|MONITOR,LAST,,+equ,+used +monitor.asm|5606||0|-1|8020|D|MONITOR.CODE_SIZE +monitor.asm|5606||0|-1|8020|L|MONITOR,CODE_SIZE,,+equ,+used +monitor.asm|5607||0|-1|172|D|MONITOR.FILL_SIZE +monitor.asm|5607||0|-1|172|L|MONITOR,FILL_SIZE,,+equ,+used +monitor.asm|5660||0|0|65364|F|MONITOR.FILLER +monitor.asm|5660||0|0|65364|L|MONITOR,FILLER, +monitor.asm|5664||0|-1|65536|L|MONITOR,,,+endmod +m_vars.inc|12||0|-1|65536|L|M_VARS,,,+module +m_vars.inc|15||0|0|48896|F|M_VARS.buffer +m_vars.inc|15||0|0|48896|L|M_VARS,buffer,,+used +m_vars.inc|17||0|-1|49060|D|M_VARS.paint_stack +m_vars.inc|17||0|-1|49060|L|M_VARS,paint_stack,,+equ,+used +m_vars.inc|19||0|-1|49092|D|M_VARS.stack1 +m_vars.inc|19||0|-1|49092|L|M_VARS,stack1,,+equ,+used +m_vars.inc|21||0|0|49093|F|M_VARS.paint_var1 +m_vars.inc|21||0|0|49093|L|M_VARS,paint_var1,,+used +m_vars.inc|22||0|0|49094|F|M_VARS.paint_var2 +m_vars.inc|22||0|0|49094|L|M_VARS,paint_var2,,+used +m_vars.inc|23||0|0|49095|F|M_VARS.paint_var3 +m_vars.inc|23||0|0|49095|L|M_VARS,paint_var3,,+used +m_vars.inc|24||0|0|49096|F|M_VARS.paint_var4 +m_vars.inc|24||0|0|49096|L|M_VARS,paint_var4,,+used +m_vars.inc|25||0|0|49097|F|M_VARS.paint_var5 +m_vars.inc|25||0|0|49097|L|M_VARS,paint_var5,,+used +m_vars.inc|26||0|0|49098|F|M_VARS.paint_y +m_vars.inc|26||0|0|49098|L|M_VARS,paint_y,,+used +m_vars.inc|27||0|0|49099|F|M_VARS.paint_var7 +m_vars.inc|27||0|0|49099|L|M_VARS,paint_var7,,+used +m_vars.inc|28||0|0|49100|F|M_VARS.cmp_color +m_vars.inc|28||0|0|49100|L|M_VARS,cmp_color,,+used +m_vars.inc|29||0|0|49101|F|M_VARS.paint_sp_save +m_vars.inc|29||0|0|49101|L|M_VARS,paint_sp_save,,+used +m_vars.inc|32||0|0|49103|F|M_VARS.pixel_mask_r +m_vars.inc|32||0|0|49103|L|M_VARS,pixel_mask_r,,+used +m_vars.inc|33||0|0|49104|F|M_VARS.tmp_color +m_vars.inc|33||0|0|49104|L|M_VARS,tmp_color,,+used +m_vars.inc|34||0|0|49105|F|M_VARS.rect_var2 +m_vars.inc|34||0|0|49105|L|M_VARS,rect_var2, +m_vars.inc|35||0|-1|49106|D|M_VARS.stack_0 +m_vars.inc|35||0|-1|49106|L|M_VARS,stack_0,,+equ,+used +m_vars.inc|36||0|0|49106|F|M_VARS.rect_var3 +m_vars.inc|36||0|0|49106|L|M_VARS,rect_var3, +m_vars.inc|37||0|0|49107|F|M_VARS.esc_mode +m_vars.inc|37||0|0|49107|L|M_VARS,esc_mode,,+used +m_vars.inc|38||0|0|49108|F|M_VARS.esc_cmd +m_vars.inc|38||0|0|49108|L|M_VARS,esc_cmd,,+used +m_vars.inc|40||0|0|49109|F|M_VARS.esc_param_cnt +m_vars.inc|40||0|0|49109|L|M_VARS,esc_param_cnt, +m_vars.inc|41||0|0|49110|F|M_VARS.esc_param +m_vars.inc|41||0|0|49110|L|M_VARS,esc_param,,+used +m_vars.inc|44||0|0|49117|F|M_VARS.pixel_mask_l_i +m_vars.inc|44||0|0|49117|L|M_VARS,pixel_mask_l_i,,+used +m_vars.inc|46||0|0|49118|F|M_VARS.pixel_mask_r_i +m_vars.inc|46||0|0|49118|L|M_VARS,pixel_mask_r_i,,+used +m_vars.inc|48||0|0|49119|F|M_VARS.pixel_mask_l +m_vars.inc|48||0|0|49119|L|M_VARS,pixel_mask_l,,+used +m_vars.inc|51||0|0|49120|F|M_VARS.screen_mode +m_vars.inc|51||0|0|49120|L|M_VARS,screen_mode,,+used +m_vars.inc|52||0|0|49121|F|M_VARS.cursor_pos +m_vars.inc|52||0|0|49121|L|M_VARS,cursor_pos, +m_vars.inc|53||0|0|49121|F|M_VARS.cursor_row +m_vars.inc|53||0|0|49121|L|M_VARS,cursor_row,,+used +m_vars.inc|54||0|0|49122|F|M_VARS.cursor_col +m_vars.inc|54||0|0|49122|L|M_VARS,cursor_col,,+used +m_vars.inc|55||0|0|49123|F|M_VARS.curr_color +m_vars.inc|55||0|0|49123|L|M_VARS,curr_color,,+used +m_vars.inc|56||0|0|49125|F|M_VARS.esc_hex_cmd +m_vars.inc|56||0|0|49125|L|M_VARS,esc_hex_cmd, +m_vars.inc|57||0|0|49125|F|M_VARS.row_shift +m_vars.inc|57||0|0|49125|L|M_VARS,row_shift,,+used +m_vars.inc|58||0|0|49126|F|M_VARS.codepage +m_vars.inc|58||0|0|49126|L|M_VARS,codepage,,+used +m_vars.inc|61||0|0|49127|F|M_VARS.cur_palette +m_vars.inc|61||0|0|49127|L|M_VARS,cur_palette,,+used +m_vars.inc|62||0|0|49128|F|M_VARS.beep_period +m_vars.inc|62||0|0|49128|L|M_VARS,beep_period,,+used +m_vars.inc|63||0|0|49130|F|M_VARS.beep_duration +m_vars.inc|63||0|0|49130|L|M_VARS,beep_duration,,+used +m_vars.inc|64||0|0|49132|F|M_VARS.pix_shift +m_vars.inc|64||0|0|49132|L|M_VARS,pix_shift,,+used +m_vars.inc|65||0|0|49133|F|M_VARS.strobe_state +m_vars.inc|65||0|0|49133|L|M_VARS,strobe_state,,+used +m_vars.inc|66||0|0|49134|F|M_VARS.prn_start_x +m_vars.inc|66||0|0|49134|L|M_VARS,prn_start_x,,+used +m_vars.inc|67||0|0|49135|F|M_VARS.drv_B_inited +m_vars.inc|67||0|0|49135|L|M_VARS,drv_B_inited,,+used +m_vars.inc|68||0|0|49136|F|M_VARS.drv_C_inited +m_vars.inc|68||0|0|49136|L|M_VARS,drv_C_inited,,+used +m_vars.inc|69||0|0|49137|F|M_VARS.drv_current +m_vars.inc|69||0|0|49137|L|M_VARS,drv_current,,+used +m_vars.inc|70||0|0|49138|F|M_VARS.drv_B_track +m_vars.inc|70||0|0|49138|L|M_VARS,drv_B_track,,+used +m_vars.inc|71||0|0|49139|F|M_VARS.drv_C_track +m_vars.inc|71||0|0|49139|L|M_VARS,drv_C_track,,+used +m_vars.inc|72||0|0|49140|F|M_VARS.drv_dir_inout +m_vars.inc|72||0|0|49140|L|M_VARS,drv_dir_inout,,+used +m_vars.inc|73||0|0|49141|F|M_VARS.esc_var0 +m_vars.inc|73||0|0|49141|L|M_VARS,esc_var0,,+used +m_vars.inc|74||0|0|49142|F|M_VARS.esc_var1 +m_vars.inc|74||0|0|49142|L|M_VARS,esc_var1,,+used +m_vars.inc|75||0|0|49143|F|M_VARS.esc_var2 +m_vars.inc|75||0|0|49143|L|M_VARS,esc_var2,,+used +m_vars.inc|76||0|0|49144|F|M_VARS.esc_var3 +m_vars.inc|76||0|0|49144|L|M_VARS,esc_var3,,+used +m_vars.inc|100||0|-1|49152|L|M_VARS,,,+endmod diff --git a/examples/hello/ok240/bdos.inc b/examples/hello/ok240/bdos.inc new file mode 100644 index 0000000..22ab809 --- /dev/null +++ b/examples/hello/ok240/bdos.inc @@ -0,0 +1,73 @@ +; ======================================================= +; Ocean-240.2 +; CP/M v2.2. Equates to call BDOS functions +; +; Created by Romych 2026-02-16 +; ======================================================= + + + IFNDEF _BDOS_INC + DEFINE _BDOS_INC + +; ------------------------------------------------------ +; CP/M Entries and variables +; ------------------------------------------------------ +WARM_BOOT EQU 0x0000 ; Jump warm_boot (Restart) +IO_BYTE EQU 0x0003 ; Input/Output mapping +CUR_USER_DRV EQU 0x0004 ; [7:4] - curent user, [3:0] - current drive +BDOS_ENTER EQU 0x0005 ; Jump bdos (CALL 5 to make CP/M requests) +FCB1 EQU 0x005c ; Default FCB, 16 bytes +FCB2 EQU 0x006c + +DMA_BUFFER EQU 0x0080 ; Default "DMA" 128 bytes buffer +CMD_LINE_LEN EQU 0x0080 ; command line character count +CMD_LINE EQU 0x0081 ; command line buffer +TPA EQU 0x0100 ; start of program + + +; ------------------------------------------------------ +; CP/M BDOS Functions +; ------------------------------------------------------ +P_TERMCPM EQU 0 ; System Reset +C_READ EQU 1 ; Console input +C_WRITE EQU 2 ; Console output +A_READ EQU 3 ; Auxiliary (Reader) input +A_WRITE EQU 4 ; Auxiliary (Punch) output +L_WRITE EQU 5 ; Printer output +C_RAWIO EQU 6 ; Direct console I/O +A_STATIN EQU 7 ; Auxiliary Input status +A_STATOUT EQU 8 ; Auxiliary Output status +C_WRITESTR EQU 9 ; Output string +C_READSTR EQU 10 ; Buffered console input +C_STAT EQU 11 ; Console status +S_BDOSVER EQU 12 ; Return version number +DRV_ALLRESET EQU 13 ; Reset discs +DRV_SET EQU 14 ; Select disc +F_OPEN EQU 15 ; Open file +F_CLOSE EQU 16 ; Close file +F_SFIRST EQU 17 ; search for first +F_SNEXT EQU 18 ; search for next +F_DELETE EQU 19 ; delete file +F_READ EQU 20 ; read next record +F_WRITE EQU 21 ; write next record +F_MAKE EQU 22 ; create file +F_RENAME EQU 23 ; Rename file +DRV_LOGINVEC EQU 24 ; Return bitmap of logged-in drives +DRV_GET EQU 25 ; Return current drive +F_DMAOFF EQU 26 ; Set DMA address +DRV_ALLOCVEC EQU 27 ; Return address of allocation map +DRV_SETRO EQU 28 ; Software write-protect current disc +DRV_ROVEC EQU 29 ; Return bitmap of read-only drives +F_ATTRIB EQU 30 ; set file attributes +DRV_DPB EQU 31 ; get DPB address +F_USERNUM EQU 32 ; get/set user number +F_READRAND EQU 33 ; Random access read record +F_WRITERAND EQU 34 ; Random access write record +F_SIZE EQU 35 ; Compute file size +F_RANDREC EQU 36 ; Update random access pointer +DRV_RESET EQU 37 ; Selectively reset disc drives +DRV_ACCESS EQU 38 ; Access drives +DRV_FREE EQU 39 ; Free drive +F_WRITEZF EQU 40 ; Write random with zero fill + + ENDIF diff --git a/examples/hello/ok240/equates.inc b/examples/hello/ok240/equates.inc new file mode 100644 index 0000000..2a4feca --- /dev/null +++ b/examples/hello/ok240/equates.inc @@ -0,0 +1,104 @@ +; ====================================================== +; Ocean-240.2 +; Equates for all assembly sources +; +; By Romych 2026-03-10 +; ====================================================== + + IFNDEF _EQUATES + DEFINE _EQUATES + +ASCII_BELL EQU 0x07 ; Make Beep +ASCII_BS EQU 0x08 ; Move cursor left (Back Space) +ASCII_TAB EQU 0x09 ; Move cursor right +8 pos +ASCII_LF EQU 0x0A ; Move cursor down (Line Feed) +ASCII_FF EQU 0x0C ; Move cursor to home (Form Feed) +ASCII_CR EQU 0x0D ; Move gursor to 1st pos (Cariage Return) +ASCII_CAN EQU 0x18 ; Move cursor right +ASCII_EM EQU 0x19 ; Move cursor up +ASCII_SUB EQU 0x1A ; CTRL-Z - end of text file marker +ASCII_ESC EQU 0x1B ; +ASCII_US EQU 0x1F ; Clear screen +ASCII_SP EQU 0x20 +ASCII_DEL EQU 0x7F + +; ------------------------------------------------------ +BELL_PIN EQU 0x08 ; DD67 Pin PC3 - "BELL" +; ------------------------------------------------------ +CTRL_A EQU 0x01 +CTRL_B EQU 0x02 +CTRL_C EQU 0x03 ; Warm boot +CTRL_D EQU 0x04 +CTRL_E EQU 0x05 ; Move to beginning of new line (Physical EOL) +CTRL_F EQU 0x06 +CTRL_G EQU 0x07 +CTRL_H EQU 0x08 ; Backspace +CTRL_I EQU 0x09 +CTRL_J EQU 0x0A ; LF - Line Feed +CTRL_K EQU 0x0B +CTRL_L EQU 0x0C +CTRL_M EQU 0x0D ; CR - Carriage Return +CTRL_N EQU 0x0E +CTRL_O EQU 0x0F +CTRL_P EQU 0x10 ; turn on/off printer +CTRL_Q EQU 0x11 +CTRL_R EQU 0x12 ; Repeat current cmd line +CTRL_S EQU 0x13 ; Temporary stop display data to console (aka DC3) +CTRL_T EQU 0x14 +CTRL_U EQU 0x15 ; Cancel (erase) current cmd line +CTRL_V EQU 0x16 +CTRL_W EQU 0x17 +CTRL_X EQU 0x18 ; Cancel (erase) current cmd line +CTRL_Y EQU 0x19 +CTRL_Z EQU 0x1A ; CTRL-Z - end of text file marker + +; ------------------------------------------------------ +TRUE EQU 0xFF +FALSE EQU 0x00 + +; --------------------------------------------------- +; FCB Offsets +; --------------------------------------------------- +FCB_LEN EQU 32 ; length of FCB +FCB_SHF EQU 5 +FN_LEN EQU 12 ; Length of filename in FCB +FCB_DR EQU 0 ; Drive. 0 for default, 1-16 for A-P +FCB_FN EQU 1 ; Fn - Filename, 7-bit ASCII. The top bits - attributes +FCB_FT EQU 9 ; Filetype, 7-bit ASCII. + ; T1' to T3' have the following + ; T1' - Read-Only + ; T2' - System (hidden) + ; T3' - Archive +FCB_EXT EQU 12 ; EX - Set this to 0 when opening a file and then leave it to + ; CP/M. You can rewind a file by setting EX, RC, S2 and CR to 0. +FCB_S1 EQU 13 ; S1 - Reserved. +FCB_S2 EQU 14 ; S2 - Reserved. Bit 7 - wile write flag, [6:0] module number (Extent hi bits) +FCB_RC EQU 15 ; RC - Set this to 0 when opening a file and then leave it to CP/M. +FCB_AL EQU 16 ; AL - Image of the second half of the directory entry, + ; containing the file's allocation (which disc blocks it owns). +FCB_CR EQU 32 ; CR - Current record within extent. It is usually best to set + ; this to 0 immediately after a file has been opened and + ; then ignore it. +FCB_RN EQU 33 ; Rn - Random access record number. A 16-bit (with R2 used for overflow) + + +; ------------------------------------------------------ +IRQ_0 EQU 0x01 +IRQ_1 EQU 0x02 +IRQ_2 EQU 0x04 + +IRQ_KEYBOARD EQU 0x02 +IRQ_PRINTER EQU 0x08 +IRQ_TIMER EQU 0x10 + +KBD_ACK EQU 0x10 +PRINTER_ACK EQU 0x10 + +TX_READY EQU 0x01 +RX_READY EQU 0x02 + +TMR0_SQWAVE EQU 0x36 + +; ------------------------------------------------------ + + ENDIF \ No newline at end of file diff --git a/examples/hello/ok240/io.inc b/examples/hello/ok240/io.inc new file mode 100644 index 0000000..5d99f65 --- /dev/null +++ b/examples/hello/ok240/io.inc @@ -0,0 +1,132 @@ +; ======================================================= +; Ocean-240.2 +; Computer with FDC variant. +; IO Ports definitions +; +; By Romych 2025-09-09 +; ======================================================= + + IFNDEF _IO_PORTS + DEFINE _IO_PORTS + +; ------------------------------------------------------- +; КР580ВВ55 DD79 +; ------------------------------------------------------- +; Port A - User port A +USR_DD79PA EQU 0x00 + +; Port B - User port B +USR_DD79PB EQU 0x01 + +; Port C - User port C +USR_DD79PC EQU 0x02 + +; Config: [1][ma1,ma0][0-aO|1-aI],[0-chO,1-chI],[mb],[0-bO|1-bI],[0-clO,1-clI] +; Set bit: [0][xxx][bbb][0|1] +USR_DD79CTR EQU 0x03 + +; ------------------------------------------------------- +; КР1818ВГ93 +; ------------------------------------------------------- +; CMD +FDC_CMD EQU 0x20 + +; TRACK +FDC_TRACK EQU 0x21 + +; SECTOR +FDC_SECT EQU 0x22 + +; DATA +FDC_DATA EQU 0x23 + +; +FDC_DRQ EQU 0x24 + +; Controller port +FLOPPY EQU 0x25 + + +; ------------------------------------------------------- +; КР580ВВ55 DD78 +; ------------------------------------------------------- +; Port A - Keyboard Data +KBD_DD78PA EQU 0x40 + +; Port B - JST3,SHFT,CTRL,ACK,TAPE5,TAPE4,GK,GC +KBD_DD78PB EQU 0x41 + +; Port C - [PC7..0] +KBD_DD78PC EQU 0x42 + +; Сonfig: [1][ma1,ma0][0-aO|1-aI],[0-chO,1-chI],[mb],[0-bO|1-bI],[0-clO,1-clI] +; Set bit: [0][xxx][bbb][0|1]; +KBD_DD78CTR EQU 0x43 + + +; ------------------------------------------------------- +; КР580ВИ53 DD70 +; ------------------------------------------------------- +; Counter 1 +TMR_DD70C1 EQU 0x60 + +; Counter 2 +TMR_DD70C2 EQU 0x61 + +; Counter 3 +TMR_DD70C3 EQU 0x62 + +; Config: [sc1,sc0][rl1,rl0][m2,m1,m0][bcd] +; sc - timer, rl=01-LSB, 10-MSB, 11-LSB+MSB +; mode 000 - int on fin, +; 001 - one shot, +; x10 - rate gen, +; x11-sq wave +TMR_DD70CTR EQU 0x63 + +; Programable Interrupt controller PIC KR580VV59 +PIC_DD75A EQU 0x80 +PIC_DD75B EQU 0x81 + +; ------------------------------------------------------- +; КР580ВВ51 DD72 +; ------------------------------------------------------- +; Data +UART_DD72RD EQU 0xA0 + +; [RST,RQ_RX,RST_ERR,PAUSE,RX_EN,RX_RDY,TX_RDY] +UART_DD72RR EQU 0xA1 + +; ------------------------------------------------------- +; КР580ВВ55 DD17 +; ------------------------------------------------------- +; Port A - VShift[8..1] +SYS_DD17PA EQU 0xC0 + +; Port B - [ROM14,13][REST][ENROM-][A18,17,16][32k] +SYS_DD17PB EQU 0xC1 + +; Port C - HShift[HS5..1,SB3..1] +SYS_DD17PC EQU 0xC2 + +; Сonfig: [1][ma1,ma0][0-aO|1-aI],[0-chO,1-chI],[mb],[0-bO|1-bI],[0-clO,1-clI] +; Set bit: [0][xxx][bbb][0|1]; +SYS_DD17CTR EQU 0xC3 + +; ------------------------------------------------------- +; КР580ВВ55 DD67 +; ------------------------------------------------------- +; Port A - LPT Data +LPT_DD67PA EQU 0xE0 + +; Port B - [VSU,C/M,FL3..1,COL3..1] +VID_DD67PB EQU 0xE1 + +; Port C - [USER3..1,STB-LP,BELL,TAPE3..1] +DD67PC EQU 0xE2 + +; Сonfig: [1][ma1,ma0][0-aO|1-aI],[0-chO,1-chI],[mb],[0-bO|1-bI],[0-clO,1-clI] +; Set bit: [0][xxx][bbb][0|1]; +DD67CTR EQU 0xE3 + + ENDIF diff --git a/examples/hello/ok240/monitor.inc b/examples/hello/ok240/monitor.inc new file mode 100644 index 0000000..4f9aa7c --- /dev/null +++ b/examples/hello/ok240/monitor.inc @@ -0,0 +1,31 @@ +; ======================================================= +; Ocean-240.2 +; Equates to call Monitor v8 functions +; +; Created by Romych 2026-02-16 +; ======================================================= + + IFNDEF _MON_INC + DEFINE _MON_INC + +mon_start EQU 0xE000 +mon_hexb EQU 0xE003 +non_con_status EQU 0xE006 +mon_con_in EQU 0xE009 +mon_con_out EQU 0xE00C +mon_serial_in EQU 0xE00F +mon_serial_out EQU 0xE012 +mon_char_print EQU 0xE015 +mon_tape_read EQU 0xE018 +mon_tape_write EQU 0xE01B +mon_ram_disk_read EQU 0xE01E +mon_ram_disk_write EQU 0xE021 +mon_tape_read_ram EQU 0xE024 +mon_tape_write_ram EQU 0xE027 +mon_tape_wait EQU 0xE02A +mon_tape_detect EQU 0xE02D +mon_read_floppy EQU 0xE030 +mon_write_floppy EQU 0xE033 +mon_out_str_z EQU 0xE036 + + ENDIF \ No newline at end of file diff --git a/examples/hello/ok240/ram.inc b/examples/hello/ok240/ram.inc new file mode 100644 index 0000000..34bb402 --- /dev/null +++ b/examples/hello/ok240/ram.inc @@ -0,0 +1,41 @@ +; ======================================================= +; Ocean-240.2 +; +; RAM area at address: 0x0000 - 0x0100, used by CP/M and +; HW-Monitor +; By Romych 2026-02-03 +; ======================================================= + + IFNDEF _RAM + DEFINE _RAM + + MODULE RAM + +@warm_boot EQU 0x0000 ; Jump warm_boot (Restart) +@warm_boot_addr EQU 0x0001 ; address of warm boot entry point +@iobyte EQU 0x0003 ; Input/Output mapping +@cur_user_drv EQU 0x0004 ; [7:4] - curent user, [3:0] - current drive +@bdos_enter EQU 0x0005 ; Jump bdos (CALL 5 to make CP/M requests) +@bdos_ent_addr EQU 0x0006 ; addres of BDOS entry point +;@RST1 EQU 0x0008 +;@RST1_handler_addr EQU 0x0009 +;RST2 EQU 0x0010 +;RST3 EQU 0x0018 +;RST4 EQU 0x0020 +;RST5 EQU 0x0028 +;RST6 EQU 0x0030 +;RST7 EQU 0x0038 +@fcb1 EQU 0x005c ; Default FCB, 16 bytes +@fcb2 EQU 0x006c +;NMI_ISR EQU 0x0066 + +@dma_buffer EQU 0x0080 ; Default "DMA" 128 bytes buffer +@p_cmd_line_len EQU 0x0080 ; command line character count +@p_cmd_line EQU 0x0081 ; command line buffer +@bios_stack EQU 0x0100 +@tpa_start EQU 0x0100 ; start of program +@video_ram EQU 0x4000 + + ENDMODULE + + ENDIF \ No newline at end of file diff --git a/floppy/README.md b/floppy/README.md new file mode 100644 index 0000000..39bd4ea --- /dev/null +++ b/floppy/README.md @@ -0,0 +1,14 @@ +# Эмулятор персонального компьютера Океан-240.2 + +## Образы дискет для эмулятора. + +В файле floppyB.okd собрано большинство софта для компьютера. По умолчанию, при запуске эмулятора, это дискета B:. +Софт отсортирован по типам для разных юзеров. + +- USER 0 - утилиты ОС CP/M +- USER 1 - Ассемблеры, линкеры +- USER 2 - MSBASIC и программы *.BAS +- USER 3 - Игры +- USER 5 - ZEXDOC, ZEXALL - тесты процессора Z80 + +Файл empty.okd - это образ пустой, отформатированной дискеты. diff --git a/floppy/disk1.okd b/floppy/disk1.okd deleted file mode 100644 index e09a515..0000000 Binary files a/floppy/disk1.okd and /dev/null differ diff --git a/floppy/disketa.img b/floppy/disketa.img deleted file mode 100644 index 69f09b3..0000000 Binary files a/floppy/disketa.img and /dev/null differ diff --git a/floppy/disketa.okd b/floppy/disketa.okd deleted file mode 100644 index 31bc9d5..0000000 Binary files a/floppy/disketa.okd and /dev/null differ diff --git a/floppy/disk1.img b/floppy/empty.okd similarity index 96% rename from floppy/disk1.img rename to floppy/empty.okd index 02def52..2038985 100644 Binary files a/floppy/disk1.img and b/floppy/empty.okd differ diff --git a/floppy/floppyB.okd b/floppy/floppyB.okd index 21a3f5f..a2cb6f6 100644 Binary files a/floppy/floppyB.okd and b/floppy/floppyB.okd differ diff --git a/floppy/floppyB1.okd b/floppy/floppyB1.okd deleted file mode 100644 index ae2c601..0000000 Binary files a/floppy/floppyB1.okd and /dev/null differ diff --git a/floppy/oce1_2.okd b/floppy/oce1_2.okd deleted file mode 100644 index f8fe906..0000000 Binary files a/floppy/oce1_2.okd and /dev/null differ diff --git a/floppy/oce2_2.okd b/floppy/oce2_2.okd deleted file mode 100644 index 678016f..0000000 Binary files a/floppy/oce2_2.okd and /dev/null differ diff --git a/hex/format.hex b/hex/format.hex deleted file mode 100644 index 9c44228..0000000 --- a/hex/format.hex +++ /dev/null @@ -1,23 +0,0 @@ -:020000040000FA -:20010000116A02D53A8000FE02112D03C03A8100FE20C03A8200324503FE420E05CA2501C0 -:20012000FE430E02C079329803CD06E0B7CA3601CD09E0C32901113F03CD6A02CD09E01107 -:200140007203FE79CA4A01FE59C0CD6A0221000022EFBF3A9803D325F608D325111403DB97 -:200160002507D8DB20E680C25F01AFD3200000DB2507D8DB20E605FE04C26F01AFD321AF0B -:200180003297033A9803D325F608D3250E00CDD301CD8802CDA0023A9803D325F628D32578 -:2001A0000E01CDD301CD8802CDA002CD06E0B7C409E0FE03118F03C8FE1BC83A97033C3223 -:2001C0009703FE50117D03D03E58D3200000DB24C38301219903114E50CD630211000CCD7F -:2001E000630211F603CD630236FC23114E32CD6302060111000CCD630211F503CD6302367F -:20020000FE233A970377237123702336022336F723114E16CD630211000CCD630211F5037E -:20022000CD630236FB2311E500CD6302CD630236F723114E36CD63020478FE0ADAF3011164 -:200240004E00CD6302CD6302CD63020E46C5117503CD6A023A9703CD75020E20CD0CE0C11F -:20026000C30CE0732315C26302C91AB7C84FCD0CE013C36A02570E0006087A0757798927DD -:200280004F05C27A02C303E02199033EF4D3200000DB240F7ED32323DA9102DB20C3C702AB -:2002A0000E56CD4D022101123E01D3223E94D3200000DB240FDB232BDAB202DB20E6CFC25A -:2002C000C7027CB5C83E08B7C8F5117203CD6A02F1116A02D5FE0811F602C8FE4011020375 -:2002E000C8FE80111403C8F5112603CD6A02F1CD03E0117203C9435243204552524F520DE1 -:200300000A0057524954452050524F5445435445440D0A004452495645204E4F5420524525 -:200320004144590D0A004552524F52200055534147453A20464F524D415420422F4300446E -:2003400052495645203F3A2057494C4C204245204C4F5354210D0A50524F434545442057BC -:2003600049544820464F524D41542028592F4E293F000D0A000D545241434B20000D464FCE -:19038000524D415420434F4D504C4554450D000D0A425245414B0000002E -:00000001FF diff --git a/hex/l80.hex b/hex/l80.hex deleted file mode 100644 index 8ddcb26..0000000 --- a/hex/l80.hex +++ /dev/null @@ -1,290 +0,0 @@ -:020000040000FA -:200100002A06002BF922FA181106FF1922621A226A1A1100F81922601A22681AAF676F22DB -:20012000F81822031932FF1832011932FE1821D02322641A225C1A22661A225E1A22E518ED -:2001400022E318210301227E1A227C1A22821A22801A32511A322F1AC3B7013F4E6F20536F -:20016000746172742041646472657373003F4C6F6164696E67204572726F72003F4E6F7447 -:2001800068696E67204C6F61646564003F4F7574206F66206D656D6F727900216D01C3A435 -:2001A00001218C01C3B001217C01C3B001216903CD7803AF3280002AFA18F9218A1A7EB7A5 -:2001C000C2CA0134212903CD78033E01324F1AAF320019CDA103AF320619CDEA0CDAAD0139 -:2001E000FE2CCA8202FE0DCA8202FE2FC2AD01CD8203014902C5FE4DC2FE010680C9FE478E -:200200000640C8FE52CA0001FE530602C8FE550601C8FE580610C8FE590608C8FE45C234D8 -:20022000020620C9CD2809CDB807010000C5C3A61FC30000FE4FC23F0232FE180600C9D6F5 -:2002400048C2F70332FE1847C93A0619B0320619CD8203FE3AC2E001D53E60A0CAAD01CD63 -:20026000740DEB11E91878B7CAAD01FE07D2AD011213CD8203121305C27202CD8203D1C317 -:20028000E00122FC183A091AB7C41C07AF32800001F802C52106197EE6FEBE77CAAB02B726 -:2002A000FAAB023A091AB7CAA9097EE6FDBE77C2BD023A091AB7C8320019C3970B32001919 -:2002C0002A03197CB5C8CD7011DAC602CAC60279FE0FC8B7C2C602CDF112DAE6027EE64098 -:2002E000C2C602C3EC02226A1AC3C602CD9D0B2A03197CB5C8C3C6022AFC187EE67FFE0D27 -:20030000C2DA013A0019B73A0619CA2103FE80CDAA0947E640C2810778E620C22402C3B35E -:2003200001FE80D4AA09C312030D0A4C696E6B2D38302020332E3337202030382D4D61799E -:200340002D38302020436F7079726967687420313937392C383020284329204D6963726FB3 -:20036000736F66740D0A0D0A003F436F6D6D616E64204572726F72007EB7C8CDD80623C3DD -:2003800078037EE67F23FE20CA8203FE0ACA8203FE60DA9C03FE7BD29C03D620FE0DC02B6B -:2003A000C9D5C52180007EB747CAC803237EFE20C2B70305C3A903110819782B0412132358 -:2003C00005CAE4037EC3BD033A4F1AB7CAD703CD12073E2ACDD8060E0A110719CD05003E16 -:2003E0000ACDD8063A0819210919E5856F3E008C67360DE1C1D1C9D60837CA1904D6F4CA91 -:200400001904D60AC2AD0132091AE5110A1A212E1A010C00CD9E17E1C9F5CD8203FE3AC21D -:20042000AD01CDE405F1E5478F874FC29F043A511AB7C29F04CD6D06EBE5010000CD60056D -:20044000227E1A22821AE1227C1A22801A2A5C1AE52A641A225C1A22E318CD9D05D12A641F -:200460001AEBCD96052A661A19B7CDDE14424B2A641AEB2A661AE5D5CDA91722E518AF32C5 -:20048000501A473C32511AD1E1F5C35905D5CD9605E17AB3C83600231B7AB3C29504C9F53D -:2004A000DAAB043A511AB7C2AB044FCD6D06D5CD6905CD7D05CDB40ACA0305D1CD6005EBAD -:2004C000CD9605D21605E5210000CD9605CD6905E519C579CDE314C1EBE3CD7D05D5CD9608 -:2004E0000579424BD1E119E5D5F5CDA917F14FD1E1CD8D04CD7D05E1F1D8F5E521E31809A2 -:20050000732372D1217C1A09732372F1D821801A09732372E1C9D5EBCD860513CDB40A1B2A -:20052000F5D44906F1E1E3F5E5F1DA340521801A09732372D1E1D5F5CD7D0519EB21E31859 -:2005400009F1F5DA4905732372E1F1E5D25C05CD6905EB79C5CDE314C1CD8D04F1D8E1C9D8 -:20056000217C1A097E23666FC9215C1AC36305D5CD6905CD7D05CD9605EBD1B5C9EB216449 -:200580001ACD6305EBC9D5CD6005CD7D05CD9605CD690519D1C97D935F7C9A57C93E013296 -:2005A000501A2A7C1AEB2A7E1ACD9605DAC4052A5C1A19EB2A681A3A511AB7CAC405CDB499 -:2005C0000AD2D8052A5C1AEB2A681ACD96051F577B1F5F2A5C1A19EBEB2322661A225E1A66 -:2005E00022E518C91100003AFE1847EBEBCD82034FD630DA1F06FE0ADA0006D607DA1F062B -:20060000EB292929FE10D21E060405CA1406FE08D21E060E29856F3E008C67C3EC05EB7913 -:20062000FE0DC82BC9254F7665726C6179696E6720002061726561003C06410644617461D2 -:200640000050726F6772616D00CD4F06C31207E5212506CD7803213806097E23666FCD7828 -:2006600003213206CD7803E1C9E5C35306E5C5010000CD600513CDB40A1BD29D06E5CD86E8 -:2006800005EBE3CDB40AE1EBCA9D06CDB40ADAAE06E17D3CCAA8063DB9C44906E50C0C7919 -:2006A000FE04C27206C1E1C9E57937C3A506EBE3C5794DB9E537CAC6062CCAC606CD6005D8 -:2006C00023EBCDB40AEBE1C1D1E5DA9D0621F517CD6906C3B3013E09F5C5D5E50E02E67FB1 -:2006E0005FCD0500E1D1C1F1C9210B1A3E3FCDD80606087E23CDD806FE21DA010705C2F319 -:2007000006210707C3A401204E6F7420466F756E64003E0DCDD8063E0AC3D8063E80325AA6 -:200720001A1189190E1ACD0500110A1ACD6E070E0FCD05003CCAE9063EFF32E018C9E5D5AD -:200740003A5A1AB7FC56075F16003C325A1A218919197ED1E1C9C50E1A118919CD0500112C -:200760000A1A0E14CD0500C13CCA9B01AFC9210C0019AF0604772305C275072120001977D9 -:20078000C9CD28097CB5EB215B01CAB001EBE5CDB807E521A607CD7803CD12072AF81844C3 -:2007A0004DE1C5C3A61F5B426567696E20657865637574696F6E5D003A0119B7CAA7013A76 -:2007C000FF18B7CA40082A621AEB2A6A1AEBCDB40ACA40087EE6E0FE607EC22508EE4077BE -:2007E000E607E52B2B2BFE07DAED073E07474F119D097E122B1305C2F2073E0791CA070804 -:20080000EB36203DC20108D12A621ACD9605D5219C09CD8709AF32FF18CDA9092A621AD1CA -:20082000CD9605EB7E4FE6075F1600CD9605EB2B2B2B79B7F239082B2B3AFF18B7C2C9070F -:20084000CD12073A0619E618320619CDA9092AF8183E5BCDD806CD280BCDD606010000CD96 -:200860008605E521220911F0183E0612477E23131205C26D08AFCDF112DA8F087EE640CAA6 -:200880008F082B5E2B56CD0418EBD1732372D5E1E5CD280BCDD6062A601AEB2A681ACDB40A -:2008A0000ACACB081AD6C532531AD5CDB914CD0418EB3A531AB7C2C008782F47792F4F032A -:2008C0007E8177237E8877D1C39B08E1010000CD86053A511AB7CAE608EB0E02CD8605CD5D -:2008E000B40AD2E608EB110001AF957CCE0092CD0F093E5DCDD806CD12073EC33200012AEE -:20090000F8182201013A2F1AB7C47B1DC38B1A06FFD60A04D21109F578C40F09F1C63AC3D3 -:20092000D806244D454D52592AF81811E9181AB7C821F01806071A77231305C23609AFCDC7 -:20094000F112DA54097EE640CA54092B5E2B56EB22F818C9E5216909CD7803E1CD770EAF00 -:2009600032E918217A09C3A4013F53746172742073796D626F6C202D2000202D20756E6414 -:200980006566696E656400110A1A060C7EE67F12231305C28C09CD1C07C3BD02002020204C -:2009A000202020202052454CF637F53A0619E660C2C509010000CD700B3A511AB70E02C4EA -:2009C000700BCD1207AF320519329C0A2A621AEB2A6A1AEBCDB40ACA830A7EE60747F1F53B -:2009E000D2F5097EE660C2700A2F32FF183A0619E660C2700AE57EE6E0FE20CA6F0A7EB715 -:200A00003E20F20A0A3E2FCDD806F52B5E2B562B7ECDD80605C20F0AF1FE2FCCD806E37EFE -:200A2000E640C2340A3A9C0A3C329C0A3E2A32FF18CDD806CDD6067EE620EBCA470A21905C -:200A40000BCD7803C34A0ACD280BEB7EB7E3F25C0ACDD6062B5E2B56EBCD280BCDD6063A50 -:200A60000519FE023FCE01E603320519CC1207E17EB7F2770A3C3CE60FC6022F4F06FF09E2 -:200A8000C3CF093A9C0AB7CA6B0BCD12073A9C0ACD0F09219D0ACD7803C36B0B0020556E0D -:200AA000646566696E656420476C6F62616C2873290D0A007C92C07D93C921371A36532356 -:200AC000365923364DCDB61D3E04F52A621AEB2A6A1AEBCDB40ACA1F0B7EE6074F7EE64003 -:200AE000CA0C0BE52B5E2B56EBCDA61EEB3E20CD5E1F2B7ECD5E1F0DC2F20A3E09CD5E1FC8 -:200B0000E1F13DC20B0BCDC21E3E04F57EB7F2130B3C3CE60FC6022F4F06FF09C3CE0AF178 -:200B2000FE04C4C21EC3341E3AFE18B7CA4D0BAF29CE30CDD806C50605AF0E03298F0DC239 -:200B40003C0BC630CDD80605C2390BC1C97CCD520B7DF50F0F0F0FCD5B0BF1CD610BC3D8CC -:200B600006E60FC630FE3AD8C607C9CD1207F1C9213806097E23666FCD7803CDD606CD6042 -:200B800005CD280BCDD606CD8605CD280BC3120752515545535400CD9D0BC3970B2A621A0F -:200BA0003A521AB7CAEC0BEB2A6A1ACDB40AEBCAEC0B7EE6075F16007EE5E640CAE10B2BFD -:200BC0002B2B7ED623C2E10BCD96052A6A1AEBCD9605424BEBE1E5CDBC17226A1AE1C3A762 -:200BE0000BE1CD9605EB2B2B2BC3A70BAF32501A32521A32551A3A511AB7CC9D05AF676FE7 -:200C000022561A22841A22861A32FF1822881A3C32541A3A511AB72A5C1AEB2A661AC48DF5 -:200C2000042A5E1AEB2A681ACD8D042AE518E5E1CD4517CD7011D23F0CCD570CC3330CC2A4 -:200C4000480CCDAF0CC3330CE5060021231209097E23666F424BE9D5C5E5233A541A3DEB05 -:200C6000CA8C0C3A881AB7C2830C2A5C1A7C92CA780CD2830CC27D0C7D93D2830CEB23B750 -:200C8000CDE114E1CD4517C17023D1C93A891AB7C2830C2A5E1A7C92CAA10CD2830CC2A6C5 -:200CA0000C7D93D2830CEB23B7CDDE14C3830CD53A531A3DC2DB0C3A501AB7CADB0CE5CDC1 -:200CC000FD16EBE3CD7617E5EB9FE680772B702B71D1C12B702B71EB11FFFF23CDC7174283 -:200CE000CD570CE52B2B73E1D1C9CD740DFE3A373E00C2010DEBCD8203FE5B3FD8D640D835 -:200D0000EB320A1AD4740D78FE0BDA0F0D060BC5EBD5110B1A0405CA220DCD82031213C3BE -:200D2000160DE1C13E0A90DA330DEB3620233DF22B0DEB7832091A790600FE2EF5CC740D8C -:200D4000E3EBD511131A78FE04DA4E0D06030405CA5B0DCD82031213C34F0DF1CA700D21D0 -:200D6000131A7EFE20C2700D365223364523364CE179B7C90600E5CD8203FE5BD2920DFEC1 -:200D800030DA920DFE41D28E0DFE3AD2920D04C3770DFE5BCA8E0DFE5DCA8E0DFE40CA8EF6 -:200DA0000DFE5CCA8E0DFE5ECA8E0DFE5FCA8E0D4FD1C9EBD1D5CDE9123A501AB7C2E10D97 -:200DC0003A541A32531ACDC717424B7CB5CA2F0C7E5F7123B65670CD0418EBC2D00DC32F0C -:200DE0000CEBE5CDFD163A531A3DCAF20DCDC7173E803C473A541A3DCAFD0D3E4080772B45 -:200E0000722B732BD1E640E5CC6A12E13A541A32531ACDC717722B73C32F0C3E80CDF11204 -:200E2000DA330EE51A2F6F1B1A2F6709DA620EE1C32F0C7EF64077EB712B702AE318E51BB6 -:200E4000EB3E0232531ACDC717EB7D121B7C12E10922E318EB2A5C1AEBCDB40AD4E114C366 -:200E60002F0C21880ECD7803E1CD770E3E2FCDD806CD1207C32F0C7EE607572B2B2B7ECD7B -:200E8000D8062B15C27E0EC925326E6420434F4D4D4F4E204C6172676572202F002AE3181A -:200EA000EB22841AEB097C32881AEB2A5C1AEBCDB40AD4E114E5CD9D13E1C32F0C3E20CD0D -:200EC000F1127EF64077C32F0CF637F5CDFD163A501AB73EC0CAEC0E3A541A3DCAE10E3EEB -:200EE00080473A531A3DCAEB0E3E4080C60477F19F3C86772BCDC717EBE3EBD53A541A323E -:200F0000531ACDC7173A501AB7CA150F3A541A3DE5CC6A12E1722B732BEBE1E3EB722B7398 -:200F2000C32F0CC1C1C3F8027AB3C1CA360FAFCD2C18EB22F818010000CDE91221841A0909 -:200F40005E235621801ACD3D1021E318CD3D10030379FE03DA3C0F3A511AB7C02A5C1AEB63 -:200F60002A641ACDB40AC26F0F2A7E1A227C1A010000CD8605EB2A7E1ACD9605DABA0F2A49 -:200F80005C1A19E5CDE1142A661AEB2A5E1ACD9605424B2A661AEBE122661ACDB40AD4A9CF -:200FA00017DC9E17225E1A225C1A22E318010000CD860522821A22801AC9CD8605EB0E024B -:200FC000CD8605CDB40ADACA0FEB2A7E1AEBCD9605D52A661AEB2A5E1ACD9605E1CDB40A9B -:200FE000D2F00F210000CD96052A5E1A19CDDE142A641AEB2A5C1ACD9605424B2A7E1AEB48 -:201000002A7C1ACD96052A661A19EB2A641AEBCDA9172A7E1A227C1A2A661AEB2A5E1ACD5C -:201020009605424B2A661AEB2A641A22661ACD9E17225C1A225E1A22E318C3AD0F097E834F -:2010400077237E8A77C95059CDE9123E04CD2C18424BAFCDF112D4B2107EE640C28D103A0B -:20106000501AB7C272107EF640772B7E5F712BC3D40DEBCDFD163A531A3DCA7F103E80C60C -:2010800043772B702B712B722B73C32F0CE5219E10CD7803E1CD770ECD1207C32F0C254DA1 -:2010A000756C742E204465662E20476C6F62616C20007EE640C0E52A03192B220319E1C91D -:2010C0005059CDE9123E02CD2C18424BC5AFCDF1127E2BDAF3104E2B46E640EBE1C20C1167 -:2010E0003A501AB7C22011EB7AB3CA2F0CCD5B14C32F0CEBCD4311E17CB5CA2F0C3A501A84 -:20110000B71BC22011EB722373C32F0C3A501AB7C220117CB5CA2F0CEBCD0418EBC3CB0D3B -:20112000EB7AB3CA2F0C23E5CDFD163A531A3DCA34113E80C642772B722B732BD1722B7333 -:20114000C32F0CE52A031923220319E1C9E521DF187E2334C25C11CD3E0736F8872B77E110 -:20116000C90E080600CD4D117817470DC26511C9AF32531ACD4D11DA7F11CD611137C90E4B -:2011800002CD6311B7CA8D11CDE011AFC9E50E04CD6311FE05F5DAA611FE0FCACF110E022F -:2011A000CD6311CDE011F1F5FE08D2CF11D50E03CD631121F018B777C2BC11342336205F79 -:2011C0001DFACE11CD6111E67F7723C3C011D1F12100FFFE0EC2DB1122DF184F3CB7E1C9A6 -:2011E000F532531ACD611158CD611150F1FE01CC111287E5CAFE11FE05D2FE11EE064F06E4 -:201200000021E118094E2346EB099F320219EBE1C9F53A501AB7CA2112AF320219F1E3E181 -:20122000C9F1C92F0C71124221BD0ED7201B0EC0104610C90ECA0E9D0E8712B30D431228C9 -:201240000F230F3A501AB7CC6A12D5CD9D13E122861AEB2AE518193EFF32891AEB2A5E1AEB -:20126000EBCDB40AD4DE14C32F0C2AE518EBC396053E80CDF112DA9B012B5E2B56CD0418CD -:20128000EB22E718C32F0CE1C5CDE9123A531A3DFAAA123C32541A3DC22F0C3A501AB7CA01 -:2012A0002F0C2AE51809E3C32F0C5059010200D537CD9F04D12A7E1AEBCD9605D2D21222FC -:2012C0007E1A210000CD96052AE5181922E5181100002A661A19C1E521000022561A7D32B2 -:2012E000891A3C32541AC32F0C3A0219B7C8C3A1012A621AC5F5EB2A6A1AEB7CAA477DABBF -:20130000B0CA43137EE6074FF1F5AEE6B8C2301311F0181A13A9C23013E5412B2B2B1ABE99 -:20132000C22F13132B05C21E13EBE1F1C1AFC9E17EB7F237130C0C79C6032F4F06FF030942 -:20134000C3F612C111F0181AF5C6034F78070781E5D55F1600CD9605EBCDD814D1E1F113C9 -:201360004FB0771AFE23C26C1332521AE5AF2B772B772B1A772B130DC27313D11AB7E5F23D -:201380008713AF772B772B226A1AEBD1C137C91D142B144014741495149514F7203A501A44 -:2013A000B7C8AF32501A2A5C1AEB2A661AD5EBCD9605EB444D2A561A0922561AEB2AE51843 -:2013C000E50922E518D12A5E1AD5CD9605424BD1E122661ACD9E17225E1A010000CD8605FA -:2013E000227E1A22821A2A601A22581AE5CDB520D12A681A7C92C2FB137D93CA1414EB7EF0 -:2014000087E60E5F160001F013C5E5218F13195E2356EBE92A581A22681AC30B21CDB914DE -:20142000E1E3E5CD0418EB712370C9CDB914E1E3E5CD0418EB5E712356707BB2C23114C996 -:20144000CDB914E1E3E5C5E1237EE640D52B5E2B56EBE3EBC27014C17BB2C8722373C5CDAE -:201460000418EB5E23567BB2C25F14D1722B73C9C1C33114CDB914E1E3E5C5E17E4FF640CD -:201480007779E6402B4E732B4672C5D5C1D1C07BB2C8C33114E1E57E32091ACDB914E1E387 -:2014A000E52A581A3A091AE607F6C0772B722B732B702B712B22581AC9E1E37E2B562B5EEE -:2014C0002B462B4E2BE3E52A7E1AB7FAD114EB19EBE640C009444DC93E06DA3E04DA3E0225 -:2014E000DA3E00C5FE04D2EE143C3201193D4F0600D5E5FE0321661ADAFE14215A1A095EDB -:201500002356E1FE03DA0A15E5EBCD9605F579FE03DA1715F1E1F5F1E5D22D1579FE033F60 -:20152000DA3415CD7D05CDB40A3FDA3415F5C5CD5415C1F1F579FE03215C1ADA41152164EF -:201540001A09F1D1D24D15732372C350155E2356EBD1C1C9E5D5CD4616D5CD9605DAA10189 -:20156000CAA101E1CD9D16217A1A0602702305C26C151100002A641AE5216C1A194E2346F1 -:20158000237E23666FE521741A19D55E2356EB09D1C1EBE3C519E509C1EBE1E3EBE5216870 -:2015A0001A197E23666FEBE3CDB40AD1D20F16E321661A19D55E71235670EBE3EBE1E3E5D5 -:2015C000215E1A19EBE3EB7E73235F7E7257E1E3EBD5CD9605E1E37DE3EBB7CAED15F53A39 -:2015E000551AB7CAEB150303030303F123CC1917E5C5E1C1E5CDB40AD4A917DC9E17E1D149 -:201600007B1F5FE5217A1A193600EB29EBC1C51C1C6069C17BFE04DA7815217A1AAF060251 -:20162000862305C22016B7C272152A721AEB2A621ACD9605EB226A1A2A6C1AEB2A641A1968 -:20164000225C1AD1E1C9C5D5215C1A79FE03DA541621641A095E2356010900FE03DA6316AB -:2016600001F5FF0946236668FE03DA6E16EBCD9605E119E50603215C1A110000D55E235647 -:20168000D5110900195E2356E3EBCD9605E1E319E311F7FF1905C27D16E1D1C1C979010045 -:2016A00000D5E5215C1A095E2356D5110700195E2356E1F5CD9605F1B9C2C016E1E519EBD2 -:2016C000216C1A097323720C0C4779FE08780600C2A316E121741A0603E3CDE816E37323BB -:2016E000722305C2D916E1C978D601CAFB167C1F577D1F5FD5CD9605EBD1EBEBC9D5C501AB -:20170000FBFF7832551A2A681A09B7CDDB14AF32551A11050019C1D1C9EBE579956F789C53 -:2017200067D5EB2A561A1922561AEB2AE5181922E5182AE718195059CDB40ADA411722E742 -:2017400018D1E1EBC9D53A541AFE03CA61173DC25717EB2A561A19EB21000022561AEBD1E6 -:20176000C9E5EB2A561A19EB2A661ACDB40AE1D25717EBC35717CD4517C28A17D5EB2AE565 -:20178000187B954F7A9C47EBD1C9E5D5EB2A641AEBCD96052A7C1A19444DD1E137C978B10B -:2017A000C81A7723130BC39E1709E5EB092B1B78B1CA67067E121B2B0BC3AF1778B1C81A1A -:2017C000771B2B0BC3BC173A531A373DF8E5C5FE02CC2318EE01874F0600B7CAE6173A5014 -:2017E0001AB737C2F217EBCD7D05CD9605CD600519EBC1E1C93F496E74657273656374697A -:201800006E672000F5C5E501FF00CD6D06D21F184FD5CD7D05CD6005EBCD9605E119EBE12D -:20182000C1F1C92A5C1ACDB40A9F3CC932DE18CDC717D8E5C53A531AFE023F9FE602060096 -:201840004FCA4B183A501AB7C2F217CD6005CDB40AD2F217CD8605EBCDB40AEBD2F217E5D5 -:2018600021F517CD69063E2CCDD8062ADE18260011D8184D195E2356EBCD780379B7C288B9 -:2018800018E1CDA718C3B30121F01846237E23CDD80605C28D183E28CDD806E1CDA7183E46 -:2018A00029CDD806C3B3013A531AFE029FE602CD7D05CD9605C3280B205374617274203D77 -:2018C00020002045787465726E616C2000205075626C6963203D2000B818C218CD180000DA -:2018E0000000000000000000000000000000000000000000000000000000CF2300000000F6 -:20190000000000000000008000000000000000000000000000000000000000000000000047 -:201920000000000000000000000000000000000000000000000000000000000000000000A7 -:20194000000000000000000000000000000000000000000000000000000000000000000087 -:20196000000000000000000000000000000000000000000000000000000000000000000067 -:20198000000000000000000000000000000000000000000000000000000000000000000047 -:2019A000000000000000000000000000000000000000000000000000000000000000000027 -:2019C000000000000000000000000000000000000000000000000000000000000000000007 -:2019E0000000000000000000000000000000000000000000000000000000000000000000E7 -:201A00000000000000000000000000000000000000000000000000000000000000000000C6 -:201A20000000000000000000000000000000000000000000000000000000000000000000A6 -:201A4000000000000000000000000000000000000000000000000000000000000000000086 -:201A6000000000000000000000000000000000000000000000000000000000000000000066 -:201A80000000000000000000000000010200CD6F050E00C29C1ACD6F0532011911030121B9 -:201AA00003023A0119B7C8CD6F05CAB91ACD6005CD131BCD8605CD131B0C0C79FE04C2A7F4 -:201AC0001A2A7C1AEB2A7E1ACDB40ADC831C2A641A110001010400CD8E1B0E00CD69050CEF -:201AE0000CCD7D05E5CD6905CDB40AE1C2F61AEB2AFA18EB0E02EBCDB40AD48E1B79FE029F -:201B0000C2DC1ACD6905EB2AFA18CDB40AD48E1BC3A101110001CDB40ADA2F1BEB2AFA1856 -:201B2000CDB40AEBDA281BC9E5215B1BC3331BE521551BE521611BCD7803E1CD78032169C9 -:201B40001BCD7803AF324F1ACDA103CD8203FE59E1C8C3310262656C6F770061626F7665F9 -:201B6000004F726967696E2000206C6F61646572206D656D6F72792C206D6F766520616E9B -:201B8000797761792859206F72204E293F00C5D5010200EBCD8605D5EBCD6005CDB40AEBDB -:201BA000D1CAAA1BCDB40ADCBE1B0D0DF2941B0E04210001CDB40ADCBE1BEBD1C1C9C5E566 -:201BC00079B7C2CD1B3A511AB7CAD11BAFC602FE042AFA18CAFA1BDADB1BAF4FCD6005D5B0 -:201BE000EBCD8605CDB40AEBD1C2FA1B79B72AFA18C2FA1B217E1ACD6305CDB40AD2011CD9 -:201C0000EB21060039F9E1E53B3B3B3B3B3BEBCDB40ADA3F1CE3CDB40ADA1D1CEBE1D5CDBE -:201C200096057AB7D1CA431C01252037CD461CDA391C04CD461CCA431CC1C1C1C1C1C9D148 -:201C4000EBC1C9EBC1C9C5D5E5C5E1F5CDB40ADA7D1CF1D1D5F5EBCDB40ADA7D1CF1D268E2 -:201C60001CE1C1C5E5C5E1EBD5CD96057AB7CA771CD1C1C1C137C9D1E1D1C1AFC9C1E1D15D -:201C8000C1B7C92A5C1A22E3182A5E1A22E5182A641AEB2AE318CD9605C2A31CB3CA431D07 -:201CA000F2A51C1E804B060050C52AE318E5CD9605EB22E318EB218919CD9E17D12A5C1A52 -:201CC000D5CD9605424BB1D12AE318C49E172A661AEB2AE518CD9605C1C5C2E61CB3CA2807 -:201CE0001DB9D2E61C4F2A5C1AD1CD96052A661AC5EBCD9E17225C1A2A661AD1D519EB2A20 -:201D0000E518CD9605424B2A661AD1D5EB19EBCD9E172AE518D1D5CD9605EB22E518118937 -:201D200019C1CD9E17C38F1C50592A5C1ACD9605EB225C1A2A661AD1D5CD9605EB22661A60 -:201D4000C3121D2A661AEB2AE518CD9605DA601D424BB32A661AEB2A5C1AC49E17225C1A90 -:201D60002A7E1AEB2A7C1A227E1AEB227C1A2AE51822661A2AE31822641AC9FE20C8213704 -:201D80001A01B21DC57EFE52C0237EFE45C0237EFE4CC0060311AE1D3A0619E610CAA31DF9 -:201DA00011B11D1A772B1B05C2A31DC9434F4D48455801DA1DC51189190E1ACD0500112EB0 -:201DC0001ACD6E070E13CD0500112E1A0E16CD05003CCA881FAF325A1AC90100003A511AF4 -:201DE000B7CAF91DCD6F05CAF71D2A7E1AEB2A7C1ACDB40ADAF91D0E022106197EE608CABF -:201E0000061E11BA0AD57EE610CACC1ECD3F1E79EE024F3A511AB7C43F1E3E3ACD5E1FAFFC -:201E200047CDAB1E2AF818CDA61E3E01CDAB1EAF90CDAB1ECDC21E3E1ACD5E1FC3201FCD32 -:201E40008605EBCD6005EBD5CD96057BB2E1C8C5E5CD7D05CD6905EB7DC61C4F7CCE00477E -:201E60007B914F7A98DA6D1E3E1CC3701E79C61DB7C2771EC1C1C94F06003E3ACD5E1F79A0 -:201E8000CDAB1EE3D5CDA61E16005919D1E3AFCDAB1E7E23CDAB1E0DC2921EAF90CDAB1E57 -:201EA000CDC21EC3581E7CCDAB1E7DF50F0F0F0FCDBC1EF1F5CDBC1EF18047C9CD610BC3CB -:201EC0005E1F3E0DCD5E1F3E0AC35E1F2AF8181100017CB5CAFF1ECDB40ACAFF1E1103017D -:201EE000CD6005CDB40A110001DAFF1E3EC3CD5E1F2AF8187DCD5E1F7CCD5E1F110301CD28 -:201F0000341FCD481F3A511AB7CA201FCD8605EB79EE024FCD6F05CA201FCD341FCD481F3C -:201F20003A5A1AB7C4781F112E1A0E10CD05003CCA881FC9CD6005CD9605D8B3C8AFCD5E5B -:201F40001F1B7AB3C23D1FC9CD7D05CD6905EBCD96057AB3C87E23CD5E1F13C3521FD5E575 -:201F6000F52189193A5A1A5F160019F1777B3CFC781F325A1AE1D1C9C5112E1A0E15CD0587 -:201F800000B7C2881FC1AFC9218E1FC3A4013F43616E27742073617665206F626A65637460 -:201FA0002066696C6500E513212920CD9D20212F20CD9D20213220CD9D202138200606CD2C -:201FC0009D20232305C2BF1F23230603CD9D20232305C2CC1F23CD9D20217920CD9D202176 -:201FE0008420CD9D20D52A641A228820EB2A5C1ACD9605EB2286202A7C1A228A202A661A90 -:20200000228E20EB2A5E1ACD9605EB228C202A7E1A229020D1E1C1F9C5EB112520016D00CE -:20202000C325200000CD9220C32B20010000CD5520DA4620010600CD5520D46B20DC7B2069 -:20204000CD5520C36B20CD7B200E06CD5520D46B20DC7B20C9218620094E2346235E235612 -:20206000237E23666F7C92C07D93C909EB092B1B78B1C87E122B1B0BC3702078B1C81A7736 -:2020800013230BC37B2000000000000000000000000078B1C81A7713230BC39220C5E5D5EA -:2020A0007E23666F112520CD9605EBD119E5C1E1712370C1C93A4121B7C8E5D12A681ACDB8 -:2020C000B40AC8EB7EE607FE0301BB20C5E5CA7414CDB914E1E3E9CD1A213AF21832402125 -:2020E0002AE318225C1AAF32881ACDFD1636C62B3A402177C32F0CCDB914E1E3E57AF5CD0A -:202100001A21F1324021B7C8C336213A4121B7C8CD1A212AE318225C1AC93A4021B7C83272 -:202120004121010000CD6F05EB2AE3187223732B3A4021C368212AE318CDA121225C1AC9BC -:202140000000AF32402132412121AF2301072070230DC24F2121F0184E2311AF237E12238C -:20216000130DC25D21C32F0CE5D5722373CD0B23CDEE22D17BE67FCA84217BE680C6805FC1 -:20218000D28421147AB3E1CA9D21D5E5CDC622E111800019E31180FF19EBC38421CDA222B4 -:2021A000C9E5CD0B23CDD922212D23CDB322212D2356235EE1CDF521DAEC21D5118000CD75 -:2021C000FD21D1E52180FF19EBE1CDF521DADD21D5E5CDB322E111800019C3C2217AB3CA67 -:2021E000EF21E5212D23D5CDB322D1E1CDFD21E5CDA222E1C97AB7C07BB7F837C9012D23D9 -:202200007AB3C80A7723031BC30022E60FC630FE3A77D8D6F977C93AAD23213A22F5CD0B4D -:20222000222BF11F1F1F1FCD0B22213022C378033F5365676D656E74202020202C200066F5 -:20224000696C65206E6F7420666F756E640063616E2774206372656174652066696C650076 -:2022600072656164206572726F72004469736B2069732066756C6C00CD1722213F22C3A42F -:2022800001CD1722214E22C3A401CD1722CDA222216022C3A401CD1722CDA222216B22C394 -:2022A000A401112D230E1ACD05000E1011AE23CD0500C90E1AEBCD05000E1411AE23CD05C8 -:2022C00000B7C28A22C90E1AEBCD05000E1511AE23CD0500B7C29622C90E1A112D23CD05FF -:2022E000000E0F11AE23CD05003CCA7822C90E1A112D23CD050011AE230E13CD05000E1650 -:2023000011AE23CD05003CCA8122C9F532AD2321B923CD0B22F11F1F1F1F2BCD0B220E15F4 -:202320002323AF32AE2377230DC22623C9000000000000000000000000000000000000002A -:2023400000000000000000000000000000000000000000000000000000000000000000007D -:2023600000000000000000000000000000000000000000000000000000000000000000005D -:2023800000000000000000000000000000000000000000000000000000000000000000003D -:2023A000000000000000000000000000000000000000000000002056202000000000000067 -:2023C0000000000000000000000000000000001000000000000000000000000000000000ED -:2023E0000000000000000000000000000000000000000000000000000000000000000000DD -:202400001C24876F260009E55E23562A4D38CD360DD1D8EB732372AF326138C92A55382323 -:2024200023C30724F53A6A37B7CA43243A6138B7CA4324C5D5E52A4F38EB010B00CDD0193B -:20244000E1D1C1AF326138F1C9CD5A19CD7B0BCDE90AFE22CA5C24FE27C2D82447CDDC0A3B -:20246000CDDC0A2AC1372B2BE5B80E00CA7C240CCDDC0AFE0DCA8324B8C26F24CD9D0AB8A8 -:20248000CA6F24CDE90ACD7B0BFE2CCA9924FE3BCA9924B8CA9924FE0DE122C137C2D82458 -:2024A00079FE02DAD824CDD60A47CDDC0ACDDC0AC3BB24C5CDD315C1CDDC0AFE0DC8B8C296 -:2024C000B324CDD60AB8CAD224CD9D0AFE2CCA4924C9CDD315C34924CD030FF53A2439B75B -:2024E000FA1317F1CDD31579FE2CCA4924C9CD491EF578E683C4AA04F1C9CD5A19CD7B0BA6 -:00000001FF diff --git a/hex/m80.hex b/hex/m80.hex deleted file mode 100644 index b3c2666..0000000 --- a/hex/m80.hex +++ /dev/null @@ -1,578 +0,0 @@ -:020000040000FA -:20010000210A01C3B7404D41430022F539AF018B02216A375F73230B78B1C2150121664809 -:2001200022BC37772424242422EB390120000922ED392100F822293921F7391162387EB71D -:20014000CA6B01F5E607124F23137E120DC24801E5CDA80CD1F17723131A1336202377EB6B -:20016000C33B01CDB5443E01326A37AF32D53932E63832A937327137327237326138327332 -:200180003732C939325E38214D38060A772305C28C013C32A63732AA3732AB37324C383E22 -:2001A0000A326F373A543A3269373E3132AE373C32AD3721010022AF372B22E4392B22B159 -:2001C000372AF539F921B402E5211E02E5AF32363932A73732B43732CA39CD1A04E1E50151 -:2001E000E401C5E921C33722C137010C847EB9CC050223FE0DCAFC0105C2ED01C1E1E5C5A6 -:20020000012D04C5E9F5E52AAF372322AF3721FFFF22B1373AAD373D32AE37E1F1C921B4DE -:20022000373E0132DF3932DE390E06CD7E02FE0ACA2B02CDAE02CA2B02B7F25402E67F0C71 -:200240000DCA2B02CDAE02CA2B02FE30DA2B027723C32B020E8321C337FE0ACA76020D0C58 -:20026000CA660277230DFE0DC27602773AB437B7C83D32B337C9CD7E02E67FC359023AA871 -:2002800037B7CA9002CD2548D0AF32A837CD6548CD3546DA9702C921CF04CD97403E0D3237 -:2002A000C337CD1F443E0ACD1F4437C37A29FE0CC0C3050221000022BE37AF32AC373D3200 -:2002C000CA392A55382259383AC337FE2AC2D5023E2432C337D62432C037CD080BC2E8037E -:2002E000FE3ACA69033AC037B7C20C033A62383DC20C03CD080B06082162387EB8D2010340 -:2003000034233E244E77792305C204032AC1372B7E23FE0DCA9A03E5CD0604CD080BCDFD2F -:2003200004C25F037EB7F25F03237EFE22CA3A03FE1CCA3A03FE0DC25F03E1F53AA637B750 -:20034000CA4204CD0604F1F5FE1CCA5103B7CDA80CF1FE22CA4829FE1CCA9C32C31729E17E -:2003600022C137CD0604C39A033AA637B7CA9403CD5A19CDA80C22BE37EBCD9319EBF620C0 -:20038000F5CDD60AFE3AC29003F1F640F5CD9D0AF1CD840DCD080BC2E803CDE90A3AA637EB -:2003A000B7CAAA03CDC10BCA5F33CDFD04C2E803B7F53AA637B7C2C303F1F24304F5E66038 -:2003C000CA4204F1F2D603237E21C509875F1600195E2356EBE91F1F1FE60F234EF5CD5A22 -:2003E0001921A709F1C3CC03FE3BC8FE0DC821C33722C1372ABE377CB5C4080B3AA637B792 -:20040000CA4304C34924216238116B3806094E1A777912231305C20E04C921803822743834 -:20042000217638012020712305C22604C9CDE90ACD7B0BE5FE0DCA4304FE3BCA4304CDA48F -:2004400004F5F1E13A6A37B7C26E043A7638FE56CA6204FE4DCA6204FE44CA6204FE58C29A -:20046000CD01323639CD3F19CDB517C3CD01CD7717C3CD01C50641C3BF04C50643C3BF04AC -:20048000C50644C3BF04C50645C3BF04C5064DC3BF04C5064EC3BF04C5064FC3BF04C50689 -:2004A00050C3BF04C50651C3BF04C50652C3BF04C50655C3BF04C50656C3BF04C50658E5CC -:2004C000F52176387EFE20C2CB0470F1E1C1C94E4F20454E442053544154454D454E5420D6 -:2004E000454E434F554E544552454420494E20494E5055542046494C4500C398043A6338E5 -:20050000FE2ECA7205FE24CA7A05FE5B3CD0D642B7F887C5D55F1600218005195E2356EBC0 -:200520003A62383D4F7EB7CA6E05B7FA43053A6937B77EC23E05FE50D24305C36205FE50FC -:20054000D26205E607B9C26205116438E54123231ABEC26105231305C25005E1AF7ED1C188 -:20056000C9E17EE607C6025F160019C32505D1D13CC9211F09C5D5C32005218F09C37505BB -:20058000B405E305E8054D069B06E506E606EE06F8065E0785078607B407CA07DC07080813 -:2005A0002C082D08A908FC0803090409050906091D091E092ACE43491A8844435200444314 -:2005C0001A804444520244442AC644491AA04E4152044E442AE64E4983005345478322536E -:2005E0004554005A0649540033CD414C4C5308414C4C31DC436A3F434631FC4D022F4D419D -:20060000023F4D431AB84D5032D44E4332C44E5A85014F4D4D4F4EC3144F4E4431F45051DB -:200620000A5072A9504473B950445232EC50452AFE504972A1504973B15049526A2F504C3B -:2006400032E4504F830253454731CC5A00022741416A27414112094144810342810443221C -:20066000054352120B4358520C45438303454642832245464C830345464D8305454653832C -:200680000745465701F34969F349530E4A4E5A81055383065345478107570001FB4969FB73 -:2006A00049C3084C534582094E44A30A4E4443A40A4E4449468B0B4E444D840C4E54525982 -:2006C000820D51555110586AD95858840E5849544D820F5854870F585445524E414C8410E0 -:2006E0005854524E000085204C4F42414C006B76414C5402764C5400C11146C2324642C26F -:20070000124645C2134646C333464E42C214465461124D29DB4E51144E52164E4386384ED5 -:20072000434C55444572AA4E4473BA4E445272A24E4973B24E495222044E5212034E58C291 -:20074000154631C2164632C41746444546C518464E44454692195250931A5250430031DAA3 -:200760004331FA4D32C34D5032D24E4332C24E5A31F25051185032EA504532E2504F511A00 -:200780005231CA5A0000511C44323A44410B0A44415872A8444473B844445272A044497365 -:2007A000B0444952332A484C44841B4F43414C4A01584900853841434C4942941C4143522D -:2007C0004F3A404F564206564900831D414D457244454702004F506A004F5000511E521A8A -:2007E000B05241821E52472AF6524973BB54445273B35449522AD355545220555473AB5561 -:20080000544473A355544900831F41474503E943484C12C14F5052224F50852055424C49B0 -:200820004313C5555348532455534800000217414C021F415201D84393214550545A26456E -:200840005302C9455452284554734D455449734545544E0220494D592A4C6A174C410207EF -:200860004C435A2C4C436B074C4341726F4C4401F84D02D04E4302C04E5A01F05002E85093 -:200880004502E0504F592E526A1F5241020F52435A3052436B0F5243417267524422C753DD -:2008A000545232535401C85A001A9842422ADE4249523442436A3743465A36455482224586 -:2008C000543322484C440230494D5A384C4103F950484C5A3A52415A3C524C323254410B71 -:2008E00002544158023754431A905542523E55428523554254544C2AD655490084244954BB -:200900004C450000000003EB43484752404F521AA852412AEE524903E354484C00000084F9 -:20092000363830383083375A38308725434F4D4D454E54842643524546872744455048419C -:20094000534584284C414C4C84294C495354852A5041535332852B5048415345862C5052B8 -:20096000494E5458852D5241444958873552455155455354842E53414C4C842F58414C4C63 -:20098000853058435245468531584C49535400851F454A4543548738494E434C5544458589 -:2009A000345449544C4500220E290E380E470E530E620E700E7C0E9D0EB90E200F230F26AD -:2009C0000F220E1D0EAB238528C4234924FA244425D9236B25AA257A297E251830C72698E9 -:2009E00004FE2FD428D42808261026102608261D2627263126322655315331183098043A9F -:200A0000283A23B627C726332F9804F926F02656325527283464274627FA04093428328ADD -:200A2000276C2773275C274E276C266D262427E2277B2783270D280488068000A002400C70 -:200A4000CD00B8080516101E000A461A00080410C31218220000B01C0020C120C502800E09 -:200A600000141014001418140818C7049802C0142014281438009000A8F51244122C1375B4 -:200A800013A9123B0FFB0F850F1C1048105812B9105B0F8F113D11D2116D0FD613E52AC179 -:200AA000377E2322C137FE0CCA9E0A6FFE41D2C30AFE30DABB0AFE3ADAC00A379F7DE1C9D5 -:200AC000B7E1C9FE5BDAD20AFE61DABB0AFE7BD2BB0AAF7DE1C9CD9D0AC3E90ACD9D0AF52F -:200AE000FE0DC21317CD9804F1E52AC1372B22C137E1C92AC1372322C137C9CD9D0AC0FE55 -:200B000061DA060BD620BFC9CD7B0BCDE90A216338012008712305C2140B21623836002385 -:200B2000CD640BC4B50B3265370E00FE61DA320BD62077230C79FE08CA520BCD640BF22B08 -:200B40000BCD8D0BD24A0BF22B0B4779326238AF78C9CD640BF2520BCD8D0BD24A0BF252FF -:200B60000BC34A0BCD9D0AF0FE24C8FE2EC8FE40C8FE3FC8FE5FC82FB72FC9CD9D0AF0FEA0 -:200B800020CA7B0BFE09CA7B0B2FB72FC9F5B7CA970BFE26C213173ACA39B7C2A00BF1C96D -:200BA000F1CD640BB7CAA10BFE26CAA10BCDE90ACD640B37C9CD8D0BD2BC0BC8C10E004769 -:200BC000C9214D393A6238F5CDDA0BCAD50BF1326238B77EC9C1C9218939CD920C060009DE -:200BE00009224B395E23562142390609AF772305C2ED0B2162387EFE06DAFE0B36062162DD -:200C0000384E0D7AB3CA740CEB5E2356D5235E2356D5E5237EE6073DCA2E0C11070019116E -:200C20006438471ABEC2410C231305C2230CE1237EE6073DB9C26E0C22BA37237E2BC1C1BC -:200C4000C93F9FE602E1F5EB1B1B1BF5D511453921423906061A77231305C2550CD1F177CA -:200C600023732372F1E1D1CA030CEBC3030C2B3E02C3460C3C2ABC377EC92AE9392323233B -:200C8000237EE60737C8E5C60616005F1922E939E1C93A6338FE240E00C8FE2E0E01C8FECC -:200CA0003F0E02C8D63D4FC9F5CDD70B22BA37C1F5C5F1CD3C0DF1C8E52A4939EB7AB3CA8D -:200CC000770D3A4839EB06004F09D1732372EB0E04AF77230DC2D20C22BA371162381AFEEA -:200CE00006DAE60C3E0677472313AF77237723772323231A77231305C2F30C22BC3723233F -:200D000023237011000119EB2AEB39CD360DDC97352ABA377CB73E00C921220DCD9740C3F5 -:200D2000000153594D424F4C205441424C452046554C4C0D0A007C92C07D93C9F53A583A82 -:200D4000B7CA13173AA937B7C213173A6A37B7CA13172ABA377EE640C21317F1DA620D3E82 -:200D600082DA3E81CDA745E521623846237ECDA74505C26C0DE1C92A4B39C3CA0CF5CDC1AB -:200D80000BC3AC0C477EE638C2AB0D237EE620C2BA0D2B7EF68077237EB077237323722394 -:200DA000D5EB2A5938EB732372D1C97EE607773A6937B7CCA40423C3920D7EE694C40A0EEB -:200DC0007EA8E603C40A0E23D55E235623E3CD360DC4FB0DD1E52A5938EB78E603FE03C2F7 -:200DE000ED0D7BBEC40A0E237ABEC40A0ED13A7638FE202ABA3723CA920DC93AAC37B7C2D0 -:200E00000A0E2ABA377EB7F29E04E5F52ABA37237EF6107778F61047F1E1C38C043EEDCDE1 -:200E2000D31579CDD315C3F30AC5CD030FCDDF0E878787C181C3D315C5CD030FCDE90E870D -:200E40008787C181C3D315C5CD030FCDFB0EC181C3D315C5CD030FCDFB0EC187878781C31C -:200E6000D31579F5CD030F4FF1CDD31579C3D31579F5CD3D29F1CDD315C33516C5CD030F2B -:200E8000CDFB0EC1878787814FC5CDD30ECD030FCDFB0EC181FE76CC7404C3D315C5CD03F4 -:200EA0000FCDFB0EC187878781F5CDD30ECD030F4FF1CDD31579C3D315C5CD030FC1CDE9C0 -:200EC0000E87878781F5CDD30ECD3D29F1CDD315C33516CDE90ACD9D0AFE2CC49804C9B726 -:200EE000C8FE02C8E602C37404FE07F5D2F40EE601CAF70ECD7404F1E606C9FE08D8E60705 -:200F0000C37404CD3D297AB7CA120F3CCA120FCD74043A2739B7FC8604E603C474047BC99B -:200F200006001106CB1106ED59160021370A195E234E21790A195E2356EBE9C5CD030FFE02 -:200F400003D47404CDC915C178CDD3157BFE013FCE00E60387878781C3D315C5CD030FE6EE -:200F600038BBC47404CDC915C181C3D315C5CD0E11DC7404E608C4A90FC1CD23113A6737A1 -:200F8000E606C3540FCD491E3A2839B7C2A40FCD00113A6637FE30C4B90F3A6737E6070E02 -:200FA000C0C3540F3EC9C3D3153A6737E620C6DDCDD3153E04326737C9FE10C274043A679F -:200FC000373CFE02CACD0F3DFE06C274043C326737C9C5AF326837CD7B0BCDE90AFE28C268 -:200FE000E50F326837CD3D2979D62CC1B7C0CD00113A6637FE30C4B90F37C9CDD20FD21542 -:20100000100EC43A6737878787E638814FC5CD3D29CDC915C179CDD315C33516CDD20FDA6B -:2010200043103A6637FE203FD21510FE28CCA90FCD1B113A6737FE04C47404CD00113EE974 -:20104000C3D3150EC2C30310CDD20FD263103A6737FE04D47404E603878787C6204FC5CDE1 -:201060003D29C1CD6F107948CDD31579C3D3153A273947E680C28604CDC91578E60347CDB0 -:201080009319B8C2AA04FE03C29A10D52A5538EB2A5938CD360DD1C2AA04CD93192323EBE2 -:2010A000CD02347AB743CAB3103CC2740478B7F27404C978B7FA7404C9C5CD3D29C1C3630B -:2010C00010CDD30EC5AF326837CD7B0BCDE90AFE28C2D710326837CD3D29C13A6637B7C810 -:2010E000FE30CC74046F3A6837B77DCA0011FE28C200117AB7CA05113C57CA0511CD740465 -:201100007AB3C474043A2739E6DFC4AA04C9CDC4103A6637B7CA7404FE20C93A6837B7CC18 -:201120007404C93A6837B7C47404C9CDC4103A6637FE10C03A6737FE08D8C37404CD2B1199 -:20114000CDD30ECD1B113A6637FE10CA6F11B7C47404CDF3103ED3CDD3157BCDD315CD0E25 -:2011600011D474043A6737FE07C47404C323113A67373DC47404CD0E11D47404CD23113E3A -:20118000EDCDD315CD2311CD2E110E41C3540FCD0E11D47404CD2311CD2E11F5CDC110CD86 -:2011A0001B113A6637FE10CAC011B7C474043EDBCDD315F1FE07C47404CDF3107BC3D3159A -:2011C0003A67373DC474043EEDCDD315F10E40C3540FCD0E11DC7404CDD30ECD2E1ECA1296 -:2011E000123A6737FE02CA2612FE06C47404CD1B11CD0E11DC7404CD2311CD00113A6637D4 -:20120000FE28CCA90F3A6737FE04C474043EE3C3D315CD2311CD0E11DC7404CD2E1EC474B0 -:20122000043E08C3D315CD2311CD0E11DC74043A6637FE20C474043A6737FE04C474043EF3 -:20124000EBC3D315C5CD030FFE08D47404E607878787C1814FCDD30ECD2B11F637F53A6676 -:2012600037FE28F5CCA90FE1F1E5F53ECBD4D315F1DA7A12F17BCCD315F5F53A6637B7CC6C -:201280007404E6203A6737C2941281CDD315CD2311F1F1C9FE04C474043E0681CDD315CD29 -:2012A0001B11F1D21317C3EF12CD2B113A6637B7CC7404FE10CAE212FE28F5CCA90F3A676A -:2012C00037FE04C2CD123A6837B7C2EA12CD2311F1790DFE05C2DA120E0B3A6737E606C31D -:2012E000540F3A6737E607C3540F3E06CDE512F17BCCD315C9CDC4103A6637B7CA1F13FE86 -:2013000010CA1613FE28F5CCA90FCD1B113E0681CDD315C3EF123A6737E60781C3D3153EC5 -:201320004681CDD315CDF3107BC3D315CD0E11CDD30ECD23113A6637FE10CA6A13FE20C492 -:2013400074043A6737FE04C474043EEDCDD31579EE101FE608C6424FCD0E11C47404CD2E21 -:201360001ECC7404CD2311C3DA123A6737FE07C47404C3F512CD0E11CDD30ECD23113A663D -:2013800037FE10CA6A13FE28CA98133A6737FE04C474040E09C358133A6737F5CDA90FCDAC -:2013A0000E11DC7404F5CD2E1ECC7404CD23113A6737FE04CC740447F178CAC513F1B8C48A -:2013C00074043E04F5C1E6060E09C3540F3A6637FE10C47404C9CDC4103A6637B7CA11146C -:2013E000FE10CAE4143A6837B7CA71143A6737E606FE04CA4915D47404F5CDC410CD23116D -:20140000CDCD133A6737FE07C474040E02F1C3540FD5CD1B113A2239F53A2739F5CDC1105A -:20142000CD23113A6637B7CC7404FE20DA61143A67374FE606FE04CA51143EEDCDD31579CF -:201440000E43CD540FF1322739F1322239D1C335163A6637FE28CCA90F3E22CDD315C3458D -:20146000143A6737FE07C474043E32CDD315C345143A6737F5CDC1103A6637FE20D2A11417 -:20148000B7C474043A6837B7C2BA140E01F1F5E660C69DFEC0D4D315F1E606CD540FC3351C -:2014A00016C4A90FF1FE06C47404CD23113A6737FE04C474043EF9C3D315F13267374FE67A -:2014C00006FE04C2D41479FE40D4A90F3E2ACDD315C335163EEDCDD31579E6060E4BCD542D -:2014E0000FC33516CD23113A6737FE08D22D15F5CDC1103A6637B7C20E153A6837B7C27410 -:2015000015CDF3100E06F1CD540F7BC3D3153A6637FE10CCAB15FE20C223153A6737FE0428 -:20152000DA8215F1878787C6404FC35C12F5CDC110CDCD133A6737FE07C474043EEDCDD30A -:2015400015F1E6010E47C3540F3A6737D5F5CDC110CD2311F1F5E660C69DFEC0D4D3150ECB -:20156000703A6637B7CA9315CD5C12F1D1FE407BD4D315C9F1FE07C474043E3ACDD315C39E -:201580003516CD1B11F1FE07C474043A67370E0AC3540FCDF310CD23113E36CDD3154BF189 -:2015A000D1FE407BD4D31579C3D3153A6737FE084F3A6637D8E1F1FE07C474043EEDCDD307 -:2015C0001579E6010E57C3540FF53A6637B7C4A404F1C9473A6A37B7C4E815E52A4D382311 -:2015E000224D38E1C2321AC9E5D5C5F5CD24242A7438118C38CD360DC5D47717C12A74388A -:20160000EB3A5A3AB7CA2F1660AF298F298FC63012130602AF0E03298F0DC21716C630122D -:201620001305C21416EB23227438F1C1D1E1C9CD6017C325163A6A37B7C41517E52A4D3845 -:201640002323224D38E1C83A273947CDDF163A273947CDAA192A7438E683C26916232274A7 -:201660003843CD321A42C3321A78E680C5C2801678E603FE02FA9116CA8E163621C3931657 -:20168000362AEB2A253923237E23666FEB013622013627C12323227438CDAA1978E603C58E -:2016A000CAD416CD451A43CD361A42CD361AC178E680C82A4D382B2BEB2A2539233A4C38CB -:2016C000477EE6FCB0772373237223EB2A5738EB732372C943CD321A42CD321AC3AE16F55B -:2016E000B7F213173A23393227393A2239B7CA1317E5C5D578CDAA19E603C2FF167AB30E2D -:2017000009C4D019AF322239D1C12A2539237E322739E1F1C9F5E5D52A7438118838CD3696 -:201720000DD477172A7438EBE1E53A5A3AB7CA5417AF29CE301213C50605AF0E03298F0DA9 -:20174000C23D17C630121305C23A17EB227438C1D1E1F1C9C544CD601745CD6017C34B175F -:20176000781F1F1F1FCD691778E60FC630FE3ADA7417C6071213C9F5C5D5E5CD3F193AABEF -:2017800037B7C28A173A7638FE20C4B5173A7638FE20CAA6173A7F3A3CCAA617323639CDB1 -:2017A000B517AF3236393C32A737CD1A04CD5A19E1D1C1F1C93AC939B7CAE1173DC2C717D7 -:2017C0003ACA39B7CAE1173E2B3290383AAA37B7FAE1173A7638FE20C2E1173A7838FE2064 -:2017E000C83AA837B7CAED173E43328F383A3639B7C21F183AAB37B7C201183A7638FE20FC -:20180000C821AE37343AAD37BECC99183A3639B7C21F183A583AB7CA1F183E83CDA74521F5 -:20182000763806207E23CD8D1805C224183AA737B7C283183AC9393DFA4C18C245183ACA98 -:2018400039B7CA4C183AAA37B7CA831821B43706067E23FE30DA5F18CD8D1805C251183E1B -:2018600006B8C26C183AB337B7CA71183E09CD8D1821C3377E23FE0DCA8318FE0CC48D18DE -:20188000C374183E0DCD8D183E0AC38D184F3A3639B779CAA745C31F443E0432AE373AAB4A -:2018A00037B7CAB6183E0CCDA745219638CDFE18212019CDFE182AAF37237CB52BF53AAB27 -:2018C00037B7CACD18F1F5CAF618CD0819F12AB1372322B1373AAB37B7C87CB5CAE7183EBC -:2018E0002DCDA745CD0819CD831821E638CDFE18CD8318C383183E53CDA745C3CD187E2331 -:20190000B7C8CDA745C3FE1801F6FF50580913DA0D19E5EB7CB5C40B193E3AC181C38D18F1 -:20192000094D3830095645525320312E312009202020202020202020095041474509003A3E -:201940007638FE20C8FE51CA52192A6B3723226B37C92A6D3723226D37C9CD9319F53A6A61 -:2019600037B7CA13173A7838FE20C21317F1EB217838227438CD1517E603C54F0600218F6A -:2019800019097E2A743877218038227438C1C9202722212A4D383A5E38B7CAA619D5EB2AF6 -:2019A0005F3819D1AFC93A4C38C9F5C578E603FE03C2CD19D5E52A5738EB2A5938CD360DBA -:2019C00022BA372257380E01C4D019E1D1C1F1C9C50600CD451A413E04CD161AC179FE05A6 -:2019E000DAF719FE0FC83E02CD161A43CD361A42CD361A79FE08D0E52ABA377EE6074757D4 -:201A00003E03CD161A23232323232346CD361A2315C20B1AE1C9D5573E0892CA261A5F78A5 -:201A2000871DC2201A47788747CD511A15C2261AD1C9AFCD511AC50E08781747CD511A0DB3 -:201A4000C2391AC1C937CD511A781F1FCD511A781FE52129397E17772334C2651ACD0E46C6 -:201A60003EF8322A39E1C9C5CD080BC1CA4C1CF2101BFE20CA671AFE09CA671AFE27CACCC6 -:201A80001AFE22CACC1AFE28CAB51AFE29CAB81AFE2BCABB1AFE2DCABE1AFE2ACAC11AFE7A -:201AA0002FCAC41AFE3BCAB31AFE2CCAB31AFE0DC49804AF113E02113E03113E08113E0952 -:201AC000113E0A113E0B113E01FE01C9210000C547CDDC0AB8C2E21ACDD60AB8C2021BCDD4 -:201AE000DC0A6F322439CDDC0AB8C2F81ACDD60AB878C2FD1ACDDC0A656FCDDC0AB8C1C397 -:201B0000771B1124391AB7C20C1B3D1278C3FD1A2AC1372BE5CDFB0AF2151B3224392AC1CA -:201B2000372B2B22C137CDFB0AE122C137C2041CFE47D2511B673A6F37FE0ED2041C6F7C9C -:201B4000FE44CA511BFE42C2041C7DFE0CD2041C7CFE42CA801BFE44CA9E1BFE48CAA61BBB -:201B6000FE4FCA6D1BFE51C49804C29E1BCDC51BFE4FCA7A1BFE51C498040E20EBC3C71AD7 -:201B8000210000CDFB0AFE42CA7A1BD630FC9204FE02D4920429B7CA831B23C3831BCDAE6A -:201BA0001BFE44C3771BCDDE1BFE48C3771B210000CDFB0AC8F8D63029545D2929191600FE -:201BC0005F19C3B11B210000CDFB0AC8F8D630FE08D492042929295F160019C3C81B210005 -:201BE00000CDFB0AF8FE47D2FE1BD630FE0ADAF31BD607292929295F160019C3E11BFE48E1 -:201C0000C8C392043A7037B7C23D1C210000C5CDFB0AFA391CD630FE0ADA211CD607DC9279 -:201C2000044F06003A6F373DB9DC92043C5F50C5CD8521EBC109C30F1CC1C3461CCDAE1BC1 -:201C4000C3461CCDC51BCDE90AC37A1BC5CDE90A3A6238322439FE05D2AB1C3DCAB21D211F -:201C6000DE1D0111000DCAAB1C0405CA721C23C36A1C06041163381ABEC2651C132305C21E -:201C8000771C211D1E097EC1B7F2C91ACD7B0B11FFFFFE3BCAA51CFE0DCAA51CCD9D0AFE53 -:201CA0000DC29C1C13CDE90AC3C71A2AC137E5CD9D0AFE23C2D91CCD9D0AFE23C2D91C3750 -:201CC000CDA80CCD0529237E47E620C48C0478E603F68077C12BC3F41CE122C137CDD70B8F -:201CE000CA471D3A6937B7CAF01CCDFD04CA7C1D37CDA80CE6A347E68078CA051D3223393E -:201D00000680222539E610C480043A6937B73E00C2161D7EE638B77823235E2356C14FCAF9 -:201D2000241D1E00E603FE03C2351DD5235E2356EB225938D179E62079C2C71AE680CCB08B -:201D400004110000C3C71AE5F537CD3C0DF1E122BA377EE638CA761DF53A6637B7C49804E2 -:201D6000F132663723237E326737CD2E1ECC401E2B7E2BC3F41C237E2BC3F41CB7FAF01CC9 -:201D8000235EE6781F1F1F4F16004221A81D097EB7CAA21DFE1DC29C1D322C39C10E20C3D4 -:201DA000C91AC10E20C3C71A001B1A181900001D191A3A6338FE58C2CE1DCDD60AFE27C28B -:201DC000AB1CCD9D0ACDDE1BFE27C1C3771BFE24C2AB1CCD9319EBC620C14FC3C71A584F77 -:201DE0005220414E44204E4F54204D4F442053484C20534852204F522020455120204E450F -:201E000020204C5420204C45202047542020474520204C4F5720484947484E554C20FF16D4 -:201E20001514131211100F040E0D0C0706053A6637FE20C03A6737FE06C03A6537FE41C9B8 -:201E4000CDD60AFE27CC9D0AC9AF470E206F67322C393222393224393266373267373922CD -:201E60002D39C5CD671AFAC91ECA081FFE03FA261FCA891FFE18DA7C1ECD0E1F4F322B39FC -:201E8000CD2B1F3DB879D2A31FFE08CA9B1FFE09CA9B1FCDD11F79322F39CD361FFE02CA58 -:201EA000EA1EB7C2B51E3A2B39FE03C2EA1ECC9804C5C3EA1EC5CD2B1FF53A2F394FF1CDED -:201EC0000E1F473A2B39C37C1EF5CDE90ACD9D0AFE2CC2E61E3A2C39B7CAE61EF1AF322C58 -:201EE000393E1CC37C1EF1C3471F3A2F394F3A2B39FE03CAFD1EC5CD0E1FC3A31FC1C57821 -:201F0000CD2B1F473A2F394FCD0E1FC3631EE1D55F79E603FE037BC2211FEB2A5938E3E5D1 -:201F2000EB160159D5E947C5C3631ED52150205F1600197ED1C9E1C178FE01C2461FCD9887 -:201F400004C5AF47FE01E9E17CFE019F322839E5CDD11F79322F39CD361FFA771FFE02CA1B -:201F60005622C53A2F394FCD0E1FC3501F110000CDF30AAF322F393A2F39473227392AC17D -:201F8000372B4E7B2A2D39F9C9322B39D17AFE02CC9804B7CC9804D5C3931EE37CE33DCACA -:201FA000931E79C157C5783D7ACAC81F7AFE07CAC81FFE08CA631EFE15CAC81FFE16CAC84F -:201FC0001FFE09C498043E1747C5CD2B1F47C3631EE1223439D17AB7D5C2E41F110000D586 -:201FE000112001D5CD3720225B38EB223039EB79322F39CD361FFA2E20D602CA2E203233CE -:2020000039FE05CA1820FE14CA1820FE13CA1820FE15CA1820CD37203A33392A3439E521DF -:202020006A2087856F3E008C677E23666FE9C53A2F394F2A3439E9E1C105C49804CA4220A2 -:20204000C5E9D179E603FE03C2251FE3225938C901010101040405060808090909090907DE -:2020600007070707070A0A0A020202020302A220AC20B620C020262148218221CE21352235 -:20208000F420052161226C22782285228B229422BE22B122D620CB22D722E622F52204237C -:2020A0001A23CDA2217AB4577BB55FC9CDA2217AAC577BAD5FC9CDA2217AA4577BA55FC9CC -:2020C0003A2F39E683FE00C4AA042A30390E207C2F577D2F5FC92A30393A2F39F5E680C49A -:2020E0008604F1E603C4AA047C2F577D2F5F133A2F394FC9CDA221EB131B7AB3CA03212943 -:20210000C3F920EBC9CDA221232B7DB4C87A1F577B1F5FC309212A30393A2F39E680C879A6 -:20212000E680FC8604C9CD162179E680C237213A2F39E680CA4221CD422179F6804F3222F6 -:2021400039C9CDB22119EBC9CD16213A2F39E680FC860479E680CA6421322239CD642179F8 -:20216000F6804FC93A2F39E603CA7B21F579E6034FF1B9C4AA04CD23230E207B955F7A9C58 -:2021800057C9CDA221444D2100003E113DCA9E2129E5C5E129E3C1D28C2119C38C21EB0E46 -:2021A00020C93A2F39B9C4AA04FE20C4AA042A3039C93A2F39FE20CACA2179FE20C4AA04FF -:2021C0003A2F394F2A5B382259382A3039C9CDA221C5EB7AB3CC98047AB742FC2D227CA88B -:2021E000477CB5CAF6217CB7EBFC2D22C5CDF921F1B7FC2D22EBEBC1C97C2F477D2F4F032E -:202200002100003E11F5B7C31422F5E509D21322F1373EE17B175F7A17577D176F7C1767A2 -:20222000F13DC20A227CB71F677D1F6FC9AF4F935F799A57C9CDA221C5EB7AB3CA53227CAA -:20224000B5CA53227CAAF5D5EBCDD121EBE1F1FC2D22EBEBC1C93E4F116D1FD5C547C3BFFB -:2022600004CDA322CD360DD601C37F22CDA322CD360DD6013FC37F22CDA322EBCD360D9F35 -:20228000575F0E20C9CDA322C39822CDA322CD360DC37F22CDA322EBCD360D37F27F223FE6 -:2022A000C37F223A2F39B9C4AA04CD23232A3039C93E204F322F392A30395CAF57C93E201B -:2022C0004F322F392A30395DAF57C9CDA2217DCDFB0EE607835FC9CDA2217DCDFB0EE6070B -:2022E000171717835FC9CDA2217DCDE90EE606171717835FC9CDA2217DCDDF0EE602171764 -:2023000017835FC9CDA2217DCDFB0EE6076F7BCDFB0EE607171717855FC9CDA2217DE63F5A -:20232000835FC9E603FE03C0E5D52A5938EB2A5B38CD360DC4AA04D1E1C9CDCB28CD491E3A -:20234000EB78E620CAB604AF32613878E60347CA6D233A4C38B8C2AA04FE03C26D23E52ACC -:202360005538EB2A5938CD360DC2AA04E13A4C3847EB2A55382259383A6A37B7C4AA19EB6B -:20238000224D38EB0E0B3A6138B7C29B233A6A37B7C4D0193A3739B7CCEE233A3739B7C8E2 -:2023A000AF323739CD080BCAA404C9CDEE23CD5A193E0047324C383C3237393261382A4F36 -:2023C00038C37123CDEE23CD5A193E0132373947324C382A5138C37123CDEE23CD5A193E0C -:2023E0000232373947324C382A5338C371233A3739B7C4CB283A4C38014F38E603FE03CA1E -:202400001C24876F260009E55E23562A4D38CD360DD1D8EB732372AF326138C92A55382323 -:2024200023C30724F53A6A37B7CA43243A6138B7CA4324C5D5E52A4F38EB010B00CDD0193B -:20244000E1D1C1AF326138F1C9CD5A19CD7B0BCDE90AFE22CA5C24FE27C2D82447CDDC0A3B -:20246000CDDC0A2AC1372B2BE5B80E00CA7C240CCDDC0AFE0DCA8324B8C26F24CD9D0AB8A8 -:20248000CA6F24CDE90ACD7B0BFE2CCA9924FE3BCA9924B8CA9924FE0DE122C137C2D82458 -:2024A00079FE02DAD824CDD60A47CDDC0ACDDC0AC3BB24C5CDD315C1CDDC0AFE0DC8B8C296 -:2024C000B324CDD60AB8CAD224CD9D0AFE2CCA4924C9CDD315C34924CD030FF53A2439B75B -:2024E000FA1317F1CDD31579FE2CCA4924C9CD491EF578E683C4AA04F1C9CD5A19CD7B0BA6 -:20250000FE22CA0A25FE27C474044FCDDC0AFE0DC847CDD60AB9CA202578CDD315C30B2590 -:20252000CDF30ACDD60AB9CA392578F680CDD315CD9D0AFE2CCAFA24C978CDD31579CDF3EB -:202540000AC31125CD5A19CD5825CD24242A4D38193A4C3847C37123CDEE243A6A37B7C084 -:202560003A7638FE55C03C327638C9CD5A19CD2424CD491ECD351679FE2CCA6B25C93A7169 -:20258000373DFAA625473271373A72373DB8C294253272373A7237909F3C32A637CDD32591 -:2025A000327337C3F30ACD7A04C93A7337B7C47A043A7137B7CC7A0421723796CACF253D50 -:2025C000C2F30A343D32A6373C327337C3F30A35C3C5253A71375FFE323E00D05721743760 -:2025E00019377EC9F5CDD325117337D2F0251A77AF12217137343AA637B7CA1317F132A60E -:2026000037217237B7C834C9CD5A267AB3C3E425CD5A267AB32FCAE425AFC3E4253A6A3725 -:20262000CDF30A3DC3E4253A6A37CDF30AB7C3E425F637F53AA637B7CA6126CD080BCDD7DA -:202640000BC24926E6A0C25426CDC10BCA5426F19FC3E425F13F9FC3E4253AA637B7C258C0 -:2026600025C1AF21340D22C137C3E425F637F5CD7B0BFE3CC47404CDD60AB7C28F26CD9D4D -:202680000ACDD60AFE26C28F26CD9D0AC377262AC1372B110000237EFE3EC29F26545DFEA3 -:2026A0000DC2962623E52AC1377AB3CC74043A7638FE20C2C326CD360DE122C137CA5426F4 -:2026C000C34F26E1C36126CD080B4FC5C4740437CDA80C237EF64077C1E620CCB0047EE6B6 -:2026E00080C48C041F1F1FB67779FE2CCAC726C911963801004FC300270E0011E638063BC2 -:20270000CD7B0B2AC1372B7E23FE0DCA1D27B9CA1D270405CA0727121305C30727AF122398 -:2027200022C137C9CD7B0BFE28C27404CDDC0AFE27C274044FCDFB26CDE90ACDDC0AFE291A -:20274000C47404C3F30A3E0132AB37C3F30AAF32AB37C3F30AAF32A937C3F30A3E0132A94C -:2027600037C3F30A3EFF32AA37C3F30AAF32AA37C3F30A3E0132AA37C3F30A3E01326937AD -:20278000C3F30AAF326937C3F30A3EFF327037CD5825AF3270377AB7C274043A7638FE20DF -:2027A000C07B3DF8CA7404FE10D274043C326F37AF676BC35D19CD58257AB7C274043A6AE8 -:2027C00037B7C87BB7CAD927FE0ADC74043A7638FE20C2D9277B32AD37CD7717CD1A04C389 -:2027E0009918CD080BC27404F53A6238FE08DAF627CDA4043E07215D38773A6A37B722BAF3 -:20280000370E03C4D019F1FE2CCAE227C93AA837B7C29804CD7B0B2AC1372BCDA247B7CA07 -:202820002828CD6548C3B6043D32A8372AC1377E2322C137FE21D22C28C9CD7B0BFE28C2DD -:202840007404CDDC0AFE27C27404CD080BC27404FE27C27404CDDC0AFE29C27404CDF30A97 -:202860003A6A37B7C03A6238FE06DA6F283E06116338213839477EB7C28C041A77231305A1 -:20288000C27B2870C9CDCB28CD7B0BFE2FC27404CD080BC4C328FE2FC27404CDF30ACDA8EB -:2028A0000C237EE6D0C28C04E57EF62477CDEE23E12B2255383E03324C38210000224D3817 -:2028C000C36D23F53E01326238F1C93A5E38B7C8C1C39E04CD080BC2F628F5B7CDA80CCDBC -:2028E0000529237EE664C2FC287EE603F68077F1FE2CCAD428C9CD7404C3F028F61077CD71 -:202900008C04C3EF287EE638C87EE60777E5AF237723772377E1C922BE37CD3D293A7638C9 -:20292000FE55C878E680C2860478F62032AC372ABE3722BA37CD840DEB78C35D19CD491E4F -:202940003A2839B7C8C3A40422BE37CD3D2978E680C286042ABE37CD0529237EE694C28CFB -:20296000047EE640B0F620772373237223D5EB2A5938EB732372E1C35D19F5CDE9443AC9AA -:2029800039B7C4292B3A7137B7C45A2BF1216A37347E3DC2212A2138397EB7C2AA2921968B -:2029A000387EB7C2AA2921A03A230106001138397E23FE20CACC29FE09CACC29B7CACC29B4 -:2029C000FE0DCACC291213040DC2B0292132397022BA370E02CDD019CDEE2321664822E9CF -:2029E00039CD7A0CDA082A22BA377EE67F77237EE640C21D2B7EE604CAE129235E235601CA -:202A00000500CDD019C3E1292A5338EB010A00CDD019010D012A5138EB7BB2C4D019C36320 -:202A2000012AC137F5D4491ED5C5CD771721FFFF22AF3722B137CD991821A62BCDFE1821A9 -:202A40004D393E08CD2536CD8318219B2BCDFE182189393E04CD2536CD8318CD662B2A6BA8 -:202A6000377CB5CA7C2AE5CD0819E13A7F3A3C323639C40819AF323639C3822A21FD2ACD41 -:202A8000822B21012BCD822B2A6D377CB5CAB72A3E2CCDA7453A7F3A3C3E2CC41F44E5CD83 -:202AA0000819E13A7F3A3C323639C40819AF32363921112BCD822BCD662BC1D1F1D2C52A96 -:202AC0000600110000CDAA190E0ECDD0192A29397CFEF8CADD2AAFCD511AC3CD2A010F00FD -:202AE000CDD0190600CD361A3A583AB7CAF42A3E80CDA745CD0C45CD4C45C300014E4F201E -:202B00000020464154414C204552524F5228532900205741524E494E47285329000E003ABD -:202B20004C3847CDD019C3E129CD7F2B21382BCD822BCD5219C3662B524550542F495250F1 -:202B40002F495250432F4D4143524F00554E5445524D494E415445442000CD7F2B218F2B75 -:202B6000CD822BCD52193E0DCD83183E0ACD83183A7F3A3CC83E0DCD1F443E0AC31F44213F -:202B80004C2BE5CDFE18E13A7F3A3CC8C39740434F4E444954494F4E414C0053594D424FC6 -:202BA0004C533A0D0A004D4143524F533A0D0A003AC939B721000022F13922F3392AC73937 -:202BC000C2E72B21000039EB2100FE19E52AED39E5EBCD02347A1F577B1F5FE119D1CD36E5 -:202BE0000D3E00DAE72BEB3C32C939AF32CA3932D439EB2AED3924CD360DD2022CEB22C7DD -:202C000039C925EBCDE03521C93935C3B02BCDFD04C07EB73CF03DF5E610CA382C3AD4393E -:202C20003C32D439F1E608EE08C03AD439B7C83AD4393D32D4393CC9237EFE1BC2242C3AF0 -:202C4000D439B7C2242C3ADE39B7C2242CF137C922C7393AC9393D32C939C9CD9D0AFE2663 -:202C6000C2972C2AC1377EFE20CA952CFE09CA952CE5C5CD080BCDA32CC1E122C137C295BB -:202C80002C3E2632CB39C3042DFE26C2972C3ACB39B7C29C2C3E26CDDB34B7F8F5AF32CBC2 -:202CA00039F1C92AD63906007EB7CAD12C1162381ABEC2C62C4F2B131ABEC2C62C0DC2B611 -:202CC0002C78F680BFC92B7EFE07D2C62C04C3A82C3ADF39B7C02AE03906C07EB7CA022D45 -:202CE0001162381ABEC2F72C4F2B131ABEC2F72C0DC2E92CAF78C92B7EFE07D2F72C04C3E4 -:202D0000DB2C3CC92AC137E5CD080BF5CDA32CC23D2D47F1E1F57E23FE20CA222DFE09C254 -:202D20002A2DE5CD972CE1C3162D78CD972CF147F5F1C2892CFE26C2892CC3E90AF1E1F52B -:202D400022C137CD9D0AFE20CA562DFE09CA562DCDE90AC35C2DCD972CC3432DCD640BC259 -:202D6000312DC36B2DCD640BFA312DCD972CC3652DCD9D0AFE3BCA8D2DC37F2DCD5D35CD55 -:202D8000972CFE0DCA3E35CD9D0AC37F2DCD5D35CD5D35FE20CA902DFE09CA902DB7CD844C -:202DA0003522F339CA3E35FE0DCA3E353E0DCDDB34C33E35E5F53ADF39B7CAC52DD5EB2A25 -:202DC000EB391934D1F1E67FF587FA0F2E2ADA397EB7CAFE2DF1C547042B05CAE92D7ED5DD -:202DE0002F5F16FF19D1C3DA2D7EB7CA0C2E3D472B7E0405CA0C2ECDF72E05C3F02DF12B16 -:202E00003C3DCA092E2BC3012E7EE1C9C1E1C93E2ECDF72ECDF72EF1E63FC52AE6394F06BF -:202E2000000923D5EB2AE439CD360DEBD2322E22E4392BD144CD601745CD6017C1E11B1A0F -:202E4000C9E5CD080BE1C45A2EF51162381A3C4F1A77132B0DC2502EF1C9FE0DC8FE3BC8C8 -:202E6000D1C374040600C5E52BCD7B0BFE27CAA62EFE22CAA62EFE3CCAC42EFE3ECACF2E9E -:202E8000FE2CCAD92EFE20CAD92EFE09CAD92EFE3BCAD92EFE21CCDC0AFE0DCAEC2E772B04 -:202EA000CD9D0AC36C2E4F772BCD9D0AB9CAB82EFE0DCAF12EC3A72E772BCD9D0AB9CAA7A7 -:202EC0002EC36C2E0405CACB2E772B04C3A02E05CAA02EFADE2EC39E2E0405C29E2ED17B4F -:202EE000953D12C1EB2AC1372B7EEBC90405CADE2ECDBC04C3DE2EF5E5214538CD360DD22E -:202F00000A2F23360D2BEBE1F1C9E1F11213C9CD042DFE26CC042DFE3ACA042DFE21D0FE62 -:202F20000DC8F5CDC10BCA2F2FCDFD04CA1317F1C3042DCD58253A7638FE20CA412F1100C4 -:202F400000EB22CC39CDB02BC1D1E101552FC5D53E0DC33304C101502FC5CD080BFE3ACCF6 -:202F6000080BCD0E2CCA762F11C3371ACDDB3413FE0DC26B2FC9AFCDDB34CD3E35C1D1E146 -:202F800021B402E5D52AF139E5E52ACC39E521B402E521982FE5C5C9CDE92FC1E1D1CD36FC -:202FA0000DC2C52F3AD539B7C2B02F78B1C2C52FCD36342AC739CD502CAF32D539D1D52A66 -:202FC000CE39E5EBE9D5CD1235B7CAF82F11C337CD2835CDF72EFE0DC2D02FE5C52AD039D0 -:202FE000E52AD239E52ACE39E9D1E122CE39E122D239E122D039EBE90B626BC39D2F3AC985 -:2030000039B7CABC0432D539C1E1D1111B30D5E5C5AF32D439C3F30AC398043AD539B7CAD2 -:203020007A30C101CD01C5CD080BFE3ACC080BCDFD04C0B7F04FE608C24E3079E610C25661 -:203040003079E620C25E3079E640C26B30C93AD4393D32D439C93AD4393C32D439C93AD487 -:2030600039B7C03A7137B7C8C37E253AD439B7C0237EFE08C83EFFC3E425C1D1E121B40259 -:20308000E5D5C5C9B7F5CDB02B22D639CD412E4F3A7638FE20CA9D30CD502CF1C979360089 -:2030A0002BFE2CC47404F1F5CAD930CDDC0AFE3CC47404F177E5F50E002B3A7638FE20C25A -:2030C0003431F1F547CAE730CD642E0CFE0DCA3131FE3ECA3431C3C830CDD60AD63C32DDE7 -:2030E00039CC9D0AC3B330CD9D0AFE0DCA2A31F53ADD39B7CA0C31F1113431D5FE20C8FEB7 -:2031000009C8FE3BC8FE2CC8D1C32431F1FE3CCA2031FE3EC224310405CA343105C3243114 -:2031200004C324310C772BC3E7303ADD39B7C23431CDA40436002BCDF22B78B7C47404F1A1 -:20314000E122D83926006922CC39C1D1E1015A31C34E2FAFC23E01C38430C101502FC52A0F -:20316000F3393E0132DF39E5CD0F2FF5CD0E2CCA9E31F1E1FE0DCA7C2DFE3BCA712DFE27FF -:20318000CA8E31FE22CA8E31CD042DC3743147CD5B2CFE0DCA7C2DB8CA8831C38F31F1E1EE -:2031A00022F339AFCDDB34CD3E35C1D1E121B402E5D52AF139E5E52AD839E52ACC39E5217F -:2031C000B402E521C931E5C5C9CDE92FC1E1D13E0132DF3922DA39E1CD360DC2FA313AD5C3 -:2031E00039B7C2EA3178B1C2FA312ADA3923237EFE0823D2EF312BC3B02FEBD5CD1235B778 -:20320000CA213211C337CD1235B7FCB42DCD8435CDF72EFE0DC20632E52ADA39E5C5C3DDF5 -:203220002F0B626BD1C3DE31CD7B0BFE0DCA74044FCD1F44CDDC0AFE0DCA4332CD1F44B9DF -:20324000C234323E0DCD1F443E0ACD1F443A7638FE20C0C3F30ACD7B0BFE0DCA740432DC1F -:20326000394FCD9D0AFE0DCA7132B9CAF30AC36232E1D1C1017A32C34E2FC101502FC5217C -:20328000C3373ADC394F7EB9CA9232FE0DC823C38632C1D1E121B402E5D5C5C9B7CD7D0DC0 -:2032A000C2AD32E523235E2356CD3634E12322C5397EF62877CDB02B22D6390E00C5CD4143 -:2032C0002EC10CFE2CCABD32AF772B32DE393C772B22E03922E23936007932E839CDDB3442 -:2032E000C1D1E121EA32E5D5C5C9C101502FC52AF339E5AF32DE3932DF39CD0F2FF5CD0E78 -:203300002CDA0F33CA3833F132DE39E1C37431F1CD080BC474042AE239F51162381A3C4F16 -:203320001A772B130DC22033360022E239F1FE2CCA1033E122F339C9F1E1AF22F339CDDB92 -:2033400034CD3E352AF139EB2AC539237323722AD639CD502CC1D1E121B402E5D5C5C9E56E -:2033600037CD3C0DCDB02B36002B360122DA392B0E00CD642E0CCDE90ACD7B0BFE0DCA8E71 -:2033800033FE3BCA8E33FE2CC4A404C37233E323235E2356EBCD2835E3B7CAA833B9CAA8B9 -:2033A0003336002B0CC39D3336002BCDF22BE1C1E52AE439E52ADA39E521B402E511C333F7 -:2033C000D5C5C9CDE92FE122DA39E122E639E1AF32DF39CD1235B7CAFB3311C337CD1235B1 -:2033E000B7FCB42DCD8435CDF72EFE0DC2DD33E52AE639E52ADA39E5C3DD2F2ADA392BC3B5 -:20340000B32F7D935F7C9A57C93A5E38B7C29E04CD58253A7638FE20C0325E382A4D38EBC8 -:20342000CD0234EB225F38C93A5E38B7CCA404AF325E38C3F30A21EF394E73234672CD48F0 -:2034400034CD5134712370C92AEB39195E23562BC92AEB391923235E23562BC92AEF397DA0 -:20346000B4CA7134EBD5CD5134EB22EF39D1C39B342AED39112000EB1922ED392100FE395A -:20348000CD360DDAE0352AC739253AC939B7CD360DDAE0352AEB39EBCD0234D5CD4834EBA7 -:2034A0002AF339EB7BE6E05F7BB2C2AF34D1D5732372233E00772377CD5134D1CAC53473E0 -:2034C0002372C3CA34EB22F139EB2AF139D5EBCD4834D17323727BF6045FC9D5F52AF33981 -:2034E000EB7BE61FCC5C342AEB3919F1F5777BE61FFE1FCAF73413CC0135EB22F339F1D19F -:20350000C97BE6E05FCD51347AB3CA5C3413131313C9D5EB2AEB39EB7DE61FC222357DF64D -:20352000046FEB197EEBD1C9CD1235F5D5EB7BE61FFE1FCA373513CC0135EBD1F1C9EB7B84 -:20354000E6E05FD5CD51347BB2C1C8AF772377CD36342AF139EBCD4834712370C92AF339C7 -:20356000D5EB7BE61F1BFE04CC78352AEB39EB22F339EB197EEBD1C97BE6E05FCD48347B83 -:20358000F61F5FC9D5F5EB7BE61FFE1FCA903513CC0135EBF1D1C92AED39EB2AC7393AC91A -:2035A00039B7C2A9352100FC39CD0234DA190D7AB7CA190D1F577B1F5FD52AEB39EB2AED6D -:2035C00039CD0234424BD12AED39EB1922ED3978B1CADC352B1B1A770BC3CF3522EB39C9F9 -:2035E000D52ABC37EB2AEB39CD02347AFE03DA190D1F577B1F5FE1C5E52AEB39EBE3CD023D -:2036000034424BD12AEB39E52ABC3719E522EB390922ED39E1D178B1CA23360B1A77231363 -:20362000C31636C1C93227393228394F061E5E235623E5C5CD4536C1E105C22E363A273906 -:20364000B9C48318C9010000C57AB3CA1317EBE55E23567BB2C24E36E17DB4C8CD73362B0D -:20366000562B5E7BB2CA5836AF7723772B2B2BE5C34E36010400097E22BA37E67FC8FE406F -:20368000D077237EE680C453372B46237EF5235E23562323237E23CDA74505C29536F1F552 -:2036A000E608C2D336CDF936CD3F37F1F55FE680C2FE367BE604C204377BE640C40F377BE9 -:2036C000E6A0CA07377BE6035F1600218F19197ECDA745F121273935C2EE363A283977CDFE -:2036E000831821AE37343AAD37BECC9918AFC4F9362ABA377EF64077C93E09C3A7453E2A8D -:20370000CA3E4DCA3E43CA3E55CDA745C3D336D5C52ABA37E5237BE603470E07235E2356B0 -:2037200023D55E2356EB225938D1CDAA19E122BA37237EE620C4D019C1D13E49C3A745218A -:203740007638227438CD15172A74383600217638C3FE18C5E57EE603470E06235E2356CD0D -:20376000D019E1C1C9000000000000000000000000000000000000000000000000000000F5 -:20378000000000000000000000000000000000000000000000000000000000000000000029 -:2037A000000000000000000000000000000000000000000000000000000000000000000009 -:2037C0000000000000000000000000000000000000000000000000000000000000000000E9 -:2037E0000000000000000000000000000000000000000000000000000000000000000000C9 -:203800000000000000000000000000000000000000000000000000000000000000000000A8 -:20382000000000000000000000000000000000000000000000000000000000000000000088 -:20384000000000000000000000000000000000000000000000000000000000000000000068 -:20386000000000000000000000000000000000000000000000000000000000000000000048 -:20388000000000000000000000000000000000000000000000000000000000000000000028 -:2038A000000000000000000000000000000000000000000000000000000000000000000008 -:2038C0000000000000000000000000000000000000000000000000000000000000000000E8 -:2038E0000000000000000000000000000000000000000000000000000000000000000000C8 -:203900000000000000000000000000000000000000000000000000000000000000000000A7 -:20392000000000000000000000000000000000000000000000000000000000000000000087 -:20394000000000000000000000000000000000000000000000000000000000000000000067 -:20396000000000000000000000000000000000000000000000000000000000000000000047 -:20398000000000000000000000000000000000000000000000000000000000000000000027 -:2039A000000000000000000000000000000000000000000000000000000000000000000007 -:2039C0000000000000000000000000000000000000000000000000000000000000000000E7 -:2039E000000000000000000000000000000000000000000000000051410751420051430106 -:203A0000514402514503514804514C05514D06625350066350535706514908515209624233 -:203A200043006244450262484C04624146066A4958446A495964724E5A00715A01724E43C5 -:203A40000271500672504F047250450500000000000000000000000000000000000000007C -:203A6000000000000000000000000000000000000000000000000000000000000000000046 -:203A8000000000000000000000000000000000000000000000000000000000000000000026 -:203AA000000000000000000000000000000000000000000000000000000000000000000006 -:203AC0000000000000000000000000000000000000000000000000000000000000000000E6 -:203AE0000000000000000000000000000000000000000000000000000000000000000000C6 -:203B000000000052454C43524650524E0000000000000000000000000000000000000000F7 -:203B2000000000000000000000000000000000000000000000000000000000000000000085 -:203B4000000000000000000000000000000000000000000000000000000000000000000065 -:203B6000000000000000000000000000000000000000000000000000000000000000000045 -:203B8000000000000000000000000000000000000000000000000000000000000000000025 -:203BA000000000000000000000000000000000000000000000000000000000000000000005 -:203BC0000000000000000000000000000000000000000000000000000000000000000000E5 -:203BE0000000000000000000000000000000000000000000000000000000000000000000C5 -:203C00000000000000000000000000000000000000000000000000000000000000000000A4 -:203C2000000000000000000000000000000000000000000000000000000000000000000084 -:203C4000000000000000000000000000000000000000000000000000000000000000000064 -:203C6000000000000000000000000000000000000000000000000000000000000000000044 -:203C8000000000000000000000000000000000000000000000000000000000000000000024 -:203CA000000000000000000000000000000000000000000000000000000000000000000004 -:203CC0000000000000000000000000000000000000000000000000000000000000000000E4 -:203CE0000000000000000000000000000000000000000000000000000000000000000000C4 -:203D00000000000000000000000000000000000000000000000000000000000000000000A3 -:203D2000000000000000000000000000000000000000000000000000000000000000000083 -:203D4000000000000000000000000000000000000000000000000000000000000000000063 -:203D6000000000000000000000000000000000000000000000000000000000000000000043 -:203D8000000000000000000000000000000000000000000000000000000000000000000023 -:203DA000000000000000000000000000000000000000000000000000000000000000000003 -:203DC0000000000000000000000000000000000000000000000000000000000000000000E3 -:203DE0000000000000000000000000000000000000000000000000000000000000000000C3 -:203E00000000000000000000000000000000000000000000000000000000000000000000A2 -:203E2000000000000000000000000000000000000000000000000000000000000000000082 -:203E4000000000000000000000000000000000000000000000000000000000000000000062 -:203E6000000000000000000000000000000000000000000000000000000000000000000042 -:203E8000000000000000000000000000000000000000000000000000000000000000000022 -:203EA000000000000000000000000000000000000000000000000000000000000000000002 -:203EC0000000000000000000000000000000000000000000000000000000000000000000E2 -:203EE0000000000000000000000000000000000000000000000000000000000000000000C2 -:203F00000000000000000000000000000000000000000000000000000000000000000000A1 -:203F2000000000000000000000000000000000000000000000000000000000000000000081 -:203F4000000000000000000000000000000000000000000000000000000000000000000061 -:203F6000000000000000000000000000000000000000000000000000000000000000000041 -:203F8000000000000000000000000000000000000000000000000000000000000000000021 -:203FA000000000000000000000000000000000000000000000000000000000000000000001 -:203FC0000000000000000000000000000000000000000000000000000000000000000000E1 -:203FE0000000000000000000000000000000000000000000000000000000000000000000C1 -:20400000000000000000000000000000000000000000500000000000000000000000000050 -:20402000000000000000000000000000000000000000000000000000000000000000000080 -:20404000000000000000000000000000000000000000000000000000000000000000000060 -:204060000000000000003F434F4D4D414E44204552524F52003F46494C45204E4F54204682 -:204080004F554E44003F43414E275420454E5445522046494C45007EE67FC8CD1F4423C3BF -:2040A0009740216640C3B140217540C3B140218540CD9740C3D24022F73A2A06002BF92BF3 -:2040C0002B224E3A2AF73AE53A593AB7C2000032513A2A4E3AF9CD9F433A1440FE0DCAD239 -:2040E00040AF325D3A32553A325B3A325A3A32583A32573A325C3A3C32563A32543A01A20A -:2041000040C5AF324D3ACD4242D811033BCD254211F83A1AFE20C21E413E80324D3AE5216D -:204120005E3ACD1942E13E2032F83A32003BAF32F73A79D62CB732573AC248413A4D3AEEAE -:204140008032573ACD4242D811093B3A583AB7CA554111063BCD254211F83A3AF73A325302 -:204160003A1AD62032523AC272413A4D3AC640324D3AE5217F3ACD1942E179FE3D37C0CD02 -:204180004242FE0D37C0110601CD254211F73A1A13B7FA9A411AFE2037C8E521A03ACD1955 -:2041A00042E13A4D3A87215E3ADCF94187217F3AF53A583AB7CACA4111883A01063B3E03C1 -:2041C000F50A121303F13DC2C041F1DCF9413A553AB7C2DF413A523AB7C2DF413A533A3206 -:2041E000553ACDB544CD5644CD6C44E12A4E3A23233A563A32513A47C9F511F73A0E097E4A -:20420000B7C213421AB7FA13421A7723130DC20942F1C90D2313C309421B060C1A772313D0 -:2042200005C21C42C93A503AB7C8E521003B7EFE20C2404206031AE67F77231305C23642B8 -:20424000E1C9CD7E43FE3A373E00C2664278B7CA4242EBCD08444F783D79C28742FE5BD05D -:20426000FE41D8D640EB32F73AD47E4378FE0BDA7442060BC5EBD511F83A0405CAD042CD92 -:2042800008441213C37B42FE54C2A042CD0844FE5437C0CD0844FE5937C09FEBB7C36642C2 -:2042A000FE4CC2BA42CD0844FE5337C0CD0844FE5437C03EFEEBB7C36642FE5237C0CD08CE -:2042C00044FE4437C0FE5237C03EFEEBB7C36642E1C13E0A90DAE142EB3620233DF2D942AC -:2042E000EB790600D62E32503ACC7E43EBD511003B78FE04DAF94206030405CA0643CD0872 -:20430000441213C3FA42E179D62FB779C0CD0844FE4CC21F4332553ACD08444FC30743FE2B -:204320004EC22A43325B3AC31843FE4FC23543325A3AC31843FE52C2404332573AC318433A -:20434000FE43C24E4332583A32553AC31843FE4DC25943325C3AC31843FE49C26443325461 -:204360003AC31843FE5AC27043AF32543AC31843FE5037C03A563A3C32563AC3184306005A -:20438000E5CD0844FE5BD29C43FE30DA9C43FE41D29843FE3AD29C4304C381434FD1C9C520 -:2043A000D52180007E3600B747CACE43237EFE20C2B74305C3A943111340782B0412132378 -:2043C00005CAC8437EC3BD4332593AC3EE43AF32593A3A513AB7C2E143CD4C443E2ACD1F82 -:2043E000440E0A111240CD05003E0ACD1F44D1C13A1340211440E5226440856F3E008C6750 -:20440000360D233E0A77E1C97E23FE20CA0844FE0ACA0844FE0DC2464423226440C9F1E5FB -:20442000D5C5F50E02E67F5FCD0500F1C1D1E1B7C9E52A64402B7EE67FFE0A23CC9F4323A6 -:204440002264402B7EE1FE1A37C8B7C93E0DCD1F443E0AC31F44F5C5D5E511103C2100009A -:20446000220E3C217F3A3A553AC37F44F5C5D5E5110E3B210000220C3B215E3A3A573AB714 -:20448000CAB044E50E1ACD0500E17EB7FAB044CDD244D50E13CD0500D1D50E16CD05003CF8 -:2044A000CAAE40E1CDD2440E0FCD05003CCAA840E1D1C1F1C9F5C5D5E521000222103E115E -:2044C000123E0E1ACD050021A03A7EB7FAB044C3A444E5D5110C0019AF1604772315C2DBC4 -:2044E000441110001977E1D1C9F5D511A03A1AB7FA0945C5E5D511123E0E1ACD0500D101D2 -:20450000C5E50E10CD0500E1C1D1F1C9F53A553AB7CA1142D53A7F3A3CCA0945FA95453E14 -:204520000DCDA7453E0ACDA7453E1ACDA745E52A0E3C11103CC5017F3ACD7F4511103C0E72 -:204540001ACD0500C1E1117F3AC30045F53A573AB7CA1142D53A5E3AB7FA09453E1ACD0E8E -:2045600046E52A0C3B110E3BC5015E3ACD7F45110E3B0E1ACD0500C1E1115E3AC300457C33 -:20458000B5C87DE67FCA8A45C6801717E60329846069C3DE453E0DCDA7453E0ACDA7453E27 -:2045A0000CCDA745D1F1C9F53A553AB7CA11423A7F3A3CCA1E44FA8646E3E5D52A0E3C7C6B -:2045C000FE02CCD64523220E3C110F3C19D1F1F5E67F77F1E1C911103C217F3A3E04F5C58F -:2045E000D5E50E1ACD0500D1D50E15CD0500B7C2D246D1E101800009EBC1F13DC2DE4521BF -:204600000000C9110E3B3E02215E3AC3DE45F53A573AB7CA11423A5E3AB7FA1E44E3E5D582 -:204620002A0C3B7C3DCC034623220C3B110D3B19D1F177E1C93AA03A3CCA3144FAC146E5E5 -:20464000D52A103E7CFE02CC56462322103E11113E19D1C3444411123E3E04F5D5C50E1AA7 -:20466000CD050011A03A0E14CD0500C1D13DCA7F4621800019EBF13DC25B46210000C9F11A -:204680003E1A12C37B46F1E5D5C5F50E05E67F5F215D3AFE20D2A446D60DCAA2463CCAA221 -:2046A000467E3D77347BFE09C2B9463E20CDA7457EE607C2AB46C3BC46CD0500F1C1D1E1DB -:2046C000C9E5D5C50E03CD0500C1D1E1FE1A37C8B7C921F246CD9740D11AC640FE40C2E3D4 -:2046E000463E20CD1F4421F846CD9740CD4C44C300004449534B20002046554C4C00000025 -:20470000000000000000000000000000000000000000000000000000000000000000000099 -:20472000000000000000000000000000000000000000000000000000000000000000000079 -:20474000000000000000000000000000000000000000000000000000000000000000000059 -:20476000000000000000000000000000000000000000000000000000000000000000000039 -:20478000000000000000000000000000000000000000000000000000000000000000000019 -:2047A0000000E5D5C5EB21FE46131A1BFE3A3E00C2BD471A13D640FE1BD22148137723065C -:2047C000081A1332503AFE2ECAE847FE21DAE847772305C2C1471A1332503AFE2ECAEF471D -:2047E000FE21D2D647C3EF4736202305C2E84706033A503AFE2ECAFC471106011A1377235E -:2048000005C2FC47701122470E1ACD050011FE460E0FCD0500FEFFCA2148AF321E47321F9F -:2048200047C1D1E1C9E5D5C53A1F473DF24C481122470E1ACD050011FE460E14CD0500C690 -:20484000FFDA61482122472220473E7F321F472A20477EFE1AC25C4837C361482322204792 -:20486000B7C1D1E1C9C900000000000000000000000000000000000000000000000000007C -:20488000512001000A204300000000512002002050440000000051200300570D45000000F5 -:2048A0000051200400202048000000005120050050534C000000005120060020204DE54964 -:2048C000000062200600202053505849000063200600202050535700000000512008004749 -:2048E00049490000000051200900202052000000006220000020204243000000006220024F -:00000001FF diff --git a/hex/mb.hex b/hex/mb.hex deleted file mode 100644 index c0f7dc7..0000000 --- a/hex/mb.hex +++ /dev/null @@ -1,770 +0,0 @@ -:020000040000FA -:20010000C3D15E7A29DC290644BF119E45EC146318863940191815951467145116E6437D57 -:2001200014D114EE1401449C160E454A5E20438515734403202B1EC0225D44C90CC90CFD88 -:200140001F9416842000002420EE147C447D448244C444E33C1016D3157C221B16F922C9BD -:2001600013CC13CF13D213F51700000000584C7B4CF14C7B50EC14744D3D2487240000B7C3 -:20018000590000BA581754FE5AFD5AD9539B525C53045A6558D7597B547A549A53BE5948DE -:2001A00049794983497C28802A6728C036DD377F38BD262B3779381C393139F64AF21FD1F3 -:2001C0001DD6489646A449E248F248B6222B498A469046CB1D7A29F429202A6D2A0000003C -:2001E000000000000000000000000000000000000000007A517D51805100008E55405658C4 -:20020000566151645167512400000000000000000000000000000000005554CFAB4EC4F719 -:2002200042D30654CE0E53C31500004C4F53C5C34F4ED49A4C4541D292494ED41C534EC7A2 -:200240001D4442CC1E56C92B56D32C56C42D4FD30C4852A416414CCCB64F4D4D4FCEB84894 -:200260004149CEB94F4C4FD2E25552D3E34CD3E000454C4554C5AA4154C18449CD864546D9 -:200280005354D2AD4546494ED4AE4546534EC7AF45464442CCB045C698004C53C5A24EC4AA -:2002A00081524153C5A64449D4A752524FD2A852CCD652D2D758D00B4FC62F51D6FA004F21 -:2002C000D28249454CC4C0494C45D3C6CED352C50F49D81F004F54CF894F2054CF894F533A -:2002E00055C28D45D4C15052494ED4E6004558A41A004E5055D485C68B4E5354D2DA4ED4D2 -:20030000054ED0104DD0FB4E4B4559A4DD0000494CCCC8005052494ED49E4C4953D49F505B -:200320004FD31B45D488494EC5B14F41C4C45345D4C94953D4934FC70A4FC33045CE1245B6 -:200340004654A4014FC63100455247C5C54FC4FC4B49A4324B53A4334B44A4344944A40327 -:20036000004558D483554CCC96414DC5C745D7944FD4D5005045CEBF55D49DCE95D2F8436C -:2003800054A4195054494FCEBA0052494ED49155D4C24F4BC5994FD3114545CB174C4FD449 -:2003A000E4000045545552CE8E4541C48755CE8A4553544F52C58C45CD8F4553554DC5A918 -:2003C0005345D4CA49474854A4024EC408454E55CDAC455345D4CC414E444F4D495AC5BB8B -:2003E0004543D4E500544FD0905741D0A54156C5CB5043A8D45445D0D147CE0451D20749B0 -:20040000CE095452A4135452494E47A4D850414345A41859535445CDBD4352CEE1004F4E23 -:20042000C5E74845CECF524FCEA3524F46C6A44142A8D0CFCE41CE0D0053494EC7D953D220 -:20044000D20041CC1441525054D2DC00494454C8A14149D49748494CC5B4454EC4B5524988 -:2004600054C5B7004FD2F9000000ABF2ADF3AAF4AFF5DEF6DCFDA7DBBEEFBDF0BCF1007964 -:20048000797C7C7F50463C32287A7B202A00007A293B2AF429262C1F2C642D442E73298818 -:2004A000258525032769270629312B252B512B841B3329004E45585420776974686F7574EE -:2004C00020464F520053796E746178206572726F720052455455524E20776974686F757430 -:2004E00020474F535542004F7574206F66204441544100496C6C6567616C2066756E6374FB -:20050000696F6E2063616C6C004F766572666C6F77004F7574206F66206D656D6F7279009F -:20052000556E646566696E6564206C696E65206E756D6265720053756273637269707420D9 -:200540006F7574206F662072616E6765004475706C696361746520446566696E6974696FCB -:200560006E004469766973696F6E206279207A65726F00496C6C6567616C2064697265630C -:20058000740054797065206D69736D61746368004F7574206F6620737472696E67207370E8 -:2005A00061636500537472696E6720746F6F206C6F6E6700537472696E6720666F726D7599 -:2005C0006C6120746F6F20636F6D706C65780043616E277420636F6E74696E756500556ECF -:2005E000646566696E656420757365722066756E6374696F6E004E6F20524553554D450019 -:20060000524553554D4520776974686F7574206572726F7200556E7072696E7461626C6507 -:20062000206572726F72004D697373696E67206F706572616E64004C696E65206275666642 -:200640006572206F766572666C6F77003F003F00464F5220576974686F7574204E45585457 -:20066000003F003F005748494C4520776974686F75742057454E440057454E44207769745F -:20068000686F7574205748494C45004649454C44206F766572666C6F7700496E7465726E99 -:2006A000616C206572726F72004261642066696C65206E756D6265720046696C65206E6F36 -:2006C0007420666F756E64004261642066696C65206D6F64650046696C6520616C72656139 -:2006E0006479206F70656E003F004469736B20492F4F206572726F720046696C6520616CE3 -:20070000726561647920657869737473003F003F004469736B2066756C6C00496E70757418 -:20072000207061737420656E6400426164207265636F7264206E756D626572004261642014 -:2007400066696C65206E616D65003F004469726563742073746174656D656E7420696E2092 -:2007600066696C6500546F6F206D616E792066696C65730018141814181418141814181497 -:2007800018141814181418140100000000007084503800000000A360FEFF4060090500007E -:2007A000000000000000000000000000000000000000000000000000000000000000000039 -:2007C000000000000000000000000000000000000000000000000000000000000000000019 -:2007E0000000000000000000000000000000000000000000000000000000000000000000F9 -:200800000000000000000000000000000000000000000000000000000000000000000000D8 -:2008200000003A00000000000000000000000000000000000000000000000000000000007E -:20084000000000000000000000000000000000000000000000000000000000000000000098 -:20086000000000000000000000000000000000000000000000000000000000000000000078 -:20088000000000000000000000000000000000000000000000000000000000000000000058 -:2008A000000000000000000000000000000000000000000000000000000000000000000038 -:2008C000000000000000000000000000000000000000000000000000000000000000000018 -:2008E0000000000000000000000000000000000000000000000000000000000000000000F8 -:200900000000000000000000000000000000000000000000000000000000000000000000D7 -:200920000000000000000000000000000000000000000000000000000000000000000000B7 -:20094000000000000000000000000000000000000000000000000000000000000000000097 -:20096000002C0000000000000000000000000000000000000000000000000000000000004B -:20098000000000000000000000000000000000000000000000000000000000000000000057 -:2009A000000000000000000000000000000000000000000000000000000000000000000037 -:2009C000000000000000000000000000000000000000000000000000000000000000000017 -:2009E0000000000000000000000000000000000000000000000000000000000000000000F7 -:200A00000000000000000000000000000000000000000000000000000000000000000000D6 -:200A20000000000000000000000000000000000000000000000000000000000000000000B6 -:200A4000000000000000000000000000000000000000000000000000000000000000000096 -:200A6000000000000000000000000000000000000000000000000000000000000000000076 -:200A8000000000000000000000000000000000000000000000000000000000000000000056 -:200AA000000000000000000000000000000000000000000000000000000000000000000036 -:200AC000000000000000000000000000000000000000000000000000000000000000000016 -:200AE0000000000000000000000000000000000000000000000000000000000000000000F6 -:200B00000000000000000000000000000000000000000000000000000000000000000000D5 -:200B20000000000000000000000000000000000000000000000000000000000000000000B5 -:200B4000000000000000000000000000000000000000000000000000000000000000000095 -:200B6000000000000000000000000000000000000000000000000000000000000000000075 -:200B8000000000000000000000000000000000000000000000000000000000000000000055 -:200BA000000000000000000000000000000000000000000000000000000000000000000035 -:200BC000000000000000000000000000000000000000000000000000000000000000000015 -:200BE0000000000000000000000000000000000000000000000000000000000000000000F5 -:200C00000000000000000000000000000000000000000000000000000000000000000000D4 -:200C20000000000000000000000000000000000000000000000000000000000000000000B4 -:200C400020696E20004F4B0D0A00427265616B00210400397E23FEB4C2620C01060009C333 -:200C6000540CFE82C04E234623E560697AB3EBCA760CEBCDCD43011000E1C809C3540C0139 -:200C8000860DC3FC0C2A98077CA53CCA970C3ABB0AB71E13C2E30CC319441E3D011E3901F7 -:200CA0001E36011E35011E34011E33011E3E011E37011E40011E3F011E32011E43011E3A6B -:200CC000C3E30C2AA30A2298071E02011E0B011E01011E0A011E12011E14011E06011E1679 -:200CE000011E0D2A980722B30AAF32ED0B32F30B7CA53CCAF90C22B50A01020D2AB10AC352 -:200D0000A243C17B4B328A072AAF0A22B70AEB2AB30A7CA53CCA1F0D22BE0AEB22C00A2ACE -:200D2000B90A7CB5EB21BB0ACA340DA6C2340D35EBC3C012AF7759329307CD144221B3043F -:200D40007BFE44D2500DFE32D2520DFE1FDA550D3E28D6135FCDEE14231DC2550DE52AB34A -:200D60000AE37EFE3FC26F0DE121B304C3500DCD2347E111FEFFCDCD43CC2142CABB597C28 -:200D8000A53CC412313EC1CD4441AF329307CD4D53CD144221450CCD00003A8A07D602CC61 -:200DA000D53C21FFFF2298073AAA0AB7CAF90D2AAB0AE5CD1A31D1D5CDF80E3E2ADAC20D67 -:200DC0003E20CDD640CD284BD1D2DA0DAF32AA0AC3870DAF32AA0AC3EF0D2AAD0A19DAD321 -:200DE0000DD511F9FFCDCD43D1D2D30D22AB0A3A6209B7CAA20DC3E23ECD284BDAA20DCD83 -:200E000005133C3DCAA20DF5CD2814CDAC117EFE20CCBE28D5CD180FD1F122AF0AD28A53DD -:200E2000D5C5CD655DCD0513B7F5EB22B50AEBCDF80EDA3B0EF1F5CACC14B7C5F5E5CD3563 -:200E400024E1F1C1C5DCA222D1F1D5CA870ED13AF30BB7C25C0E2A760A229B0A2AC20AE34A -:200E6000C1E509E5CDB642E122C20AEB74C1D1E52323732372231123080B0B0B0B1A7723E7 -:200E8000130B79B0C27D0ED1CDAF0E218000360022A4072A940722BC0ACD37432AA20722D6 -:200EA000A4072ABC0A229407C3A20D2A9A07EB626B7E23B6C82323237EB7CAD00EFE20D290 -:200EC000B70EFE0BDAB70ECD0613CD0513C3B90E23EB732372C3AF0E110000D5CAEB0ED140 -:200EE000CD1D14D5CAF40ECDD343F311FAFFC41D14C2C90CEBD1E3E52A9A07444D7E23B6B0 -:200F00002BC823237E23666FCDCD4360697E23666F3FC83FD0C3FB0EAF32690A32680A012B -:200F20003B011123087EB7C23D0F2140017D914F7C9847212208AF1213121312C9FE22CAD3 -:200F4000790FFE20CA4F0F3A680AB77ECA820F23F5CD5911F1D63ACA610FFE4AC2670F3E3F -:200F60000132680A32690AD655C2250FF57EB7E37CE1CA2A0FBECA4F0FF57E23CD5911C323 -:200F80006D0FFE3F3E91D5C5CA4810116A04CD5A1CCD0445DA9710E511CC0FCDBE0FC2D6B1 -:200FA0000FCD051311D00FCDBE0F3E89CAB80F11D30FCDBE0FC2D60F3E8DC1C348101AB7AF -:200FC000C84FCD5A1CB9C02313C3BE0F474F2000544F00554200E1CD5A1CE5219B5ED6414E -:200FE000874F0600095E2356E123E5CD5A1C4F1AE67FCA641123B9C23C101A13B7F2EB0F42 -:2010000079FE28CA21101AFED3CA2110FED2CAFD03CD5A1CFE2ECA1C10CDE2213E00D2640D -:2010200011F11AB7FA4710C1D1F680F53EFFCD5911AF32690AF1CD5911C3250FE11A13B7E3 -:20104000F23D1013C3EA0F2BF5115A104F1AB7CA691013B9C24D10C36B108CABACAAA7A97E -:20106000D6A28A939F89CF8D00AFC23E0132690AF1C1D1FEA2F5CC5711F1FEB4C28410CDF0 -:2010800059113EF2FEDBC23511F5CD57113E8FCD5911F1F5C37B0F7EFE2ECAA710FE3AD23F -:2010A0002211FE30DA22113A690AB77EC1D1FA4F0FCAD310FE2ECA4F0F3E0ECD5911D5CDD0 -:2010C0002814CDAC11E3EB7DCD59117CE1CD5911C3250FD5C57ECDD12ECDAC11C1D1E53A1E -:2010E000670AFE02C2FF102A040C7CB73E02C2FF107D652E0FFE0AD2C710C611C3CC10F5F5 -:201100000FC61BCD591121040CCD641DDA121121000CF1F57ECD5911F1233DC21311E1C389 -:20112000250F116904131AE67FCA8E1113BE1AC22511C3A011FE26C24F0FE5CD0513E1CDEF -:201140005B1CFE483E0BC24B113E0CCD5911D5C5CD691CC1C3C5103E3A12130B79B0C01EF6 -:2011600017C3E30CE12B3D32690AC1D1CD5A1CCD591123CD5A1CCD0445D26F11FE3AD28B49 -:2011800011FE30D26F11FE2ECA6F11C3250F7EFE20D2A011FE09CAA011FE0ACAA0113E20CF -:2011A000F53A690A3CCAA9113DC36D102B7EFE20CAAC11FE09CAAC11FE0ACAAC1123C93EBB -:2011C0006432A50ACD8B39CDD343F0D5EB22A70AEB3A670AF5CD021AF1E5CDAC1F21C00B05 -:2011E000CDC028E1D1C1E5CDEC1422A10A21020039CD540CC2111209D52B562B5E2323E5C7 -:201200002AA10ACDCD43E1D1C2F111D1F922B10A0ED1EB0E08CDC742E52AA10AE3E52A9805 -:2012200007E3CDD343CECD641DCAE10CD2E10CF5CD021AF1E5F24E12CD7A29E31101007E66 -:20124000FED1CC5320D5E5EBCD9228C37112CDF429CDB428E1C5D5010081515A7EFED13E48 -:2012600001C27212CD031AE5CDF429CDB428CD4528E1C5D54FCD641D47C52BCD0513C2C9CC -:201280000CCDE224CD0513E5E52AC40B2298072AA70AE30682C533F5F5C3A0450682C533B6 -:2012A000E5CD0000E1B7C45C4222AF0AEB2100003922B10AEB7EFE3ACAE512B7C2C90C23B2 -:2012C0007E23B6CA850C235E2356EB2298073AFE0BB7CAE412D53E5BCDD640CD1A313E5DF8 -:2012E000CDD640D1EBCD051311A012D5C80000C38A5D000000000000000000000000000957 -:201300004E2346C5EB237EFE3AD0FE20CA0513D28613B7C8FE0BDA8113FE1EC223133A6CA2 -:201320000AB7C9FE10CA6013F523326C0AD61CD26613D6F5D23E13FEFEC252137E23226A9D -:201340000A26006F226E0A3E02326D0A218C13F1B7C97E2323226A0A2B66C34313CD8E13C8 -:201360002A6A0AC306133C07326D0AD5C5116E0AEB47CDCD28EBC1D1226A0AF1218C13B775 -:20138000C9FE09D20513FE303F3C3DC91E103A6C0AFE0FD2AB13FE0DDAAB132A6E0AC2A8BA -:2013A000132323235E2356EBC3032C3A6D0A32670AFE08CAC3132A6E0A22040C2A700A2269 -:2013C000060CC9216E0AC3EE281E03011E02011E04011E08CD034501C90CC5D8D6414F47FF -:2013E000CD0513FEF3C2F513CD0513CD0345D8D64147CD05137891D83CE321CA0A06000934 -:2014000073233DC20014E17EFE2CC0CD0513C3D413CD0513CD5620F01E05C3E30C7EFE2EB4 -:20142000EB2AB50AEBCA05132BCD0513FE0ECA3314FE0DEB2A6E0AEBCA0513AF326C0A2BF7 -:20144000110000CD0513D0E5F5219819CDCD43DA6414626B19291929F1D6305F160019EB2A -:20146000E1C34314F1E1C9CA3743FE0ECA7414FE0DC29A52CD3B4301A012C394140E03CD34 -:20148000C742CD2814C1E5E52A9807E33E8DF533C5C39814C5CD28143A6C0AFE0DEBC8FEA2 -:2014A0000EC2C90CEBE52A6A0AE3CDEE1423E52A9807CDCD43E1DCFB0ED4F80ED2CC140B5C -:2014C0003E0D32A90AE1CD2C246069C91E08C3E30CC016FFCD500CF922B10AFE8D1E03C232 -:2014E000E30CE122980721A012E33EE1013A0E0006007948472BCD0513B7C8B8C823FE22DD -:20150000CAF2143CCAF614D68CC2F514B88A57C3F514F1C603C32D15CD8B39CDD343F0EB4B -:2015200022A70AEBD53A670AF5CD021AF1E3473A670AB878CA3D15CDAC1F3A670A11040C19 -:20154000FE05DA481511000CE5FE03C27F152A040CE5235E23562A9A07CDCD43D273152AB3 -:20156000C60ACDCD43D1D27B1521980ACDCD43D27B153ED1CDC648EBCDA346CDC648E3CD73 -:20158000C928D1E1C9FEA8C2B515CD0513CDD34389CD28147AB3CAA215CDF60E5059E1D278 -:2015A000CC14EB22B90AEBD83ABB0AB77BC83A8A075FC3F90CCD75207E47FE8DCAC415CDAB -:2015C000D343892B4B0D78CAED12CD2914FE2CC0C3C51511BB0A1AB7CAD80C3C328A0712B1 -:2015E0007EFE83CAF315CD2814C07AB3C298143CC3F715CD0513C02AB70AEB2AB30A22988F -:2016000007EBC07EB7C20C162323232323C3EC14CD7520C0B7CA1814C3E30C110A00D5CA52 -:201620003D16CD1D14EBE3CA3E16EBCDD3432CEB2AAD0AEBCA3D16CD2814C2C90CEB7CB5E3 -:20164000CA181422AD0A32AA0AE122AB0AC1C3A20DCD021A7EFE2CCC0513FE89CA6416CDDD -:20166000D343CF2BE5CD8628E1CA7E16CD0513C8FE0ECA9514FE0DC2ED122A6E0AC9160141 -:20168000CDEC14B7C8CD0513FEA2C2801615C28016C36C163E01328D07C3A1160E02CD0D06 -:2016A000512BCD0513CC2142CAE917FED9CAF73EFED0CA6517FED4CA6517E5FE2CCA2517B9 -:2016C000FE3BCAE217C1CD021AE5CD641DCADC16CD2931CDC74636202A040C34CD5446C287 -:2016E0001E172A040C3A8D07B7CA05173A8F07473CCA1E173A8C07B7CA1E17863FD21B1772 -:201700003DB8C31B173A9007473CCA1E173A650AB7CA1E17863FD21B173DB8D42142CD2645 -:2017200047E1C3A1160128002A940709CD54467EC25C173A8D07B7CA49173A8E07473C3ABB -:201740008C07CA5C17B8C356173A9107473A650AFEFFCA5C17B8D42142D2E217D60ED25C09 -:20176000172FC3D717F5CD0513CD5620F1F5FED4CA74171B7AB7F27C17110000E5CD54461A -:20178000C29B173A8D07B73A8F07C290173A90076F3CCA9B172600CD0D2CEBE1CDD343291B -:2017A0002BF1D6D4E5CAC6170128002A940709CD54467EC2C6173A8D07B7CAC3173A8C0766 -:2017C000C3C6173A650A2F83DAD7173CCAE217CD21427B3DFAE2173C473E20CDD64005C2E1 -:2017E000DB17E1CD0513C3A816AF328D07E5676F229407E1C9CDD34385FE23CAA751CD48B9 -:201800004CCD6F18CD8B39CD3B2AD5E5CD304BD1C1DA1644C5D50600CDCA46E13E03C32D0E -:20182000153F5265646F2066726F6D2073746172740D0A00237EB7CAC90CFE22C23418C3A9 -:20184000DA18E1E1C34E183AA60AB7C2C30CC1212118CD23472AAF0AC9CD0B51E5216109E2 -:20186000C33B19FE23CA5918CD484C019918C5FE223E003293073EFF32E70BC0CDC8467E79 -:20188000FE2CC28F18AF32E70BCD0513C39318CDD3433BE5CD2647E1C9E53AE70BB7CAAB6B -:2018A000183E3FCDD6403E20CDD640CD304BC1DA1644C5AF32A60A362CEBE1E5D5D52B3EB6 -:2018C0008032A50ACD0513CD893A7E2BFE5BCAD618FE28C2FD1823060004CD0513CAC90CCA -:2018E000FE22CA3418FE28CAD918FE5BCADA18FE5DCAF918FE29C2DA1805C2DA18CD05130D -:20190000CA0819FE2CC2C90CE37EFE2CC242183E01320A0CCD64193A0A0C3DC24218E5CD48 -:20192000641DCCA848E12BCD0513E37EFE2CCABF18E12BCD0513B7E1C24E18362CC3451919 -:20194000E52AC80AF6AF32A60AE3C35119CDD3432CCD8B39E3D57EFE2CCA63193AA60AB728 -:20196000C2D319F6AF32BC0BCD5446C29751CD641DF5C2A219CD05135747FE22CA8C193AFE -:20198000A60AB757CA8919163A062C2BCDCB46F1C6034F3ABC0BB7C879EB21B119E3D5C33F -:2019A0002E15CD0513F1F5018F19C5DAD12EC3CA2E2BCD0513CABD19FE2CC24718E32BCD41 -:2019C0000513C24D19D13AA60AB7EBC2FC43D5E1C3E917CDEC14B7C2EC19237E23B61E0409 -:2019E000CAE30C235E2356EB22A30AEBCD0513FE84C2D319C36319CDD343F0C3021ACDD3E9 -:201A000043282B1600D50E01CDC742CD931BAF32090C22BC0A2ABC0AC17E229D0AFEEFD84A -:201A2000FEF2DA8E1AD6F25FC2341A3A670AFE037BCA5B48FE0CD0217F041600197856BA34 -:201A4000D0C501151AC57AFE7FCAAC1AFE51DABA1AE6FEFE7ACABA1A21040C3A670AD603C9 -:201A6000CAE10CB74E2346C5FA7F1A234E2346C5E27F1A21000C4E234623C54E2346C5C6C1 -:201A8000034B47C501E31AC52A9D0AC3051A1600D6EFDAC61AFE03D2C61AFE0117AABA575D -:201AA000DAC90C229D0ACD0513C3901ACDF429CD992801CC36167FC3871AD5CD7A29D1E5ED -:201AC00001751DC3871A78FE64D0C5D511046421421DE5CD641DC2581A2A040CE5015C46A9 -:201AE000C3871AC17932680A3A670AB8C2FC1AFE02CA181BFE04CA671BD22B1B5778FE0831 -:201B0000CA281B7AFE08CA4F1B78FE04CA641B7AFE03CAE10CD26F1B21A904060009094E7F -:201B20002346D12A040CC5C9CD202ACDF428E122020CE122000CC1D1CDA928CD202A219586 -:201B4000043A680A07856F8C95677E23666FE978F5CDF428F132670AFE04CA361BE12204E5 -:201B60000CC33B1BCDF429C1D1219F04C3411BE1CD9928CD142ACDB428E122060CE12204A2 -:201B80000CC3691BE5EBCD142AE1CD9928CD142AC36727CD0513CADE0CDAD12ECD0445D2F2 -:201BA0004A1CFE20DA5D133CCAD31C3DFEF2CA931BFEF3CA3C1CFE22CAC846FED5CA4F1DA9 -:201BC000FE26CA691CFED7C2D61BCD05133A8A07E5CDD51DE1C9FED6C2E71BCD0513E52A80 -:201BE000B30ACD032CE1C9FEDCC2161CCD0513CDD34328FE23C2031CCD7220E5CD5051E12F -:201C0000C3061CCD893ACDD34329E5EB7CB5CA1814CDDC29E1C9FED2CADB1DFEDACACB4988 -:201C2000FEDDCA6F42FED8CA0049FE85CA2755FED3CA541ECDFE19CDD34329C9167DCD0571 -:201C40001A2ABC0AE5CD6B28E1C9CD8B39E5EB22040CCD641DC4EE28E1C97EFE61D8FE7BF8 -:201C6000D0E65FC9FE26C22814110000CD0513CD5B1CFE4FCAAD1CFE48C2AC1C0605237ECE -:201C8000CD5B1CCD0445EBD2971CFE3AD2CE1CD630DACE1CC39E1CFE47D2CE1CD6372929DF -:201CA0002929B56FEB05C27E1CC3DB0C2BCD0513EBD2CE1CFE38D2C90C01DB0CC529D8294D -:201CC000D829D8C10600D6304F09EBC3AD1CCDDC29EBC9237ED681FE07C2E81CE5CD05137C -:201CE000FE28E1C2CC373E070600074FC5CD051379FE05D20F1DCDFE19CDD3432CCD3B2A2E -:201D0000EB2A040CE3E5EBCD7520EBE3C3291DCD341CE37DFE0CDA201DFE1BE5DCF429E13C -:201D200011481CD53E0132090C019F01094E236669E915FEF3C8FE2DC814FE2BC8FEF2C882 -:201D40002BC93C8FC1A0C6FF9FCD7F28C3611D165ACD051ACD7A297D2F6F7C2F6722040C1F -:201D6000C1C3151A3A670AFE08D2711DD603B737C9D603B7C978F5CD7A29F1D1FE7ACA0DC8 -:201D80002CFE7BCAA82B01D71DC5FE46C2951D7BB56F7CB2C9FE50C2A01D7BA56F7CA2C9B6 -:201DA000FE3CC2AB1D7BAD6F7CAAC9FE32C2B81D7BAD2F6F7CAA2FC97D2FA32F6F7C2FA2F4 -:201DC0002FC97D936F7C9A67C3032C3A8C07C3D41D3A650A3C6FAF67C3DC29CDFA1DD5CDE4 -:201DE000341CE35E2356215727E5D53A670AF5FE03CCA848F1EB21040CC9CD051301000067 -:201E0000FE1BD2131EFE11DA131ECD05133A6E0AB7174FEB21740709EBC9CDFA1DD5CDD33B -:201E200043F0CDD122E3732372E1C9FED2CA1A1ECDD41FCDC61FEB732372EB7EFE28C2ECA6 -:201E400014CD0513CD8B397EFE29CAEC14CDD3432CC3441ECDD41F3A670AB7F522BC0AEB6B -:201E60007E23666F7CB5CAD50C7EFE28C21E1FCD0513229D0AEB2ABC0ACDD34328AFF5E550 -:201E8000EB3E8032A50ACD8B39EBE33A670AF5D5CD021A22BC0AE1229D0AF1CDAC1F0E04CE -:201EA000CDC74221F8FF39F9CDF7283A670AF52ABC0A7EFE29CACB1ECDD3432CE52A9D0A69 -:201EC000CDD3432CC3811EF1324E0BF1B7CA0F1F32670A21000039CDEE2821080039F9D169 -:201EE0002E032C1B1AB7FAE21E1B1B1B3A670A85473A4E0B4F80FE64D21814F57D0600217C -:201F0000500B094FCDC01F01C71EC5C5C33A152ABC0ACD0513E52A9D0ACDD343293ED52214 -:201F20009D0A3AE60AC604F50F4FCDC742F14F2F3C6F26FF39F9E511E40ACDC01FE122E4F5 -:201F40000A2A4E0B22E60A444D21E80A11500BCDC01F676F224E0B2ABA0B2322BA0B7CB5AB -:201F600032B70B2A9D0ACDF7192BCD0513C2C90CCD641DC2881F11980A2A040CCDCD43DABD -:201F8000881FCDA346CD01472AE40A545D23234E23460303030321E40ACDC01FEBF92ABA7A -:201FA0000B2B22BA0B7CB532B70BE1F1E5E607218B044F060009CD2C1DE1C91A7723130B9B -:201FC00078B1C2BB1FC9E52A9807237CB5E1C01E0CC3E30CCDD343D33E8032A50AB64FC3D7 -:201FE0009039FE7EC2C90C237E23FE83CA604AC3C90CCD782032F91FDB00C3D51DCD622026 -:20200000D300C9CD6220F51E002BCD0513CA1720CDD3432CCD7520F157DB00ABA2CA1920CD -:20202000C9C3C90CFE9EC23A20CD0513CD7520328F075FCD4820328E07C9CD752032900729 -:202040005FCD4820329107C9D60ED24820C61C2F3C83C9CD0513CD021AE5CD7A29EBE17A39 -:20206000B7C9CD7520321A20320120CDD3432CC37520CD0513CD021ACD5920C218142BCD5E -:2020800005137BC93E01328D07C1CDD80EC5CD655D21FFFF229807E1D14E23462378B1CAB8 -:2020A000870DCD5446CC5142C54E234623C5E3EBCDCD43C1DA860DE3E5C5EB22B50ACD1A49 -:2020C00031E17EFE09CACD203E20CDD640CDE620216209CDDC20CD2142C391207EB7C8CDDB -:2020E000A54223C3DC2001620916FFAF32E60BCD655DC3F920032315C87EB702C8FE0BDA74 -:202100000821FE205FDA1C21B7FA41215FFE2ECA1C21CDE221D21C21AFC32F213AE60BB7DA -:20212000CA2D213CC22D213E20020315C83E0132E60B7BFE0BDA3D21FE20DAED2102C3F51D -:20214000203C7EC24A21237EE67F23FEDBC258210B0B0B0B14141414FEA2CC6B2AFEB4C24A -:202160006C217E23FEF23EB4CA6C212BE5C5D5211802470E400C23545D7EB7CA752123F2F4 -:2021800079217EB8C27621EBFED2CA8F21FED379D1C15FC2A2213AE60BB73E0032E60BC31B -:2021A000B721FE5BC2AE21AF32E60BC3C6213AE60BB73EFF32E60BCAC2213E20020315CAB0 -:2021C00058477BC3C9217E235FE67F020315CA5847B3F2C621FEA8C2DE21AF32E60BE1C3E7 -:2021E000F920CD0445D0FE30D8FE3A3FC92BCD0513D5C5F5CD8E13F1010C22C5FE0BCA6F66 -:2022000036FE0CCA72362A6E0AC32931C1D13A6C0A1E4FFE0BCA1F22FE0C1E48C22A223ECE -:2022200026020315C87B020315C83A6D0AFE041E00DA3B221E21CA3B221E237EFE20CCBE64 -:20224000287E23B7CA6D22020315C83A6D0AFE04DA41220B0A03C25E22FE2ECA6822FE44B7 -:20226000CA6822FE45C241221E00C341227BB7CA7622020315C82A6A0AC3F920CDD80EC5F6 -:20228000CD3524C1D1C5C5CDF80ED29422545DE3E5CDCD43D2181421450CCD2347C121873B -:2022A0000EE3EB2AC20A1A020313CDCD43C2A622606922C20AC9CDDB22CD5C5D7EC3D51DB0 -:2022C000CDD122D5CD5C5DCDD3432CCD7520D112C9CD021AE5CDDB22EBE1C9017A29C5CD63 -:2022E000641DF83A070CFE90C0CD4528F8CDF429018091110000C38825010A00C55058CAD9 -:202300002F23FE2CCA1123D5CD1D14424BD1CA2F23CDD3432CCD1D14CA2F23F1CDD3432CCD -:20232000D5CD2814C2C90C7AB3CA1814EBE3EBC5CDF80ED1D5C5CDF80E6069D1CDCD43EB14 -:20234000DA1814D1C1F1E5D5C35B2309DA1814EBE521F9FFCDCD43E1DA1814D55E23567A17 -:20236000B3EBD1CA6E237E23B62BEBC24B23C5CD9123C1D1E1D55E23567AB3CA8C23EBE31D -:20238000EB23732372EB09EBE1C3752301860DC5FEF6AF32A90A2A9A072B237E23B6C823D0 -:2023A0005E2356CD0513B7CA9A234F3AA90AB779CA1224FEA8C2D423CD0513FE89C2A62361 -:2023C000CD0513FE0EC2A623D5CD33147AB3C2DD23C3FD23FE0EC2A323D5CD3314E5CDF89F -:2023E0000E0B3E0DDA2524CD1442210224D5CD2347E1CD1A31C1E1E5C5CD1231E1D12BC3EB -:20240000A323556E646566696E6564206C696E652000FE0DC2FF23D5CD3314E5EB2323236B -:202420004E23463E0E21FC23E52A6A0AE52B702B712B77E1C93AA90AB7C8C39223CDD343A7 -:2024400042CDD34341CDD34353CDD343453AC70BB7C2D20CE52AC40AEB2AC60ACDCD43C2F4 -:20246000D20CE17ED630DAC90CFE02D2C90C32C60B3C32C70BCD0513C97EB7C8CD8324233E -:20248000C37924F5C35C41CA9424CD021AE5CD7A29C3B024E521B824CD2347CD0D4BD1DA47 -:2024A0001644D5237ECDD12E7EB7C29524CD7A29226A38CDCF37E1C952616E646F6D206E30 -:2024C000756D626572207365656420282D333237363820746F20333237363729000E1DC35E -:2024E000E4240E1A0600EB2A980722C40BEB042BCD0513CA0025FEA2CA1525FECFC2F024CC -:20250000B7C21525237E23B659CAE30C235E2356EB22C40BEBCD051379FE1A7ECA2E25FEAC -:20252000B4CAEE24FEB5C2EF2405C2EF24C9FE82CAEE24FE83C2EF2405C8CD0513CA00258D -:20254000EB2A9807E52AC40B229807EBC5CD8B39C12BCD0513110025CA6325CDD3432C2B54 -:20256000113825E3229807E1D5C9F53A090C320A0CF1F5AF32090CF1C9210D36CDB728C3D5 -:202580008825CDB728CD742878B7C83A070CB7CAA92890D2A2252F3CEBCD9928EBCDA9284D -:2025A000C1D1FE19D0F5CDD62867F1CD62267CB721040CF2C925CD4226D223262334CA88F8 -:2025C000302E01CD8926C32326AF90477E9B5F237E9A57237E994FDC4E266863AF4779B7BA -:2025E000C20E264A54656F78D608FEE0C2DD25AF32070CC97CB5B2C20626790517D2FB2566 -:20260000041F4FC3112605297A1757798F4FF2F425785C45B7CA232621070C8677D2EF25DC -:20262000CAEF257821070CB7FC352646237EE680A94FC3A9281CC014C00CC00E8034C0C368 -:2026400087307E835F237E8A57237E894FC921080C7E2F77AF6F90477D9B5F7D9A577D9956 -:202660004FC90600D608DA7126435A510E00C36426C6096F7AB3B0C28526792DC81F4FD26E -:202680007B26C38B26AF2DC8791F4F7A1F577B1F5F781F47C3852600000081049AF71983B3 -:2026A0002463438375CD8D84A97F83820400000081E2B04D830A721183F404357FCD452870 -:2026C000B7EA1814CDD026013180111872C30327CDB4283E8032070CA8F5CD9928219B2677 -:2026E000CDA737C1E1CD9928EBCDA92821AC26CDA737C1D1CD6927F1CD9928CD5428C1D18F -:20270000C38825CD4528C82E00CD032879323C27EB223727010000505821DA25E52125278D -:20272000E5E521040C7E23B7CA5927E5EB1E081F5779D23D27D511000019D1CE001F4F7C59 -:202740001F677D1F6F781F47E610CA512778F620471D7AC22F27EBE1C9435A514FC9CD994D -:202760002821AE2DCDA628C1D1CD4528CA90302EFFCD032834CA673034CA67302B7E32A07A -:20278000272B7E329C272B7E32982741EBAF4F575F32A327E5C57DD6006F7CDE006778DE7B -:2027A00000473E00DE003FD2B12732A327F1F137D2C1E1793C3D1FF2CF27173AA3271FE62B -:2027C000C0F578B4B5CACA273E20E1B4C32426177B175F7A175779174F297817473AA327D6 -:2027E0001732A32779B2B3C29427E521070C35E1C29427C3EF253EFF2EAF21130C4E23AE6F -:20280000472E0078B7CA27287D21070CAE80471FA878F22628C68077CA5727CDD628772BE4 -:20282000C9CD45282FE1B7E1F2EF25C36730CDB42878B7C8C602DA803047CD882521070CA6 -:2028400034C0C380303A070CB7C83A060CFE2F179FC03CC9068811000021070C4F700600B9 -:2028600023368017C3D725CD8628F0CD641DFAF82BCAE10C21060C7EEE8077C9CD86286FD3 -:20288000179F67C3DC29CD641DCAE10CF245282A040C7CB5C87CC34F28EB2A040CE3E52AEF -:2028A000060CE3E5EBC9CDB728EB22040C606922060CEBC921040C5E2356234E234623C942 -:2028C00011040C0604C3CD28EB3A670A471A77132305C2CD28C921060C7E07371F773F1F09 -:2028E0002323777907371F4F1FAEC9210D0C11C828C3FA28210D0C11C928D511040CCD64DD -:202900001DD811000CC978B7CA4528214E28E5CD452879C821060CAE79F8CD20291FA9C986 -:202920002378BEC02B79BEC02B7ABEC02B7B96C0E1E1C97AAC7CFA4F28BAC240297D93C8E2 -:20294000C35028210D0CCDC92811140C1AB7CA4528214E28E5CD45281B1A4FC821060CAE28 -:2029600079F8132306081A96C21D291B2B05C26629C1C9CD4929C24E28C9CD641D2A040CFC -:20298000F8CAE10CE29929CDF428210936CDEE28CD262CCDFE29C39C29CD79253A060CB7AF -:2029A000F5E67F32060C3A070CFE90D2DB0CCD422A3A070CB7C2BD29F1EBC3C229F1EBF2A8 -:2029C000C8297C2F677D2F6FC3DC2921DB0CE53A070CFE90D2E529CD422AEBD122040C3E04 -:2029E0000232670AC9018090110000CD0629C0616AC3DB29CD641DE0FA112ACAE10CCDB45E -:202A000028CD362A78B7C8CDD62821030C46C323262A040CCD362A7C551E000690C35928ED -:202A2000CD641DD0CAE10CFC112A21000022000C22020C3E08013E04C3E129CD641DC8C3DC -:202A4000E10C474F575FB7C8E5CDB428CDD628AE67FC662A3E9890CD62267C17DC35260639 -:202A600000DC4E26E1C91B7AA33CC00BC9CD641DF8CD4528F2802ACD7428CD802AC36B2802 -:202A8000CD641DF8D2A62ACAE10CCDCF2921070C7EFE983A040CD07ECD422A36987BF57902 -:202AA00017CDD725F1C921070C7EFE90C2CA2A4F2B7EEE8006062BB605C2B62AB721008034 -:202AC000C2C92ACDDC29C3202A79B7C8FEB8D0F5CDB428CDD628AE2B36B8F52B71FCFA2A03 -:202AE0003A060C4F21060C3EB890CD252DF1FCDD2CAF32FF0BF1D0C3912C21000C7E35B7AA -:202B000023CAFD2AC9E521000078B1CA222B3E1029DAD63BEB29EBD21E2B09DAD63B3DC223 -:202B2000102BEBE1C97C179F47CDEE2B7998C3342B7C179F47E57A179F19880FACF2DB2953 -:202B4000C5EBCD142AF1E1CD9928EBCD082CC34E307CB5CADC29E5D5CDE22BC5444D210022 -:202B6000003E1029DA892BEB29EBD2712B09DA892B3DC2632BC1D17CB7FA812BD178C3EA5E -:202B80002BEE80B5CA9A2BEB01C1E1CD142AE1CD9928CD142AC1D1C3032778B7C1FADC29D7 -:202BA000D5CD142AD1C374287CB5CACC0CCDE22BC5EBCDEE2B444D2100003E11F5B7C3CB87 -:202BC0002BF5E509D2CA2BF1373EE17B175F7A17577D176F7C1767F13DC2C12BEBC1D5C3E3 -:202BE000772B7CAA47CDE92BEB7CB7F2DC29AF4F956F799C67C3DC292A040CCDEE2B7CEE00 -:202C000080B5C0EBCD362AAF0698C35928D5CDA82BAF821F677B1F6FCDDF29F1C3EA2B2122 -:202C2000130C7EEE807721140C7EB7C8472B4E11070C1AB7CAEB2890D2522C2F3CF50E08EC -:202C400023E51A467778121B2B0DC2422CE1462B4EF1FE39D0F5CDD628210C0C473E0077FB -:202C600032FF0BF121130CCD252D78B7F2862C3A0C0C32FF0BCDFA2CD2CB2CEB34CA88300A -:202C8000CD512DC3CB2C3E9ECDFC2C21080CDC122DAF473A060CB7C2BA2C21FF0B0E0856D6 -:202CA000777A230DC29F2C78D608FEC0C2922CC3EF250521FF0BCD592DB7F2B22C78B7CAF8 -:202CC000CB2C21070C8677D2EF25C83AFF0BB7FCDD2C21080C7EE6802B2BAE77C921000C94 -:202CE000060734C02305C2E22C34CA88302B3680C911300C210D0CC3022D3E8E210D0C11EB -:202D0000000C0E0732092DAF1A8E1213230DC2082DC97E2F7721FF0B0608AF4F799E7723B2 -:202D200005C21C2DC971E5D608DA3C2DE1E51100084E73592B15C2312DC3272DC60957AFFE -:202D4000E115C8E51E087E1F772B1DC2462DC33F2D21060C1601C3432D0E087E1777230D1B -:202D6000C25B2DC9CD4528C83A140CB7CAEF25CDF927CD9D2E711306071A13B7D5CA992DF0 -:202D80000E08C51F47DCFA2CCD512D78C10DC2822DD105C2792DC3912C21060CCD2D2DC313 -:202DA000912DCDCCCCCCCCCC4C7D00000000000020843A070CFE41D2C62D11A22D210D0CB4 -:202DC000CDC928C3642D3A060CB7F2D62DE67F32060C217428E5CD0E2E11000C210D0CCD71 -:202DE000C928CD0E2ECD262C11000C210D0CCDC9283E0FF5CD162ECD222ECD262C21130CD6 -:202E0000CD332EF13DC2F32DCD0E2ECD0E2E21070C35C0C3EF2521140C3E0435C83DC21BC8 -:202E20002EC9D13E04210D0C4E234623C53DC2282ED5C9D13E0421140CC1702B712B3DC271 -:202E4000392ED5C93A140CB7CA94303A070CB7CAEF25CDF6273434CA8830CD9D2E21370C1C -:202E600071413E9ECDF12C1A993FDA742E3E8ECDF12CAFDA12043A060C3C3D1FFACE2C1728 -:202E800021000C0E07CD5B2D21300CCD592D78B7C2622E21070C35C2622EC3EF257932131A -:202EA0000C2B11360C0100077E12711B2B05C2A82EC9CDF428EB2B7EB7C8C602DA88307706 -:202EC000E5CD262CE134C0C38830CDEF25CD332AF6AF016A25C5F53E0132090CF1EB01FF42 -:202EE000006068CCDC29EB7EFE26CA691CFE2DF5CAF92EFE2BCAF92E2BCD0513DAE02FFE3B -:202F00002ECA862FFE65CA0B2FFE45C2352FE5CD0513FE6CCA232FFE4CCA232FFE71CA2322 -:202F20002FFE51E1CA342F3A670AFE08CA4E2F3E00C34E2F7EFE25CA932FFE23CAA42FFEA6 -:202F400021CAA52FFE64CA4E2FFE44C2652FB7CDAE2FCD0513CD321DCD0513DA533014C2F7 -:202F6000652FAF935FE57B905FF4BD2FFCCD2FC2692FE1F1E5CC6B28E1CD641DE8E5215711 -:202F800027E5CDE529C9CD641D0CC2652FDCAE2FC3F92ECD0513F1E5215727E5217A29E546 -:202FA000F5C3652FB7CDAE2FCD0513C3652FE5D5C5F5CCF429F1C4202AC1D1E1C9C8F5CD06 -:202FC000641DF5E42E28F1ECB22EF13DC9D5E5F5CD641DF5E45E27F1ECB22DF1E1D13CC9CE -:202FE000D5788947C5E57ED630F5CD641DF219302A040C11CD0CCDCD43D21530545D2929ED -:203000001929F14F097CB7FA133022040CE1C1D1C3F92E79F5CD112A37D235300174941128 -:203020000024CD0629F23230CD2E28F1CD4830C30D30CD2A2ACDB22ECDF428F1CD5428CD05 -:203040002A2ACD262CC30D30CD9928CD5428C1D1C388257BFE0AD262300707830786D63019 -:203060005FFA1E7FC3582FE521060CCD641DE277303A130CC3783079AE17E1C39E30F1F1CB -:203080003A060C17C39E30F13A080C2F17C39E3079C397303A130C17216205229C07E5C5BC -:2030A000D5F5F52AB90A7CB5C2CB3021090C7EB7CAB8303DC2CB30342A9C07CD792432655D -:2030C0000A3E0DCD83243E0ACD8324F121040C110A31D2D830110E31CDC328CD641DDAEA09 -:2030E0003021000C110E31CDC3282AB90A7CB52A9C07110905EB229C07CA0531CDCD43CA0A -:20310000DB0CC3CC0CF1D1C1E1C9FFFF7FFFFFFFFFFFE521400CCD2347E1012247C5CDDC46 -:2031200029AFCDB231B6C34631AFCDB231E608CA3431362BEBCD8628EBF24631362DC5E573 -:20314000CD6B28E1C1B42336303A9D0A57173A670ADAD732CACF32FE04D2BB31010000CDFA -:20316000BA3521160C460E203A9D0A5FE620CA7F3178B90E2AC27F317BE604C27F31417185 -:20318000CD0513CA9F31FE45CA9F31FE44CA9F31FE30CA7F31FE2CCA7F31FE2EC2A2312BBF -:2031A00036307BE610CAAB312B36247BE604C02B70C9329D0A21160C3620C9CD9928EB2AA6 -:2031C000000CE52A020CE5EBF5AF320B0CF1F5CD663206450E00E57EB8CA0732FE3AD2E756 -:2031E00031FE30DAE7310C237EB7C2D8313E44B847E10E00C2D631F1C1D1EB22000C6069B1 -:2032000022020CEBC1D1C9C50600237EFE2BCA4E32FE2DCA2532D6304F7887878087814763 -:20322000FE10D24E32237EB7C20C3260C178FE45C243327984FE09E1D2F7313E80320B0CDD -:20324000C353327C81FE12E1D2F731C33B32C1E1C3F731F1C1D1EB22000C606922020CEB01 -:20326000C1D1CDA92823FE05E5DE00175714CD5C34010003F53A0B0CB7F28132F182C38BEF -:2032800032F182FA8F3214BAD28F323C473E02D602E1F5CDFB343630CCBE28CD22352B7E1B -:2032A000FE30CA9E32FE2EC4BE28F1CAD032F5CD641D3E228F7723F1362BF2C132362D2F1E -:2032C0003C062F04D60AD2C332C63A23702377233600EB21160CC923C5FE047AD251331F7C -:2032E000DAEE33010306CDF334D17AD605F4CF34CDBA357BB7CC1F283DF4CF34E5CD62313E -:20330000E1CA06337023360021150C233ABC0A9592C87EFE20CA0B33FE2ACA0B332BE5F5D3 -:20332000011F33C5CD0513FE2DC8FE2BC8FE24C8C1FE30C2493323CD0513D249332B012BE8 -:2033400077F1CA3F33C1C30C33F1CA4933E13625C9E51FDAF533CA6D33111136CD432916B3 -:2033600010FA7B33E1C1CD29312B3625C9010EB611CA1BCD0629F264331606CD4528C45CC7 -:2033800034E1C1FAA033C55F789293F4CF34CDE634CD2235B3C4DF34B3C40E35D1C3F332CA -:2033A0005F79B7C4CB2F83FAAB33AFC5F5FCCD2FFAAD33C17B90C15F8278FAC9339293F435 -:2033C000CF34C5CDE634C3DA33CDCF3479CD12354FAF9293CDCF34C5474FCD2235C1B1C26B -:2033E000E5332ABC0A833DF4CF3450C3FC32E5D5CD112AD1AFCAFB331E10011E06CD452806 -:2034000037C45C34E1C1F579B7F5C4CB2F804F7AE604FE019F57814F93F5C5FCCD2FFA1B55 -:2034200034C1F1C5F5FA2934AF2F3C803C82470E00CD2235F1F4D834CD0E35C1F1C24C34CF -:20344000CD1F287EFE2EC4BE2822BC0AF1DA5334839092C5CDAE32EBD1C3FC32D5AFF5CDC0 -:20346000641DE280343A070CFE91D2803411F135210D0CCDC928CD642DF1D60AF5C3653424 -:20348000CDB234CD641DEA953401439111F94FCD0629C39B3411F935CD4329F2AE34F1CDB2 -:2034A000BE2FF5C38334F1CDCD2FF5CDB234F1B7D1C9CD641DEAC43401749411F823CD06D4 -:2034C00029C3CA34110136CD4329E1F2A634E9B7C83D363023C3D034C2DF34C8CD0E3536FC -:2034E00030233DC3DB347B823C473CD603D2EB34C6054F3A9D0AE640C04FC905F20F35228E -:20350000BC0A362E23363004C204352348C905C21A35362E22BC0A2348C90DC0362C230ECF -:2035200003C9D5CD641DE27135C5E5CDF428210936CDEE28CD262CAFCDCF2AE1C1111936A8 -:203540003E0ACD0E35C5F5E5D5062F04E1E53E9ECDFF2CD24B35E13E8ECDFF2CEBE1702376 -:20356000F1C13DC24235C5E521000CCDA628C37E35C5E5CD79253E01CD422ACDA928E1C16E -:20358000AF115F363FCD0E35C5F5E5D5CDB428E1062F047B965F237A9E5723799E4F2B2B6F -:2035A000D29235CD422623CDA928EBE17023F1C1DA843513133E04C3C035D51165363E05F4 -:2035C000CD0E35C5F5E5EB4E2346C523E3EB2A040C062F047D936F7C9A67D2D3351922045C -:2035E0000CD1E17023F1C13DC2C035CD0E3577D1C900000000F90215A2E1FF9F31A95F63E6 -:20360000B2FEFF03BFC91B0EB60000000000000080000004BFC91B0EB60080C6A47E8D03AE -:2036200000407A10F35A0000A0724E1809000010A5D4E8000000E8764817000000E40B5481 -:2036400002000000CA9A3B00000000E1F5050000008096980000000040420F00000000A00F -:2036600086011027001027E80364000A000100AF47C20601C5CDDB22C111150CD5AF12051F -:20368000040E06CA8E360E04298F298F298F298FB7C29F36793DCA9F361AB7CAAB36AFC6FE -:2036A00030FE3ADAA836C607121312AF0DCAB8360504CA8A36C3883612E1C9217428E3E919 -:2036C000CD9928210D36CDA628C3CF36CDF429C1D1217225E53E0132090CCD452878CA2B4F -:2036E00037F2E836B7CA9730B7CAF025D5C579F67FCDB428F21337F53A070CFE99DA04374A -:20370000F1C31337F1D5C5CD8D2AC1D1F5CD0629E17C1FE122060CE122040CDCBB36CC7468 -:2037200028D5C5CDBD26C1D1CD0327013881113BAACD03273A070CFE88D26037FE68DA72F9 -:2037400037CD9928CD8D2AC681C1D1CA6337F5CD8525217B37CDA737C11100004AC30327F0 -:20376000CD99283A060CB7F26F37F1F1C3EF25C37E30010081110000C3A928077C885974F7 -:20378000E0972677C41D1E7A5E50637C1AFE757E1872318000000081CD992811952BD5E52F -:2037A000CDB428CD0327E1CD99287E23CDA62806F1C1D13DC8D5C5F5E5CD0327E1CDB72838 -:2037C000E5CD8825E1C3B03752C74F80CD0513E5219726CDA628CDDD37E1C3362ACD4528B5 -:2037E000214838FA3E38216938CDA628214838C886E6070600772387874F09CDB728CD03FD -:20380000273A47383CE6030600FE018832473821693887874F09CD7C25CDB4287B59EE4F15 -:203820004F36802B463680214638347ED6ABC23538770C151CCDDA25216938C3C028772BCC -:20384000772B77C31938000000354ACA99391C76982295B3980ADD479853D199990A1A9F15 -:203860009865BCCD98D6773E9852C74F8068B1466899E9926910D1756821FF38CD7C253A1D -:20388000070CFE77D83A060CB7F29538E67F32060C117428D501227E1183F9CD0327CD9950 -:2038A00028CD8D2AC1D1CD852501007F110000CD0629FAD93801807F110000CD88250180AF -:2038C00080110000CD8825CD4528F4742801007F110000CD8825CD74283A060CB7F5F2E6CF -:2038E00038EE8032060C210739CD9837F1F03A060CEE8032060CC90000000083F9227EDB42 -:203900000F49810000007F05FBD71E866526998758342387E15DA586DB0F4983CD9928CD79 -:203920007F38C1E1CD9928EBCDA928CD7938C36727CD4528FCBB36FC74283A070CFE81DAE3 -:203940004E390100815159CD6927218225E5215839CD983721FF38C9094AD73B78026E846A -:203960007BFEC12F7C74319A7D843D5A7DC87F917EE4BB4C7E6CAAAA7F000000812BCD0592 -:2039800013C8CDD3432C017D39C5F6AF32660A4ECD0345DAC90CAF4732C507237EFE2EDACD -:2039A000E339CAB539FE3AD2AF39FE30D2B539CD0445DAE33947C506FF11C507F6800412CD -:2039C00013237EFE3AD2CD39FE30D2BC39CD0445D2BC39FE2ECABC3978FE27D2C90CC1322F -:2039E000C5077EFE26D2FF39110D3AD51602FE25C814FE24C814FE21C81608FE23C8F179B5 -:203A0000E67F5F1600E521890A1956E12B7A32670ACD05133AA50A3DCA923BF2293A7ED650 -:203A200028CA163BD633CA163BAF32A50AE53AB70BB732B40BCA7D3A2AE60A11E80A19222D -:203A4000B50BEBC3633A1A6F131A13B9C25B3A3A670ABDC25B3A1AB8CAE53A131A26008530 -:203A60003C6F19EB3AB50BBBC2463A3AB60BBAC2463A3AB40BB7CA923AAF32B40B2AC40ACB -:203A800022B50B2AC20AC3633ACD8B39C9575FC1E3C9E1E3D5118C3ACDCD43CA8D3A114D35 -:203AA0001CCDCD43D1CA003BE3E5C53A670A473AC507803C4FC506000303032AC60AE509EB -:203AC000C1E5CDB642E122C60A606922C40A2B3600CDCD43C2CE3AD17223D1732372CDA338 -:203AE0003CEB13E1C9133AC507671ABCC25C3AB7C2F63A13E1C9EBCDB83CEBC25D3AE1C934 -:203B000032070C676F22040CCD641DC2143B21440C22040CE1C9E52A660AE357D5C511C583 -:203B2000071AB7CA583BEBC6021F4FCDC742794E234623C53DC22F3BE53AC507F5EBCD112F -:203B400014F122EC07E1C6021FC12B702B713DC2493B2AEC07C35F3BCD1114AF32C5073AB5 -:203B6000C60BB7CA6C3B7AB3CAD63B1BC1F1EBE3E5EB3C577EFE2CCA1C3BFE29CA843BFECF -:203B80005DC2C90CCD051322BC0AE122660A1E00D511E5F52AC40A3E19EB2AC60AEBCDCD5A -:203BA00043CAF03B5E237E23B9C2B83B3A670ABBC2B83B7EB8CADC3B235E1C1600195E23BE -:203BC0005623C2983B3A660AB7C2D20CF1444DCA572796CA5D3C110900C3E30C233AC5071E -:203BE000BEC2B93B23B7CABE3B2BCDB83CC3BE3B3A670A77235F1600F1CA963C712370CDF4 -:203C0000A33C234FCDC7422323229D0A71233A660A1779DA233CF53AC60BEE0B4F0600F128 -:203C2000D2253CC10371F5237023CD052BF13DC2133CF5424BEB19DADD42CDEB4222C60ACA -:203C40002B3600CDCD43C2403C03572A9D0A5EEB2909EB2B2B73237223F1DA923C474F7E29 -:203C60002316E15E235623E3F5CDCD43D2D63BCD052B19F13D444DC2623C3A670A444D29FE -:203C8000D604DA8A3C29CA8F3C29B7E28F3C09C109EB2ABC0AC9379FE1C97E23C506004FAD -:203CA00009C1C9C5D5F511C5071A47041A13237705C2AC3CF1D1C1C9D5C511C607472304F8 -:203CC00005CAD23C1A13BE23CAC03C783DC49C3CAF3DC1D1C9328A072AB30AB4A53CEBC8A9 -:203CE000C3E73CCD1D14C0E1EB22B50AEBCDF80ED2CC14606923234E234623C5CDE620E1A1 -:203D0000E57CA53C3E21CCD640C41A313E20CDD640216209E50EFF0C7E23B7C2173DE147B0 -:203D20001600CDF541B7CA223DCD5B1CD630DA413DFE0AD2413D5F7A070782078357C32261 -:203D40003DE521203DE31514C24C3D14FED8CABA3EFE4FCAC93EFEDDCAD73EFEF0CAA83D4B -:203D6000FE31DA673DD620FE21CAEC3EFE1CCAE23DFE23CABB3DFE19CA3E3EFE14CAEC3D45 -:203D8000FE13CA093EFE15CADA3EFE28CA393EFE1BCAB53DFE18CA363EFE113E07C2D64050 -:203DA000C1D1CD2142C3E83C7EB7C804CDA5422315C2A83DC9E521033EE337F5CDF5415F45 -:203DC000F1F5DC033E7EB7CAE03DCDA542F1F5DC813EDAD73D23047EBBC2C53D15C2C53DA4 -:203DE000F1C9CDDC20CD2142C1C3FF3C7EB7C83E5CCDA5427EB7CA033ECDA542CD813E1571 -:203E0000C2F43D3E5CCDD640C97EB7C8CDF541FE20D22B3EFE0ACA2B3EFE07CA2B3EFE0996 -:203E2000CA2B3E3E07CDD640C30C3E77CDA542230415C2093EC936004816FFCDA83DCDF5DA -:203E400041FE7FCA713EFE08CA733EFE0DCAD73EFE1BC8FE08CA733EFE0ACA913EFE07CAEE -:203E6000913EFE09CA913EFE20DA3E3EFE5FC2913E3E5F0504CA993ECDA5422B05113E3EB9 -:203E8000D5E50D7EB737CA5727237E2B7723C3833EF579FEFFDAA13EF13E07CDD640C33E7F -:203EA0003E900C04C5EB6F260019444D23CDB942C1F177CDA54223C39E3E78B7C82B3E0843 -:203EC000CDA5420515C2C93EC978B7C8052B7ECDA54215C2C93EC9CDDC20CD2142C1D17A7D -:203EE000A33C216109C837F523C3140EC1D17AA33CCA1C42C3870DCD031ACD3B2ACDD343F3 -:203F00003BEB2A040CC3113F3AA60AB7CA1B3FD1EBE5AF32A60A3CF5D546B0CA1814237EA4 -:203F200023666FC3453F58E50E027E23FE5CCA9140FE20C23B3F0C05C22A3FE1433E5CCD3E -:203F4000CC40CDD640AF5F57CDCC40577E23FE21CA8E40FE23CAA13FFE26CA894005CA67CD -:203F600040FE2B3E08CA483F2B7E23FE2ECAC03FFE5FCA7D40FE5CCA263FBEC23F3FFE24F3 -:203F8000CA9A3FFE2AC23F3F7823FE02DA923F7EFE243E20C29E3F051CFEAFC610231C82CE -:203FA000571C0E0005CAF63F7E23FE2ECACB3FFE23CAA13FFE2CC2D73F7AF64057C3A13F64 -:203FC0007EFE233E2EC23F3F0E01230C05CAF63F7E23FE23CACB3FD511F43FD5545DFE5EC3 -:203FE000C0BEC023BEC023BEC02378D604D8D1D1471423CAEBD17A2B1CE608C216401D78F2 -:20400000B7CA16407ED62DCA1140FEFEC216403E08C604825705E1F1CA7240C5D5CD021A5A -:20402000D1C1C5E5437881FE19D218147AF680CD2A31CD2347E12BCD051337CA4E4032A64C -:204040000AFE3BCA4B40FE2CC2C90CCD0513C1EBE1E5F5D57E902316005F7E23666F197839 -:20406000B7C2453FC36D40CDCC40CDD640E1F1C2083FDC2142E3CDAB48E1C3E917CDCC40DD -:20408000057E23CDD640C35F400E00C392400E013EF105CDCC40E1F1CA7240C5CD021ACDAD -:2040A0003B2AC1C5E52A040C410E0078F578B7C44F49CD26472A040CF1B7CA354096473E39 -:2040C000200405CA3540CDD640C3C240F57AB73E2BC4D640F1C9F5E5CD5446C26656E13AD3 -:2040E0008D07B7CA5C41F1F5FE08C2FC403A8C07D601DAF840328C07F1C33741FE09C210A4 -:20410000413E20CDD6403A8C07E607C20141F1C9F1F5D60DCA3341DA36413A8F073C3A8C7B -:2041200007CA2D41E5218F07BEE1CC4D41FEFFCA36413C328C07F1F5C5D5E54FCD0000E10A -:20414000D1C1F1C9AF328D073A8C07B7C83E0DCD37413E0ACD3741AF328C07C93A9307B76D -:20416000C25847F1C5F5FE08C27B413A650AB7CA8D413D32650A3E08C3AE41FE09C2904147 -:204180003E20CDD6403A650AE607C28041F1C1C9FE20DAAE413A9007473A650A04CAA541EE -:2041A00005B8CC2142FEFFCAAE413C32650AF1C1F5F1F5C5D5E54FCD0000E1D1C1F1C9CD5E -:2041C0005446CAF541CDC257D0C5D5E5CD4D53E1D1C13AF30BB7C230503A9E07B7CAE74177 -:2041E00021A012E5C33743E5C5D521450CCD2347D1C1AFE1C9C5D5E5CD0000E1D1C1E67F93 -:20420000FE0FC03A9307B7CC41442F329307B7CA4144AFC93A650AB7C8C321423600216176 -:20422000093E0DCDD6403E0ACDD640CD5446CA3342AFC93A8D07B7CA3F42AF328C07C9AF42 -:2042400032650A3A88073DC8F5AFCDD640F1C34642C5D5E5CD0000E1D1C1B7C8CDF541FEED -:2042600013CCF541328907FE03CC4344C30144CD0513E5CD9942C28342CD0000B7CA8C42F6 -:20428000CDF541F5CDB746F15FCDF84821440C22040C3E0332670AE1C93A8907B7C8F5AFE1 -:2042A000328907F1C9CDD640FE0AC03E0DCDD640CD2B423E0AC9CDEB42C5E3C1CDCD437EA0 -:2042C00002C80B2BC3BC42E52A760A060009093EC6956F3EFF9C67DADD4239E1D82A96077C -:2042E0002B2B22B10A110700C3E30CCDFF42D0C5D5E5CD6747E1D1C1CDFF42D0C3E542D5D9 -:20430000EB2A9B0ACDCD43EBD1C93AC4074721A407AF045E2356231205C21343CD0D54AFB0 -:20432000C02A9A07CD7D4432EC0B32AA0A32A90A7723772322C20A2A9A072B22A70A3AED5E -:204340000BB7C25843AF32C70B32C60B061A21CA0A36042305C2514311C837216938CDC359 -:2043600028214638AF7723772377AF32BB0A6F6722B90A22C00A2A760A3AF30BB7C28343AE -:20438000229B0AAFCDE6432AC20A22C40A22C60A3AED0BB7CC0D54C12A96072B2B22B10A08 -:2043A0002323F9217A0A22780ACD7225CD4441CDE917AF676F22E60A32B70B224E0B22BA10 -:2043C0000B22E40A32A50AE5C52AA70AC97C92C07D93C97EE3BEC2E34323E3237EFE3AD036 -:2043E000C30A13C3C90CEB2A9A07CAFB43EBCD2814E5CDF80E6069D1D2CC142B22C80AEB85 -:20440000C9C03CC30C44C0F5CC0D54F122AF0A217A0A22780A21F6FFC12A9807E5F57DA432 -:204420003CCA2D4422BE0A2AAF0A22C00AAF329307CD4441CD1442F1214A0CC2620DC3867A -:204440000D3E0FF5D603C24F44328D073293073E5ECDD640F1C640CDD640C321422AC00ADA -:204460007CB5111100CAE30CEB2ABE0AEBEB229807EBC9CD7520C03C328807C93EAF32FE03 -:204480000BC9CD8B39D5E521F60BCDC9282AC40AE3CD641DF5CDD3432CCD8B39F147CD64F6 -:2044A0001DB8C2E10CE3EBE52AC40ACDCD43C2C144D1E1E3D5CDC928E111F60BCDC928E16F -:2044C000C9C318143E0132A50ACD8B39C2C144E532A50A60690B0B0B0A0BB7FAD8440B0B04 -:2044E00019EB2AC60ACDCD431A021303C2E5440B606922C60AE17EFE2CC0CD0513C3C44405 -:20450000F1E1C97EFE41D8FE5B3FC9C33B43CA0B45FE2CCA2045CD14142BCD0513CA0B4537 -:20452000CDD3432CCA0B45EB2A9607EBFE2CCA3445CD79452BCD0513D5CA8545CDD3432C35 -:20454000CA8545CD79452BCD0513C2C90CE3E5214E00CDCD43D28245E1CD9745DA8245E5D8 -:204560002AC20A01140009CDCD43D28245EB22760AE1229607E1C30B45CDD1227AB3CA18C1 -:2045800014C9C3DD42E52A9607EB2A760A7B955F7A9C57E1C34D457D935F7C9A57C9F5F679 -:2045A000AF32BF0BF111000022BD0BC48B3922A70ACD500CC2CF0CF9D55E235623E52ABDAF -:2045C0000BCDCD43C2CF0CE1D1D57EF523D57E23B7FAF945CDA628E3E53ABF0BB7C2E745C8 -:2045E00021C00BCDA628AFC47C25E1CDC028E1CDB728E5CD0629C32F46232323234E2346A1 -:2046000023E35E2356E569603ABF0BB7C215462AC00BC32046CD312B3A670AFE04CADB0C92 -:20462000EBE1722B73E1D55E235623E3CD3329E1C190CDB728CA4146EB2298076960C39CDF -:2046400012F922B10A2AA70A7EFE2CC2A012CD0513CDA845E52A94077CB5E1C9CDA5487E1F -:20466000234E2346D1C5F5CDAC48F1575E234E2346E17BB2C87AD601D8AFBB3CD0151D0AE3 -:2046800003BE23CA72463FC35028CD6F36C39946CD7236C39946CD2931CDC746CDA8480150 -:2046A000FC48C57E23E5CD3C47E14E2346CDBC46E56FCD9B48D1C93E01CD3C4721980AE5DF -:2046C0007723732372E1C92B062250E50EFF237E0CB7CADD46BACADD46B8C2CE46FE22CC87 -:2046E0000513E578FE2CC2F5460C0DCAF5462B7EFE20CAEA46E1E323EB79CDBC4611980A72 -:204700003ED52A780A22040C3E0332670ACDC928119B0ACDCD4322780AE17EC0111000C3CC -:20472000E30C23CDC746CDA848CDB9281415C80ACDD640FE0DCC2B4203C32D47B70EF1F51B -:204740002AC60AEB2A9B0A2F4F06FF0923CDCD43DA5A47229B0A23EBF1C9F1110E00CAE352 -:204760000CBFF5013E47C52A760A229B0A210000E52AC60AE5217A0AEB2A780AEBCDCD43D4 -:20478000017847C21248214C0B22B80B2AC40A22B50B2AC20AEB2AB50BEBCDCD43CAB947A9 -:2047A0007E232323F5CD9A3CF1FE03C2B247CD1348AF5F160019C395472AB80B5E23567A8B -:2047C000B32AC40ACADB47EB22B80B23235E235623EB1922B50BEBC39547C1EB2AC60AEB31 -:2047E000CDCD43CA37487E23F52323CD9A3C4E234623F1E509FE03C2DA47229F0AE14E0677 -:2048000000090923EB2A9F0AEBCDCD43CADB47010448C5AFB6235E235623C8444D2A9B0A35 -:20482000CDCD436069D8E1E3CDCD43E3E56069D0C1F1F1E5D5C5C9D1E17CB5C82B462B4E78 -:20484000E52B6E26000950592B444D2A9B0ACDB942E171237060692BC36A47C5E52A040C7E -:20486000E3CD931BE3CD3B2A7EE52A040CE586110F00DAE30CCDB946D1CDAC48E3CDAB48D3 -:20488000E52A990AEBCD9348CD934821121AE3E5C3FD46E1E37E234E23466F2C2DC80A1248 -:2048A0000313C39C48CD3B2A2A040CEBCDC648EBC0D550591B4E2A9B0ACDCD43C2C44847B6 -:2048C00009229B0AE1C92A780A2B462B4E2BCDCD43C022780AC901D51DC5CDA548AF577E9D -:2048E000B7C901D51DC5CDDA48CA1814235E23561AC9CDB746CD78202A990A73C1C3FD4688 -:20490000CD0513CDD34328CD7520D5CDD3432CCD021ACDD34329E3E5CD641DCA2449CD78DA -:2049200020C32749CDE648D1CD3049CD78203E20F57BCDB94647F10405CAFC482A990A7780 -:204940002305C23F49C3FC48CDC149AFE34F3EE5E57EB8DA584978110E00C5CD3C47C1E11F -:20496000E52346236668060009444DCDBC466FCD9B48D1CDAC48C3FD46CDC149D1D51A90AB -:20498000C34C49EB7ECDC6490405CA1814C5CDE34AF1E3015049C53DBE0600D04F7E91BB9F -:2049A00047D843C9CDDA48CAD51D5F237E23666FE5194672E3C52BCD0513CDCA2EC1E170E4 -:2049C000C9EBCDD34329C1D1C543C9CD0513CDFE19CD641D3E01F5CAED49F1CD7820B7CA92 -:2049E0001814F5CDD3432CCD021ACD3B2ACDD3432CE52A040CE3CD021ACDD34329E5CDA50F -:204A000048EBC1E1F1C5015727C501D51DC5F5D5CDAB48D1F1473D4FBE3E00D01AB778C813 -:204A20007E23462366680600099147C5D5E34E235E2356E1E5D5C51ABEC2554A130DCA4C23 -:204A40004A2305C2374AD1D1C1D1AFC9E1D1D1C17894813CC9C1D1E12305C2344AC3494AEE -:204A6000CDD34328CD8B39CD3B2AE5D5EB235E23562AC60ACDCD43DA8D4A2A9A07CDCD4399 -:204A8000D28D4AE1E5CDA346E1E5CDC928E1E3CDD3432CCD7520B7CA1814F57ECDE34AD549 -:204AA000CDF719E5CDA548EBE1C1F147E3E5215727E379B7C87E90DA18143CB9DAC04A790D -:204AC000480D0600D5235E23666B0947D1EB4E237E23666FEB79B7C81A7713230DC805C2F8 -:204AE000D84AC91EFFFE29CAF14ACDD3432CCD7520CDD34329C9CD641DC2024BCDA848CD55 -:204B00006747EB2AC60AEB2A9B0AC3C21D3E3FCDD6403E20CDD640C3284BCDBF41FE01C241 -:204B20007A4B3600C3384B70AF328907AF32E60BCDBF41FE01C26F4BCD214221FFFFC30027 -:204B40003D3A9207B73E5C329207C2554B05CA274BCDD64004052BCA694B7ECDD640C31AB3 -:204B60004B052BCDD640C21A4BCDD640CD21422162090601F5AF329207F14FFE7FCA414B88 -:204B80003A9207B7CA904B3E5CCDD640AF32920779FE07CAFA4BFE03CC434437C8FE0DCA3A -:204BA0003B4CFE09CAFA4BFE0AC2B44B05CA284B04C3FA4BFE15CC4344CA284BFE08C2D204 -:204BC0004B05CA304BCDD6403E20CDD6403E08C3624BFE18C2DC4B3E23C3694BFE12C2F5C8 -:204BE0004BC5D5E53600CD2142216209CDDC20E1D1C1C31A4BFE20DA1A4B78B7C2184CE5FE -:204C00002A94077CB5E13E07CA1C4C216209CD2814EB229807C35F1179712304CDD640D608 -:204C20000AC21A4B32650A3E0DCDD640CDBF41B7CA2C4CFE0DCA1A4BC37A4B3AE60BB7CA40 -:204C40001C42AF77216109C9F53E0032E60BF1FE3BC032E60BC3051322A10ACDDD24CD05D1 -:204C600013EBCDC14C3333C26F4C09F922B10A2A9807E52AA10AE5D5C3A14CC2C90CEBCD5E -:204C8000C14CC2EB4CF922B10AEB2A9807EBEB22C40BEB23235E2356237E23666F2298075B -:204CA000EBCD021AE5CD8628E1CAB54C01B40041C533C3A0122AC40B229807E1C1C1C3A031 -:204CC00012210400397E23018200B9C2D54C01100009C3C54C01B400B9C0E57E23666FCD60 -:204CE000CD43E1010600C809C3C54C111E00C3E30C3E8032A50ACD8B39E5EBCD641DCDEE2D -:204D000028CDDB2222E60B0E20CDC742D121C0FF39F9EB0E202BCD051322A70ACA5F4DCD68 -:204D2000D34328C5D5CD8B39E373237223E3D1C17EFE2CC23D4D0DCD0513C3234DCDD3438B -:204D40002922A70A3E2191E13DCA5F4DD13DCA5F4DC13DCA5F4DC5E521020039444DE1E57E -:204D6000216A4DE3E52AE60BE3C92AB10AF92AA70AC3A012AF32ED0B32EE0B7E11C500BB8B -:204D8000C2874D32ED0B232BCD0513CD9452E521000022F40BE12BCD0513CA074ECDD34353 -:204DA0002CFE2CCAB84DCD021AE5CDDB2222F40BE12BCD0513CA074ECDD3432C11AA00BB80 -:204DC000CADB4DCDD34341CDD3434CCDD3434CCA4E4FCDD3432CBBC2C90CB7F532EE0BCDF3 -:204DE0000513CDD80EC5CD3524C1D1C5606922F10BCDF80ED2004E545D22EF0BE1CDCD4341 -:204E0000D21814F1C24E4F2A9807E52A9A072B237E23B6CACF4E235E2356EB229807EBCDE1 -:204E20000513B7CA0F4EFE3ACA1F4E11B800BBCA3C4ECD0513CDEC142BC31F4ECD0513CA79 -:204E4000224EE53E0132A50ACD893ACAA24E78F68047AFCD923B3E0032A50AC2684E7EFE02 -:204E600028C26E4EF1C3BE4E7EFE28CA1814E1CD893A7AB3C28F4E78F68047118A4ED511F1 -:204E80008C3AD53A670A57C3293A7AB3CA1814E5424B21B14EE50B0A0BB7FA974E0AF6807F -:204EA00002C932A50A7EFE28C26E4EE30B0BCD964EE12BCD0513CA224EFE28C2C84ECD057F -:204EC00013CDD34329CA224ECDD3432CC3424EE1229807EB2AC40AEB2AC20ACDCD43CA23E7 -:204EE0004FE54E23237EB7F5E67F7723CD9A3C060009F1C1FADB4EC5CD074F2AC40A19221F -:204F0000C40AEBE1C3DB4EEB2AC60ACDCD431A021303C20B4F79955F789C571B0B60692212 -:204F2000C60AC9EB2AC60AEBCDCD43CA4E4FE523237EB7F5E67F7723CD9A3C4E23462309EA -:204F4000F1C1FA284FC5CD074FEBE1C3284F2AC20AEB2AC40AEBCDCD43CA764F7E23232329 -:204F6000F5CD9A3CF1FE03C26E4FCDAE4FAF5F160019C3514FC1EB2AC60AEBCDCD43CAD8AE -:204F80004F7E2323F523CD9A3C4E234623F1E509FE03C2754F229D0AE14E0600090923EBE5 -:204FA0002A9D0AEBCDCD43CA764F019F4FC57E235E235623B7C8E52AC20ACDCD43E1D8E5A5 -:204FC0002A9A07CDCD43E1D0E52B2B2BE5CDA346E10603CDCD28E1C9CD67472AC60A444D1B -:204FE000EB2AC20AEB2AC40A7D936F7C9A6722B80B2A9B0A22E80BCDB94260692B229B0AA5 -:205000003AEE0BB7CA1B502AF10B444D2AEF0BCDA22222C40A22C60ACDAB0E3E0132F30B2E -:205020003AED0BB7C26D533AC407329F07C3B952AF32F30B32ED0B2AC20A444D2AB80B09D4 -:2050400022C40A2A9B0A23EB2AE80B229B0ACDCD431A021303C24E500B606922C60AEB2A55 -:20506000F40BEB2A9A072B7AB3CAA012CDF80ED2CC140B6069C3A012C3EC140E02CD0D51DB -:205080002BCD0513CADA50CD021AE5CD641DCACA50CD2931CDC7462A040C235E23561AFEBF -:2050A00020C2AA5013722B732B35CD2647E12BCD0513CADA50FE3BCABF50CDD3432C2BCD59 -:2050C00005133E2CCDD640C387503E22CDD640CD26473E22CDD640C3AD50E52A94077CB576 -:2050E000CA04517EFE03C20451CDC25C7D936F7C9A6711FEFF19D204513E20CDD6402B7CDE -:20510000B5C2F950E1CD2142C3E9170E01FE23C0C5CD2A51D1BBCA1E51FE03C2A00CCDD32A -:20512000432C5059EB229407EBC92BCD0513FE23CC0513CD021ACD78205F3AC407BBDAA6F9 -:205140000C1600E521A40719194E23460AB7E1C9CD3A51212900FE03C25E5121B20009EB4D -:20516000C93E02013E04013E08F5CDAC1FF1CDB9462A990ACDF728C3FC483E01013E030110 -:205180003E07F5CDA548F1BED218143C32670A237E23666FC3EE28CD641D018F1911202CC9 -:2051A000C2BB515AC3BB51CD0B51CD8B39CD3B2A01E917C5D5011215AF575FF5C5E5CDC2B6 -:2051C00057DAAC0CFE20C2CE511415C2BE51FE22C2E351477BFE2C78C2E3515058CDC257EF -:2051E000DA315221620906FF4F7AFE2279CA1C52FE0DE5CA5152E1FE0AC21C524F7BFE2CBD -:2052000079C48A52CDC257DA3152FE0DC21C527BFE20CA2B52FE2C3E0DCA2B52B7CA2B525D -:20522000BACA3152BBCA3152CD8A52CDC257D2E851E5FE22CA3C52FE20C26452CDC257DA12 -:205240006452FE20CA3C52FE2CCA6452FE0DC25C52CDC257DA6452FE0ACA64522A94070139 -:2052600028000934E136002161097BD620CA7852421600CDCB46E1C9CD641DF5CD0513F129 -:20528000F5DCD12EF1D4CA2EE1C9B7C8772305C0C1C365521601AFC3FE58F6AFF5CD945292 -:2052A0003AC407329F072BCD0513CABE52CDD3432CCDD34352C2C90CF1AF32C407F6F13296 -:2052C0009E07218000360022A407CD21433A9F0732C4072AA20722A4072294072A9807232E -:2052E0007CA53CC2E952229807CDC257DAA20DFEFEC2FA5232EC0BC3FE523CC27F532A9A4A -:2053000007EB2A9B0A01AAFF09CDCD43EBDA5653CD48577723D2015322C20A3AEC0BB7C408 -:20532000225DCDAB0E232322C20A21C4077E329F073600CD37433A9F0732C4073AF30BB7A9 -:20534000C230503A9E07B7CA870DC3A012CDE917CD0656C3C943CD2143C3DD42C1CD945256 -:205360002BCD0513CA6D53CD4D53C3C90CAF329E07CDC257DAA20D3CCAA00C3CCAA00C2A0B -:2053800094070128000934C3A20DE52A94077CB5114200C2E30CE1C3E5121602CD96522B28 -:2053A000CD0513CAB653CDD3432CFE50CAD15CCDD34341C38920CD9223CD655D3EFFCD68CE -:2053C00056EB2AC20AEB2A9A07CDCD43CA4D537E23D5CD6856D1C3C9530106563AC407C2C4 -:2053E000FC53E5C5F511EB53D5C5C9F1C13DF2E353E1C9C1E17EFE2CC0CD0513C57EFE23F9 -:20540000CC0513CD7520E3E511F353D5E9D5C5AFCDD953C1D1AFC9CD2A51CAA60CD603C2BE -:20542000A00CEB21A900097E23666F22E60B210000226F5D7CEB11B200EB0947EB7EFE2C72 -:20544000C0D5C5CD7220F5CDD34341CDD34353CD8B39CD3B2AF1C1E34FD5E52A6F5D0600E7 -:2054600009226F5DEB2AE60BCDCD43DAB80CE1D1EB7123732372E1C33954F637F5CD8B3997 -:20548000CD3B2AD5CDF719C1E3E5C5CDA54846E37E4FC5E5F5235E2356B7CAFC542A9A07F5 -:2054A000CDCD43D2D7542AC20ACDCD43DAD7545916002AC60A19EB2A9B0ACDCD43DA1055E2 -:2054C000F179CD3C47E1C1E3D5C5CDA548C1D1E3C5E523F5732372F1E1235E2356C1E12369 -:2054E0007E23666F79B8D2EA5447904FF1D406550405CA01557E122313C3F154C1C1C1C1B4 -:20550000C1DC0655E1C93E200C0DC81213C30955F1E1C1E3EBC22155C578CDB946CDFD46B2 -:20552000C1E3C5E5C3C154CD0513CDD34324CDD34328CD7520D57EFE2CC24B55CD0513CD5B -:205540002A51FE02CAA00CCD2251AFF5CDD34329F1E3F57DB7CA1814E5CDB946EBC1F1F534 -:20556000CA8555CD9942C26C55CDF541FE03CA7E5577230DC25E55F1CDE917C3FD462AB100 -:205580000AF9C31944CDC257DAAC0CC37155CD3651CAA60CFE02CAA00C212700097EB7CA51 -:2055A000C3550AFE03CAC355237EB7C2B855C56069CD7D57C1C399553E80964F0600092349 -:2055C0007ED61AD6019FC37F2850591321270009C5AF77CDB1573A2108CD9E5AFEFFCABB06 -:2055E0000C3DCA9D0C3DC2F555D1AF120E1013CD0500C39A0C3CCABB0CC1212500095E234A -:205600005613722B73C9CD3951CA3656C50A505913D5FE02C22C56212356E5E560693E1A72 -:20562000C37956212700097EB7C4CC55D1CDB1570E10CD0500C11629AF020315C23956C9F4 -:20564000CD3651CAA60CFE03212600C2515621AE00097E2B6EC3D71DCD3651CAA60C211022 -:2056600000097EC3D51DE1F1E5F52A94077EFE01CA0045FE03CA655CF1D5C5444DF511271C -:2056800000197EFE80E5CCC955E1344E060023F1F556FE0D70CA9D56C6E07A887709F1C14C -:2056A000D177E1C91B2B732372233680233680E1E3444DE53A1F08B7CAC8562122000973FF -:2056C0002372233600C30D57210D00097B177A1756BACA0557D5F5E5C51180000E1ACD0526 -:2056E00000D1D5130E10CD0500D1E1F177D5130E0FD5CD0500D13CC203570E16CD05003CE0 -:20570000CABB0CC1D1212100097BE67F77E13AA007B7C21A57CD7D57E1C9212100097EFE06 -:205720007FF511800021290009D5E5CC3B57CDC955D1E1F1CC3B57E1C3E917C506807E237D -:20574000121305C23E57C1C9C5E52A94077EFE03CA965C012800097EB7CA68572B7E2335A3 -:20576000964F097EB7E1C1C92B7EB7CA7457CD7A57C24A5737E1C13E1AC92A9407D5545D60 -:2057800013012500094E2346032B7123702323E50E802336000DC29257CDB1573A2008CD10 -:2057A0009E5AB73E00C2AA573E80E1772B77B7D1C9C5D5E521280019EB0E1ACD0500E1D1B8 -:2057C000C1C9CD4857D8FE1A373FC0C5E52A940701270009360023360037E1C1C9CD021AF3 -:2057E000E5CDA5487EB7CAB20CF5235E23666B5FFE02DA00584E237E1DFE3ACA04582B1CA1 -:205800002B1C0E401DCA625879E6DFD640DA6258FE1BD2625801FE070203160B231DFA520D -:20582000587EFE2EC23058CD3E58F137F5C31C5802032315C21D58AF320A08F1E1C97AFEEB -:205840000BCA6258FE03DA6258C83E20020315C33E581415CA37583E20020315C25758C35D -:205860003758C3B20CCDDD57E51180000E1ACD050011FE070E0FCD05003CCAA30C21EE07D7 -:2058800011FE07060C1A77231305C28558E1CDD34341CDD34353CDDD57E53AFE0721EE07FF -:2058A000BEC2181411FE070E0FCD05003CC2BE0C0E1711EE07CD0500E1C901E917C5CD0233 -:2058C0001AE5CDA5487EB7CAA00C234E23460AE6DF1602FE4FCAE6581601FE49CAE65816D2 -:2058E00003FE52C2A00CE1CDD3432CD5FE23CC0513CD7520CDD3432C7BB7CAA60CD15FD5F9 -:20590000CD3951C2AF0CD1C5D5CDDD57D1C1C5F57ACDCD5AF122A70ADA31597BB7C23159E7 -:205920002107087EFE20C231593642233641233653E17AF5229407E52311FE070E0C1A77BB -:2059400013230DC23E59AF771114001977D1D513CDB157E1F1F5E5FE02C26F59D50E13CD49 -:205960000500D10E16CD05003CCABB0CC385590E0FCD05003CC28559D1F1F5D5FE03C2A330 -:205980000C13C36359D1F112D521250019AF77237723772377E17EFE03CAA859FE01C2C9B8 -:2059A00043CD7A572AA70AC9012900090E8070230DC2AE59C3C943C0CD0D54C30000C0E513 -:2059C000CD0D540E19CD0500F50E0DCD0500F15F0E0ECD0500E1C9CDDD57E51180000E1A37 -:2059E000CD050011FE07D50E0FCD05003CD1D5F50E10CAF859CD0500F1D1CAA30C0E13CDF0 -:205A00000500E1C9C2145AE521FE073600230E0BCD965AE1C4DD57AF320A08E521FF070E87 -:205A200008CD925A2107080E03CD925A1180000E1ACD050011FE070E11CD0500FEFFCAA3AF -:205A40000CE60387878787874F0600218100090E0B7E23CDD64079FE04C2675A7EFE20CAAD -:205A6000645A3E2ECDD6400DC2515A3A650AC60D573A9007BADA805A3E20CDD640CDD64069 -:205A8000DC214211FE070E12CD0500FEFFC2415AE1C97EFE2AC0363F230DC2965AC9D54F11 -:205AA000C5CD0500C1D1F52121001934C2B65A2334C2B65A233479FE22C2CB5AF1B7C8FEF9 -:205AC00005CABB0CFE033E01C83CC9F1C9FE03C02BCD0513D5118000CAE05AC5CD1114C1B6 -:205AE000E52AEA0BCDCD43DA181421A90009732372AF1E0723771DC2F45AE1D1C9F6AF32F7 -:205B0000755DCD2A51FE03C2A00CC5E521AD00095E235613E37EFE2CCC11142BCD0513C243 -:205B2000C90CE37AB3CAB50C2B7323721BE1C1E5C521B00009AF77237721A900097E2366E7 -:205B40006FEBD5E5218000CDCD43E1C2545B110000C3925B424B3E10EB210000E529E3D2F6 -:205B6000675B2923C3685B29E3EB29EBD2765B09E3D2755B23E33DC25D5B7DE67F5F160041 -:205B8000C17D6C6129DA181417D28D5B2378B7C21814226F5DE1C1E521B2000922715D2158 -:205BA0002900091922735DE1E52180007D936F7C9A67D1D5CDCD43DABC5B626B3A755DB741 -:205BC000CA025C118000CDCD43D2D15BE5CD205CE1C5444DEB2A735DEB2A715DCD585C2261 -:205BE000715D5059C1CD1F5C2A6F5D23226F5DE17D936F7C9A677CB5110000E5C29F5BE17D -:205C0000E1C9E5CD205CE1C5444DEB2A715DEB2A735DCD585CEB22715D5059C1C3E85BF6EB -:205C2000AF32A007C5D5E5EB2A6F5DEB21AB0009E57E23666F13CDCD43E1732372C2475C23 -:205C40003AA007B7CA545C21545CE5C5E521260009C3A456E1D1C1C9C57E1223130B78B1CA -:205C6000C2595CC1C9F1D5C5F5444DCDC45CCA935CCDB95C21B1000919F177F521280009E7 -:205C8000563600FE0DCA8E5CC6E07ACE0077F1C1D1E1C9C3B80CD5CDC25CCA935CCDB95C45 -:205CA00021B10009197EB7D1E1C1C921A900C3B45C21B000095E2356C91321B000097323E5 -:205CC00072C9444DCDB15CD5CDAB5CEBD1CDCD43C9CD051322A70ACD9223CDE85C3EFECDBF -:205CE000BE53CD225DC3C943010B0D2A9A07EB2AC20ACDCD43C82158397D816F7CCE00673E -:205D00001A90AEF52107397D806F7CCE0067F1AE8112130DC2195D0E0B05C2EF5C060DC32D -:205D2000EF5C010B0D2A9A07EB2AC20ACDCD43C82107397D806F7CCE00671A91AEF5215869 -:205D4000397D816F7CCE0067F1AE8012130DC2535D0E0B05C2295D060DC3295DE52A9807B9 -:205D60007CA5E13CC0F53AEC0BB7C21814F1C900000000000000CD0A432A9A072B36002A30 -:205D80009F0A7EB7C29A52C3870DFEE0DA9C5DFEE8D29C5DD6E011B15DC3A95DD681DA18D7 -:205DA00015FE4CD2E21F110701074F0600EBC3FF12C15DEF5D385E095E125E2C5EDC5D598A -:205DC0005ECD645ECD8B5E1B36301B36007AF630CDB241EB21000022075EEBC9CD8B5E1BD6 -:205DE0003000E52A075EEBCD6E5EEBE1C39C16CD5A5ECD8B5E1B38007BE6075F7AE60787F7 -:205E00008787B3CDB241C90000CD5A5EEB22075EEBC9CD5A5ECD8B5E1B3200E52A075EEBA6 -:205E200022075ECD6E5EEBCD6E5EE1C9CD5A5ECD8B5E1B3100C31B5ECD645ECD8B5E1B34BD -:205E4000007AE607C630CDB241C9F5CD8B5E1B36311B380100F1C38920C9CD7520326D5E56 -:205E6000CDD3432CCD7520573A6D5E5FC9007BCD735E7AF50F0F0F0FCD7C5EF1CD825EC361 -:205E8000B241E60FC69027CE4027C9E37EB7CA985ECDB24123C38C5E23E3C919022A022BF6 -:205EA0000271029A02BF02D502ED02F2020E030F0314034803610374038A03A203A303E539 -:205EC000031E04390442044C046404680469040000213F61F9AF32EC0B229607F9212208F4 -:205EE000363ACD974332650A22B10A2A0100010400095E2356EB227A4222554222A212EBBA -:205F000023235E2356EB22F941EB23235E2356EB22B841EB23235E2356EB223D410E0CCD95 -:205F20000500321F08B7211415CA2F5F21212222200821FEFF229807AF32930732640A32D0 -:205F4000F30B32ED0B328A07210000228C0721800022EA0B217A0A22780A21E40A224C0BF7 -:205F60002A060022760A3E0332C407211960229F0A3A1A60B7C21B603C321A602180007EFD -:205F8000B7229F0ACA1B6046237E2B77232305C2895F2B3600229F0A217F00CD0513B7CA8A -:205FA0001B60FE2FCABD5F2B3622229F0A23FE2FCABD5FCD0513B7C2AE5FC31B603600CD23 -:205FC0000513CD5A1CFE53CA0760FE4DF5CAD55FFE46C2C90CCD0513CDD3433ACD641CF18B -:205FE000CAF45F7AB7C218147BFE10D2181432C407C3F95FEB22760AEB2BCD0513CA1B60F9 -:20600000CDD3432FC3C25FCD0513CDD3433ACD641CEB22EA0BEBC3F95F00002B2A760A2B33 -:2060200022760A2BE53AC40721CF5E22A20711A40732C4073C01A900EB73237223EB09E502 -:206040002AEA0B01B20009444DE13DC2386023229A0722B10AD17B956F7A9C67DADD4206CD -:2060600003B77C1F677D1F6F05C261607CFE02DA75602100027B956F7A9C67DADD422276F6 -:206080000AEB229607229B0AF922B10A2A9A07EBCDEB427D936F7C9A672B2BE521DF60CD9B -:2060A0002347E1CD1A3121D360CD234721234722980DCD2142217F0CC3765D0D0A0A4F7747 -:2060C0006E6564206279204D6963726F736F66740D0A002042797465732066726565000DAB -:2060E0000A42415349432D383020522E352F3234300D0A00007AFDFD1210EDED1212FDFD60 -:00000001FF diff --git a/hex/pw.hex b/hex/pw.hex deleted file mode 100644 index a74646e..0000000 --- a/hex/pw.hex +++ /dev/null @@ -1,514 +0,0 @@ -:020000040000FA -:20010000C3C7021A02100B3D2E7E3D1B01FFFF20A9B9000000000000FF0001E5FF7F010AEC -:20012000002A010054212E01467E0F77BE70C23801237CBAC22801C91E3F0E02C30500FF3C -:20014000C9FFFFFFFFFFFFFFC32404FFFFFFFFFFC32904FFFFFFFFFFC3D304FFFFFFFFFF77 -:20016000000F0200010000FF4800018100FFFF00001B290000000000001B2800000000001F -:200180003EC606962E00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB -:2001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F -:2001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4420434F50592052204520542054582059 -:2001E00054482054412052554E20455849542053495A4520434845434B2053544154205595 -:20020000205855205445535420534554205344205353205352205357205245434C41494D7C -:20022000204449534B2047524F5550204C4F47205245534554204453205350454544205366 -:20024000415645204C4F41442052454144205752495445205245414447522057524954451B -:200260004752204455204455582044554820445541204D4F56452046494C4C20434D20535F -:200280004541524348204A5020455820474F20555231205552322055523320555234205375 -:2002A0004F52542050415353203F2000000000000000000000000000000000000000000073 -:2002C0001B36311B38302411C0020E09CD0500C31003000000000000000000000000000063 -:2002E0000000000000000000000000000000000001505720202000000000000000000000F6 -:20030000C3C537C32038C3EF38C303368A3B8A3B21000039221001318A3B2A06002E00E5CD -:200320003A6D01B7CA31035F3CC22E031E087C93672218133A1501B7CA3E033219133A1728 -:2003400001B7CA5F033200004F3EFF914F3E389116005F3EC312212904137D12137C12AF4C -:2003600032E004676F22A82C0E0CCD05007D3267047CB532BD0DF532971032AA0ECA8A0359 -:200380001EFFCD0133F68032AA0E2A01001103001922CC3719222438191919191922B63244 -:2003A0001922E7301922373219224527191922B8331922C933F11919222D27E1C2D20332E7 -:2003C0006701E5110F0019222D27E1111A00192228272A0E0323EB21800046783277052312 -:2003E0003A5D00FE20C4BC37EB36202336003A5C00B7CCBD35CD300E325C003275253A6AE3 -:2004000001321D36B7FA2904B7C20F043A5C0032D03ACDC63111D03ACD1033CD9F31321D3F -:2004200036C329043EFF325C30318A3B3EFF3257393A5C306FCD4E303A7705B7C2D3043AE6 -:200440001E01B7FAD304A5C2D304CD68380D0D09504F57455220332E3033206F6E20435006 -:200460002F4DA0CD680C3E221F1F1F1FE63FC630CDEF383E2ECDEF383A6704E63FCDB42F5A -:20048000CD683820312F320D0D2020436F707972696768742028632920313938312C2031E6 -:2004A00039383220627920504156454C204252454445520D09416C6C207269676874732032 -:2004C00072657365727665642E2030312F30332F38338D318A3BCD610C3A0D013248343EF0 -:2004E00000B7CAEF04325C003A16013DCC4E303A16013DC2FA042F325C30CDB70DCA140573 -:200500003A8708B73A9710C4FE321EFFCD0133F6803297103A77053CCAA21F215D00060B0D -:20052000363F2305C220052A0E0322771E3EFF3267083C32C51D32370B32F910328215326D -:200540005109328708328508329F0832750E32E00432B70E32A61632681E32C52F32D01A3E -:2005600032E41E32D00F327C0032131C32141C3A5C003275254F3E00B7CA84053EFF3277E6 -:2005800005C3D005CD6338AF320A3932203979CD8035CDB70DCAC7053AAA0EE67F4F3A970E -:2005A00010E67F47B7C2B405B9C2B4053A1C01B7CAC70578C5CD972FC179B8CAC705F5CD5B -:2005C0006838ADF1CD972F3A0701CDEF38CD03362A0E0323E5CD860CE1CDA80DCD782FCACB -:2005E0000106FE5BCA0106237ECD2A0E2BC208067ECD51303A5C0032752523CD782FC2089A -:2006000006AF327705C3D304E5060011D001AF322E067ECD1638EBBECA24064F7EE67FCDC6 -:200620001638B979EBC29806FE20C28B063E00B7CAB1063E00B7C2B106CD6838090770614C -:200640007373776F726420726571756972656400AF323406CD792FE5118001CD7006CD68F8 -:200660003809076261642070617373776F7264001AB7CA81060F0F0FEE97BEC01323C370BD -:20068000067EFE20C0323406C3D3041A07D29306322E062313C312061AB7CADD0D13FE2039 -:2006A000C29806EBCD792FEBCADD0D04E1E5C30E06783C32EF14E5FE09C27507E52A1813ED -:2006C000222D1325257522EA06233620E1CD792FCA7507237ECD2A0ECC782FCA7507FE2055 -:2006E000C2D306CD792FCA750711000013010000137E12B7CA6E07CD2A0EC20107CD782FA3 -:200700002B23130CC3F1064E2346EBC5C9347622191B230D74250E13220F19221B5A201C7B -:200720000438207C291F7C2917B23910B81516A7260A8A1F2BEC1F2C17201ABC0D2ED31FE3 -:200740002FD91F30DF1F31E51F215029225029255D2D264D2D24552D23452D274F2C280383 -:200760002F29C42E2A682D32DB0A335006FF2AEA0671092370E1D1CD792FCADD07FE3DC2D8 -:200780008E073A5C0032B70ECD782FCADD07237E2BCD2A0EC2DD073AE004B7C2A4073A5CC6 -:2007A0000032E0047ECD300E325C003AEF14FE1ACABC0DCD4E3023CD782FCADD07FE3DC297 -:2007C000DD07CD782F3A5C0032B70ECAD707237E2BCD2A0ECA8E073AE004325C00EB210D97 -:2007E000073AEF14BE7E23CA070723233CC2E107EBCDB70DC204083AEF14FE12DA0408FED7 -:2008000016DADD0DCD792FC4F321015C00C5C4AC2122362FE1060B237EFE3FCA220805C2EC -:200820001708326B0E3AEF14FE1ECA472BFE1DCAAD2BFE2DCA362CF5CD6338F1FE09CA50D6 -:2008400008FE01CA5B08AF328708328508C3E008216500364323364F23364DCD8408CAE03A -:20086000087BB7CA97083EFF3C3267085F3A6101BB7BD28A083EFF3267083A8508B7CAD32D -:2008800004C35B083E001E00B3C932370BCDFE323A6708B7C2E0083A8508B7CAE0083E006D -:2008A0005F3C329F08325C003A4834B7CAB6083A6001B7C2DC08D50E18CD0500D10110009A -:2008C0000DFAD30422D108CD702F7804BBC2C008210000CD702FD29E08C3E008BBCAD30406 -:2008E0002A0E0322771E21000022F40F22B709CD4E303E00B7C23F31115C001A32063BCDA5 -:200900007B31CD3030545D21090019463AEF14234EFE14CA3C09FE15C2220978EEFF47C386 -:200920003C0941FE12CA1B09FE13CA3C09FE09CA50093A6B0EFE3FC25009AF47DA9F093A2C -:200940006501B7FA4B097917DA9F097817DA9F093E00B7CA7309F5D511F6FF19E60F5F167B -:200960000019D1F17EFA6F0917DA9F09C3730917D29F092A771E060B133600233600231A94 -:2009800077231305C27F0922771EEB2AB7092322B709291924EB2A1813CD2C2BDA5E2F2A6F -:2009A000771E36FF2336FFCDA731C202092A0E03237E3CCA82312128002322D8092A0E0364 -:2009C000EB2A771E222F0A226A0A2323010D0073237223EB09EBE52100002B22D8097DB4B9 -:2009E000E1C2CF092AB7092322560A2B7DB4CAF00A3A0401B7CAF00ACD702FB4CAF00A7DB2 -:200A0000F6016F22460A2322590AEB2A460A7B956F7A9C6722430AEB2A460A19222C0A3E72 -:200A20000DCD690AF2550A2A430AEB21290001923D2909EB29094E1AEB711223134E1AEBEE -:200A400071121128002101007B956F7A9C67FA550AB5C2140A112900212900237B957A9C01 -:200A6000F2070A2A460AC3F80901923D2909EB2909EB4E2346EB5E2356EB5F0AFEFFC8E5B4 -:200A8000D5110B00197ED1E1173E00CE00573A0401FE01CACB0AFE03CAB60AFE05D2CB0A90 -:200AA000E5210B00097EE1173E00CE0092C03A0401FE02CACB0AE5C5160A7B925F230315F9 -:200AC000C2BD0ACDCB0AC1E1C01E0A7EE67F570AE67FBA0323C01DC2CB0AC9CD792FFE30F8 -:200AE000DABA3AFE3AD2BA3AD630320401C3D3042A560A29EB2A771E1922771ECD8408CA03 -:200B0000050BCD63383AEF14FE01CA150B3A6B0EFE3FC2360E3A5C00CD80353A8708B7C2E7 -:200B2000360B3A9710E67FC2380B3AAA0EE67FC2360B3A1C01B73E00F5C4972FCD7E35F193 -:200B4000CA480BFE0ADCED383AEF14FE013A6401C2580BB7F2580B3CE67F32C52F2AF40F6F -:200B6000EB2AB709CD2C2BDA3C0E2AF40F29EB2A2F0A2323195E2356EBE52AF40F2322F448 -:200B80000FE13AEF14FE01C29E0B3A0E01B7CAAD0BFA9E0BCD6838202020A0C3AD0BE52AA2 -:200BA000F40F0E30CDED2FE13E3DCDEF38E5110A00197E32D60B233A7001B77E32E80BE108 -:200BC000CAC70BB7FC680CB73E28FCEF38F4ED382323CD180C3E43B73E2AFCEF38FAF20B08 -:200BE0003A7001B7C2E90B3E4FB73E29FCEF38F4ED38CD610CE5D52AB709EB2AF40FCD2C07 -:200C00002BD1E1D23C0E3AC52F3D32C52FCA020B3E7CCDEF38C35D0BE5D1E5C13A6B01E6B2 -:200C20000FCA390CE5D55F1600197E17DA370C2B7E173FD2370CAFD1E1F53E08CD510CF1D1 -:200C40003E2ECA4C0C3E3ED24C0C3E3CCDEF383E03F57E1202CDEF38231303F13DC2510CB0 -:200C6000C9E5217801C36C0CE5217001C5462305FA820CE5D5C55E0E02CD0500C1D1E1C3CA -:200C80006E0CC1E1AFC95E1C237E1DC8FE5BC2880CCD782FC8FE5DC801910CC5CD1638FE36 -:200CA0002BCAD00CFE2DCAC90CFE22CA400DFE31DAFF0CFE3AD2FF0CE60F473A6401B7782F -:200CC000F2C50CF680326401C9CDD80C325109C9CDD80CC680C3CC0C237ECD16380E09FE12 -:200CE00052CAFD0C0CFE53CAFD0C0CFE58CAFD0CFE31DABA3AFE39D2BA3AE60FC979C9E58B -:200D0000FE56CA9A0DFE52CA620DFE53CA5C0DFE54CA680DFE50CA560DFE55CA6E0DFE5807 -:200D2000CA7A0DFE4DCA850DFE51CA940DFE24CA8E0DE1FE41D8FE45D0E60F3D326201C9DF -:200D4000237EFE22C8B72BC823FE0EF5CC6338F1C4EF38C3400D210501C3A30D216501C305 -:200D6000A30D216301C3A30D216601C3A30DCDB70DCAA60D218708C3A50D3285083A5C0048 -:200D800032E004E1C9216B017EC680C3A50D21F002C39D0D21F910C3A50D216701CDB70D94 -:200DA000CAA50D7E2F77E1C93A0501B7C83C3220393E20320A39C93ABD0DB7C93E22FE16CF -:200DC000DADD0D3A5C00CD300E210100CDD30DC3D304293DC2D20DEB0E25C30500AF327700 -:200DE00005CD68380907696E636F72726563742C20666F72206C697374206F6620636F6DE5 -:200E00006D616E647320656E7465723AA0AF21D00123BEC2110E2B2B7EFE20C2170E237ECA -:200E2000B7CAD304CDEF38C31E0EFE3AC8FE3BC9E60FC03E10C921010022F40F3AEF14FE27 -:200E400001C24D0ECD8408CAD304C35B082A771E2322771EE52AF40F2B7DB4E1C2710E2308 -:200E6000360123363123362023773E4DFE3FC29F0ECDA80D3E50FE2AC2900E2A771E2336B7 -:200E80000223363123362D233620233600C39F0ECD68380D73656C6563743FA0CD03362AF5 -:200EA000771E237E2BB7CAD3043E8032681E3AEF14FE02C2480F3E00B7C2DC0ECD68380D92 -:200EC0000D64657374696E6174696F6E20647269766520BACD1038FE0DCAD304CD300E3251 -:200EE0002A3B5F215C005673D5CD4E30D13AF308B7C23F31727ABBC2660F3AF910B7C266D9 -:200F00000F3A97105F3A681EBBC22A0FCD68380302636F707920746F2073616D6520647220 -:200F20006976E5AF32B70EC3AE0ECD68380D2843296F7079206F7220284D296F7665BACDD2 -:200F4000103832C51DC3660FF5AF322A3B32F910F1FE04C2660FCD68380D0745524153C5EC -:200F6000CD1B1CC2D304CD6338CDA80D3AEF14FE02C2770F320A393A2A3BB7C2810F3A0608 -:200F80003BF5CD9E322A771E2323229D0FAF6F67320210220F10225610224A1021EA3DCD8E -:200FA000792F229D0FCA7C10110000EB1AD630A7FAE20FFE0A3FDACF0F1329E52929C1097B -:200FC0004F060009C3AC0F3EFF32D00FC3A80F3EFF3CC8EB237EB7CA7C10FE20C2D40FC30D -:200FE0009F0F3AD00F3CC83A681EB7FAEF0FC0EB1BE5D5212800CD2C2BD1E1229D0FDAD49C -:201000000F3E2DFE2DC21210EB23225610EB11270013CD792F7E320210FE2DC22F10CD78D3 -:201020002F229D0FC22F10E52AF40F225610E1EB220F10EB136B6229EB2A2F0A195E2356D9 -:20104000EB237E2BB6C25510E521270023224A10EBE17323722100007DB4CA9C0FEB2A0F71 -:201060001023220F10E5CD2C2BE15D54DA34102B220F10210000225610C39C0F3A681EB749 -:20108000FA8410C021000022291A2C22F40F2A2F0A232322771E3E80B7C4FE322A0E03CD5A -:2010A0006338010D00C3A91009237E563CCAD3042B5EE52AF40FE5CD2C2B7CB5D1E1C2A83D -:2010C0001023772B77E5EB2322F40FE13A2A3BB7CADC10CD8035CD6838183ABD3A5C00CD5E -:2010E0007B3511073B012B3B2323CD1C0C2E18AF021203132DC2F0103E00B7CA7611212BAB -:201100003B060B363F2305C20311CD6838096E6577206E616D65BACD03362A771E23CD78A8 -:201120002FCA4311CDF321C23D11CD68380720426164206E616D650D0989C30A11012A3B32 -:20114000CDAC21CD68380D20202020A011073B212B3B060B7EFE3FC25B111ACDEF384F1A10 -:20116000B779F26711F68077132378FE043E2ECCEF3805C2541121333B11F43A0603CDBC4D -:20118000373AEF14FE03CA93113A6301B7C41B1CC2961011063B3AEF14FE18CA7419FE0BAF -:2011A000C4D6313A2A3BB7C2AD1C676F32C52F227B1F21F000223C1ECDC63111063B210FF8 -:2011C0003B3AEF144FFE04CA441AFE0CCA6513FE0BCA601BFE03CA791AFE11CA7E1CFE14A1 -:2011E000CA9B1CFE15CAA11C23FE13CA9B1CFE12CAA11CFE09C25713D5CD6338CD601BD1FF -:20120000CD10332A273BEB2AEA0624D5E5EB21FF123A7525324813065FCDBC37E1E52E16A2 -:20122000360023742E2B362523742E3E36382374E1D1E5D525250E80CD401CD1CD2C2BDAE9 -:201240005E2FAF32D01AE1257EB7C4782FCA6212237E2BCD2A0EC262127ECD300E326A1214 -:2012600023233AEB063C470E803E0002CDAC21AF1E0502031DC27212CD782F0B237E2BCAC3 -:201280008F12CD2A0EC28F127ECD300E022323CDAC21AF1E0502031DC2951221063B115CAE -:2012A00000CDBA373AF002B7FAE412C2B1123A752521D03A77112A3BD5CDBA37D1CD1033B8 -:2012C000CD9F31C2E412CDAF3121F002545D06FF237E04B7C2D0127832F002CDC931CD858E -:2012E00035CDF131115C00CDD6312AEA062424F9210000E52AEA0624110001CDB01FE9D57E -:201300000E1ACD0500115C000E14CD0500D121800019EBB7CAFF122100B22E0025257E1190 -:201320008000124723137E1205F224132100002E8025115C0006247E12231305C23713116D -:2013400080000E1ACD05001E001D0E0ECD0500C300013AFD3AB7C9CD68380D8D2A3C1E7D2D -:20136000E60F322F153AEF14B7F27113E67FC30F1411063BCD1132B7C2F6193AEF14FE0523 -:20138000CA0414FE0CCA04143A0C01B7CA04143A263B3D6F26003AFA3A3C4FCD401C7B3263 -:2013A000D1323AFB3A4F3A123BA14F4521163BCABC133E10B71F0DC2B413804705FACB1347 -:2013C00023CD5213CABC1323C3BC137E5E320A34CD521357CAD91323567A320B34CDC632B6 -:2013E000CD0827CD68380D0D8DCDF628CDED3821063B7ECD7B3523CD180CCDED387ECDB49E -:201400002FCD63382180003AEF14FE0CCA8815F5FE06CA1C14FE07CA1C14FE08CC8914F194 -:20142000FE06CAC214FE07CAC214FE08CA3C14FE05CA3A153E0632EF14C30F147ECDA021BC -:20144000DABA14CD5015CD63143AEF14E67FFE06C23C147DE60FCABF143A18013DCCED3826 -:20146000C33C143AEF14E67FFE06C83A18013DCA8514CDED383AEF14E67FFE07C285147D87 -:20148000E603CCED387DE60FC0CD63383AEF14B7F2991422A82CC3A614E52A3C1ED5111073 -:2014A0000019D1223C1ECDBA2FAF32C52FCD7E35CDED383AEF14B7F8E1C93E2EC34314CDE0 -:2014C00089147EE5CDB42FE13AEF14E67FFE06CADB14CD5315CD6314C3C2143A18013DCAB0 -:2014E000ED143CCCED387D3CE603CCED38233E1DB7F210151B7AB3C21015D57DE60FCA1689 -:20150000157DEE10E60F2FE60F3C5F19D1C316157DE60FC2C2143A18013DC22615CD6838AB -:201520000D2D2D2D2DBACDED38D511F0FF191E00AF57322F1519D1C33C147EFE1ACA4615FE -:20154000CD5015C33A153AEF14B7F29610C3D304CDEF38233AEF14B7F26E15E52A7B1F2BCD -:20156000227B1F7CB5EBE1C022A82CC3D3043A8215B7C27D153A0601FE0DCAEC197DB7C077 -:20158000E13E00B7C0C365137E32C52FE52A7B1F7CE680F5293AC52F856FF1CAA6157CEE2B -:2015A000A0677DEE976F227B1FE13AEF14B7C8CDC537CD5315C38815CD792FCD16383258E2 -:2015C00016CD4E30CD68380305636865636B73756D202620746573748D3E8032E41E3D32CE -:2015E000A616CDBF26EB36FF2322B316115C00060B3A0A01131205C2F4150615AF320A3958 -:20160000131205C20016115C00CD9F31CA2F16CD30303AD60BB7F229163A6500E67F3265E4 -:2016200000115C000E1ECD0633115C00CDC131CDB70DCA40163A0A01EE803265003266004C -:20164000AF326800CDBF26AF32EF14676F227B1F223C1E3C32A6163E00FE53C26516220085 -:201660002723220627CD122BDAA516CDFF263EFF32C52F3A0C01B7CA93163E2AF4EF38F2F7 -:201680009316CDF6283E0DCDEF383A5139B73E0AFCEF38CDB033CDC537218000CD8815CD40 -:2016A000C728D265163E00B7F26F17AF32A61632161721000022F816CD52133E08C2C11623 -:2016C00087321C172AF8167E23B6CA6F171120002A0E037EFEE5CAE1163CCA973519C3D330 -:2016E00016EBD5AF1213215D00061FCDBC37D121100019222817EB2100004E23CD5213CAE8 -:201700000517462378B1CA4317CD5213791213CA15177812133E003C321617FE00C2FA16EB -:2017200022F8163AFB3A4F2100002B2B2B2B3A680081773C3268002323233680AF32161751 -:20174000C3C4163A16174F3AFA3A3C470DCA541780C34C17FE81DA5B17E67F2A28172B7722 -:201760002B2B2B3A6800DA6E174F3AFB3A89772A3C1E7DB4CA9917AF32E41ECD68380D732A -:201780006176E5CD1B1CC299173E0132E41ECDBF263EFF325C30CD4E30CD68380D0D051808 -:2017A000071018000800009E1F8100C0200180008830808183C100022008F2200787E01993 -:2017C0001C139F1903001800089F9F9E1E2000808013C0002180C6200787E0E0F21FF1E754 -:2017E00081E1FC302000863CF0381FC0818020008781E1FC200086200086200086200787CC -:201800009F071C089F0307109F191C139F190300180008002000E02180C62007879F31049A -:2018200003109F04089F0810039F03009F0804089F919F09802000200787E0E008070000E6 -:201840009F191C139FF20820C0C2380CC6200787E0E000081009E4F3E49F10070260810079 -:20186000C10000102001C782200CC7FCCFFFE4008008C181C3C0881CC7202009C82073C769 -:20188000983107800C2001C7C1C8043844C62009C82020C7C0062020C62009C8201FC7C8B2 -:2018A00081FF80881CC63904C7982009C8200CC798108100C1CCCFFFC4001C3808C7810052 -:2018C000C1CC9FFFC49900C03801C62000878100C100102043802000861C109820C7E22092 -:2018E00000861CCCE3FFC4002003802018863801C6200787E009100F1C040820C0C23808B4 -:20190000043E3532EF143AFA3A3C6F260054227B1F2AB3165ECD5213CA1D1923567BB2C2E1 -:201920002519C3D304CDBD32CDFF26CDB0332A7B1F2B227B1F7DB4CA4019CDC728C32819B2 -:201940002AB31623CD5213CA4B192322B316C30619218000CD9133CD6338CDF6280E02CDBF -:20196000C833B7CCB733B7C8CD683820027265706169F2C93E3F32123BCD9F31CD3030114E -:201980000C0019CDED387EE5CDB42FE1CD683820A0232323CD52130608C29E19061023CDE7 -:2019A0005213CAB8195E23567BB2CAC919E5C5EBCDBA2FC1E1C3C2197EB7CAC919E5CDB4A5 -:2019C0002FE1CDED3805C29E19CDA731CA9610F5CD68380D092020202020A03A6301B7F273 -:2019E000E819CD68380909A0F1C37C19318A3BAF327915CDA80D3AEF14FE0CCA061ACD6831 -:201A0000380D8DC39610CD683803636865636B73756D3AA02A7B1FE5CDBA2FCD68382020E2 -:201A2000746F74616C3AA0D121085F1922291AE5CDBA2FCD683820206465633AA0E1CDDFF6 -:201A40002FC396107EB7FA6731CDC131C396103AD01AB7C2AE1DCDB41DC36B1ACD683849FB -:201A60006C6C6567616C206E616DE5CD633821063B7E23CD7B35CD180C3A0F3BB7FA67310E -:201A8000CD6838203DA03AD01AB721E93BFAC61ACD68386E6577204E414D45BACD03362A00 -:201AA000771E237EB7CA9610CD6338CD782FCDF32132D01AC2C61ACD2A0EC25C1ACD782F9D -:201AC000CDF321CA5C1A228B1A012A3BCDAC213E00FE3AC2DE1AF68032D01AC36E1AB7FA60 -:201AE000F31A21063B7E23CD7B35CD180CCD6838203DA021073B11173B060BD5C5CDBC37CD -:201B0000212B3BC1D17EFE3FCA151B4F1AB779F2141BF680121ACDEF38231378FE043E2E8B -:201B2000CCEF3805C2051B11163B1A323A1B3A063B12AF32223BCD9F313E2812C24F1A3A83 -:201B40006301B7F2571BCD6838202072656E616DE5CD1B1CC2961011063BCDD131C396106B -:201B600011063BCD10333E3F32123BCDB70DC2A91BCD7E3121000022273BC3981B3AFA3AEB -:201B80003C6F2600111000CD5E35EB2A273B1922273BCDA731CAAE1BCD3030110F00197EC3 -:201BA000FE80CA7D1B5FC38B1B0E23CD06333AEF14FE0BC0CD683820AD2A273BE5CDDF2FBA -:201BC000CD68382081E10E08CD401C7BB7CAD11B23CD0E26174FC5CD401CC17BB7CAE11BBE -:201BE00023591600CD5E35E5110800CD5E35EB2A273BEBCD2C2BCDDF2FCD683820656D7065 -:201C000074F9D1D52A131C1922131CE1CD9F26CDED38210000CD9F26C39610CDA80DCD68B6 -:201C2000382028592F4E2920BFCD1038FE4EC2361CCD68386FA0FE59C0CD683865F3AFC901 -:201C40001100004279B7C83DC8E57D916F7C9867DA591C13E3E1C3491CE1EBC9CD6838897E -:201C6000060B237EB73E2DF26C1C3E49CDEF3878FE043E2ECCEF3805C2621CC396102106ED -:201C80003B3A5109B7CA5C1C000000000000F5D5E60F5F160019D1F1FAA11C7EF680C3A45B -:201CA0001C7EE67F770E1ECD0633C396103A9710B73A681EC4FE32112A3BCD9F31CAC41D09 -:201CC000CD30303AD60BB7FA67313A62013A6201B7CAC11DFE02C2AA1DCD6838200420653B -:201CE00078697374732C2028422961636B75702C20284F2976657277726974652C2028538B -:201D0000296B6970BACD1038FE4FCAC11DFE53CA9610FE42C29610212B3B113B3B0608CD40 -:201D2000BC373E4212133E4112133E4B12113A3B1A32961D3A2A3B12CD1033CD9F31CA958A -:201D40001DD5CD3030D13AD60BB7F2641D3A6201FE02CC6338CD6838206F6C64202E4241AD -:201D6000CBC367313A6E01B7CA8F1D3A6201FE02CC6338CD6838206F7665727772697465EF -:201D8000206F6C64202E4241CBCD1B1CC29610113A3BCDC1313E0012CDCE31213B3B060BD3 -:201DA00036002305C2A01DC3C41D3DCA171DCDB41DC39610CD68380304206578697374F3AC -:201DC000C9CDBE313E00FE4DCA3B1F3E2411333B1213121312112A3BCD1033CD9F31CA099E -:201DE0001ED5CD3030D13AD60BB7F2091E3A6201FE02CC6338CD6838206F6C642074656DD1 -:201E000070202E2424A4C36731CDBE31CDAF313A6701B7112A3B0E24C40500AF32E41E6740 -:201E20006F223C1E227B1F3A9710B7C4FE323A5C00CD9E32CDC5372A771EEB21801E19E50C -:201E4000EBCDC931E13A19133DBCCA671E11063BCD1132B7C2641E2A3C1E11800019223C58 -:201E60001EC3341E32E41E3E00B7C4FE323A2A3BCD9E32CDC537118A3B2A7B1F3A3D1EBC22 -:201E8000C2751F3A3C1EBDC2751F3A6701B7CAE31EEB227B1FEB2A3C1E19223C1ECDC631B2 -:201EA000CDC537112A3B0E21CD0633B7C2E31E2A7B1F1180001ABEC2631F13237BB7C2B5E4 -:201EC0001E227B1FE52A4B3B23224B3BE13A3D1EBCC2A01E3A3C1EBDC2A01E112A3B0E21A0 -:201EE000CD06333E00B7CA1B1E3A681EB7FCFE32CDF131212B3B113B3B0608CDBC3721F461 -:201F00003A0603CDBC373A6B01B7F5CA1E1FFA1E1FE60F213B3B5F1600197EC68077CDCE3E -:201F200031F1CA9610FA9610F53A9710B7C4FE32F111063B6F260019C39B1C3A9710CDFED7 -:201F4000323E3F32123B11063BCD9F31CA9610CD30303A681EE67F77CDBA333EFF325C3076 -:201F6000C3461FCD68380703566572696679206572726F720019EBCDC931213C001180004A -:201F800019227B1FCD8535C3731EAF3277053A6D01B7C2AB1F3C325C00325C30CD4E30CDA9 -:201FA000B01F3A6D01B70E00CA05002A1001F9C93A00004F3A1701B9C2C01F3EC3320000B1 -:201FC0003A9710E67F171717174F3A75253DB1320400C9114001C3E81F114801C3E81F11FE -:201FE0005001C3E81F115801EBC31A20CD2620223C1E2A1813E3210000E52A3C1EE5EBE56E -:2020000011810006007EB7CA112012231304C2052078328000E1C9CD2620223C1E318A3B6C -:20202000212904C3F91FCDAE3A110000EB1ACD1638FE2CC8FE20C8D630DABA3AC6E9DABAA2 -:202040003AC606F24B20C607DABA3AC60AB74F0600292929290913C32D20CD2620AF329250 -:2020600020322039E5CD68380D616464723A48657820446563202042696E617279204173B7 -:2020800063696920456E7465F2E1CD6338E5CDBA2F3E00B7F47E35F29E20CD6838ADCDED69 -:2020A00038E1E57E47CDB42FCDED3878CDA62FCDED3878CD842FCDED3878B73E20F2C22064 -:2020C0003E2DCDEF3878E67FFE20DAD220FE7FDADA20CD3937C640C3DF20F5CDED38F1CDDF -:2020E000EF38CD68382020BC3A6801CDEF38CD6838BECD03362A771E23CD782FC20621E168 -:20210000CD6F21C38A20473A0801B8C23521237ECD1638FE42CA2C21FE44CA2C21FE41CA26 -:202120002C21FE2ECAD304FE48C2BA3A326801CD782FCA8920229D0F3A6801FE41CA7821F4 -:20214000FE42CA7C21FE44CA9721CD26207CB7C2BA3A7DE177CD6F21EB2A9D0F7E23FE2066 -:20216000C25C21CD792FEBCA8A20E5EBC30621233A9220B7F02B2BC96EC352210100087E92 -:20218000FE30CA8B21FE31C2BA3A3779174F2305C27F2169C35221CDC70FCDB63AC35221E1 -:2021A000FE5FCAAA21FE20D8FE7F3FC9037EFE2AC2BB21237EFE2ACABB212B32750E1E08F6 -:2021C000CDC621231E037EFE2ACA0122FE2ECAEE21CDF321CAED21573A6C01B77ACC16386D -:2021E000021D0323C2C6217EFE2ECAEE212B3E20C30B22FE20C8FE5BC8FE5DC8FE3AC8B714 -:20220000C9237EFE2ECA09222B3E3F1C1DC80203C30C22CD2B22C3D304CD2B227BF68032A3 -:20222000AA0E3A9710CDFE32C3D304CDB70DCADD0DCD792F3E0132681EE57EFE20CA4E2202 -:20224000FE30DABA3AFE3AD2BA3A23C33A22363AE1CD8A0F3A6101BBDA61227BFE10DA690B -:20226000223A3406B77BCA3906FE20D2BA3AF68032AA0EC30133CD792FCD163832DC222171 -:20228000D001CD63383A6401E67F47CD610CCD792F0E0FE52B1600237EB7F2A322F57AF654 -:2022A0000157F1E67FFE7FCABF22CD1638D2B822FE20CAC022D297223E02B257C397225710 -:2022C000E17AFE7FCAF9220F57D2D6223A3406B7CAF922CD680C7A0FD2E2223E00FE3FC224 -:2022E000F9227EE67FFE20CA0723D2EE220DCD4137230DFAF922C2E2227EB7CAD30423FE98 -:2023000020C2F922C38B22CD792FCAD304CDED380DC20D2305C28B22C38222CD63383A626A -:2023200001C641CDEF38CD6838094966200420657869737420412D6F7665726C61792C202F -:20234000422D6261636B2075702C20432D61736B2C20442D736B69708D3A6401F5C630CD25 -:20236000EF38CD683809636F6C756D6EF3F117D27F23CD6838202B3120696E204449D2CD97 -:2023800068380DD03A05012F3CCDE025CD683809706167696E670DD23A6301CDE025CD68D3 -:2023A00038097265717565737420592F4E206F6E2063757272656E7420040928512D726513 -:2023C0007175657374206E6577206E616D65290DD63A6701CDE025CD6838097265616420EE -:2023E00061667465722077726974650DD33A6501CDE025CD68380973686F77207379737404 -:20240000656D2004730DD43A6601CDE025CD68380973746F70206966200569732066756C6C -:202420006C0DCD3A6B01B7CA2B242FCDE025CD6838094D61726B20636F706965642066695B -:202440006C65730D58096C69737420647269766573201841AD3A60015F3A483457B77BC240 -:202460006324AFCD300ECD80357AA3C27C24CD6838206966206F6E206C696EE5CDB70DCA1E -:20248000DB24CD68380D55096C69737420757365727320201830AD3A6101CD972FCD683886 -:2024A0000DA43AF0022FCDE025CD6838097375626D6974202424242E5355428321F0027E7C -:2024C000B7F2C6242FB7C2CC243A7525CD7B35237EB7CADB24CDEF38C3CF24CD68380D2B10 -:2024E0002F2D09312D38206F72202852296561642F77726974652C20285329737973746571 -:202500006D2F6469722C20652858297472610D504F57455289210001CDBA2FCD683848830C -:202520003A1D016F260029EB132A0E0319E5CDBA2FCD6838480D54504189E17DB7118000C2 -:202540006A19F2462519E5CDBA2FCD683848832A18132BE5CDBA2FCD683848A0E123D1CD9D -:202560002C2B0607CD702F05C26425CDDF2FCD68382001003E0232E0040E1DCD0500E50E8C -:2025800018CD0500EBE10110000DFAD30478FE08C295256C5A047B1F5FD2D825E67FF5C5EB -:2025A000D578325C00CD4E30CD6338D1C178CD7B35CD6838182052AF7D1F6F3E57D2C22507 -:2025C0003E4FCDEF38CDED38E5D5C5CDFB25CD1626C1D1E1F1C38925F57D1F6FF1C38925DC -:2025E000B7FAF025CD68382028184F464617A9C9CD68382028184F4E17A9C92AFC3A23CDA1 -:202600000E26CA0A26293DC30226227B1FC93AF93AD603C037C9210000223C1E2AFC3A2390 -:20262000EB0E1BD5CD0500D106087E07DA3826E52A3C1E23223C1EE1F51B7AB3CA4826F1F4 -:2026400005C22B2623C32826F1CD0E26CA5A262A3C1E29223C1E3DC34C26CD6838557365BD -:2026600064BA2A3C1EEB2A7B1FCD2C2BE52AFE3A230E20CD401CEBE1CD2C2BCD9F26CD686D -:20268000382C2046726565BA2A3C1ECD9F26CD68382C204361706163697479BA2A7B1FCD32 -:2026A000DF2FCD6838CBC9CD68380364656C657465642004730D8DCD4E303E0232BD332ABC -:2026C000043B2200272101002206272AFE3A23CD702FCD702F444D2A771EEBC5D5424B3A08 -:2026E00019133D3DBADA5E2FCDC931CDFF263AE41E3DC249273D325C30CDBA33C34C2711B3 -:202700000000CD2332110100E5D52A043BEB2206272A0027CD2C2BC16069D227273E00B714 -:20272000C23F272BC33F27210000EB0BCD30D63AF83AB7C2372767CDB70DC23F27676922DE -:20274000CD30444DCD21D6E1C9CDB033CDC728D1C121800019EB0B78B1C2DB26D5CDC6314A -:20276000D13AE41EB7C02AFE3A444D2A771E1120007EFEE523C2B928237EFEE52B2BCAB96E -:2027800028233A5C00CD7B355D54C5D5E5CD180CD1D51BD51A32E41E3A5C00CD9E3212D5BC -:2027A000210C00197E32D60B3600D1E5CD9F31E13AD60B773AE41ED112CAD527CD683803F1 -:2027C000027265636F7665722C2004206578697374F3C3B3283AFB3A4F3AD60BB9CA072848 -:2027E00081B9CA0728CD683803027265636F7665722C2004207769746820626164206578CE -:2028000074656EF4C3B328CD6838037265636F7665F2CD1B1CC2B328325628E1D1C1C5D59B -:20282000E52B227B1F3A9710E67F77E511090019CDB70DCA3A287EF680772323237E32D6E0 -:202840000B2323237EFE80E1C2A328112000190B78B1C267283E00B7C2A3282F3256282A40 -:20286000FE3A444D2A771E7EFEE5C24B28223C1EEB2A7B1FC50E0B23131ABECA8428F68037 -:20288000BEC29B280DC27728233AD60B96FAA2282A3C1E79325628C1C32528C12A3C1EC369 -:2028A0004B28C13E0132E41ECDBF263E8032E41ECDBF26CD6338E1D1C12B112000190B7848 -:2028C000B1C27127C3D304E5D52A062723EB2AF73ACD2C2BEBD2F0282A002723EB2A253200 -:2028E000CD2C2BD2E928110000EB220027210100220627D1E1C9E5CD2F35CD683847BD2AEF -:20290000043BEB2A0027CD2C2BDA1E292A0A34CDBA2FCD7E353AD132CDB42FC32829CD6823 -:20292000382D2D2D2D3A2DADCD68382054BD4F2A0027CDE72FCD68382053BD2A0627CDEDC8 -:202940002FCD6838205053BD2ACD30CDED2FE1C93AEF14FE213E1FCA5C293E2032EF14CD39 -:202960004E30CD2620CDB63AEBE52AFC3ACD2C2BCDBD32210100227B1FC3A429CD4E30CD73 -:20298000AE3ACDC70FCDB63A220027210100227B1FEBCDAF3ACDC70FCDB63AD52206277D26 -:2029A000B4CA332BE1CD782FCA112A3AEF14FE1FC2F0297ECD1638FE58C2F0293E063282EA -:2029C00015237ECD1638FE20CADF29FE41C2D5293E08C3DC29FE48C2DC293E07328215E529 -:2029E000218000223C1EE1CD782FC2002AC3172ACD2620CDB63A223C1EEBCD782FCA172ABF -:202A0000CDC70FCDB63A227B1F7DB4CAD304C3172A218000223C1E2A7B1F3A19013DFEFF55 -:202A2000C2272A3AF93A3C5F4F1600CD2C2B3E03DE0132BD337932062B2A3C1EEBCDC9319E -:202A4000CD122BDA602ACDFF262A7B1F2B7DB4CA602A3A8215B7C2602A3A0C01B7CA802A5C -:202A6000CD6338CDF628CD6838204174BA2A3C1EE5CDBA2FCD6838ADE1117F0019CDBA2F8E -:202A8000CD122BDA332B3AEF14B7CA332BFE1FF5CCB033F1C4BA333AEF14F52A3C1EE521B9 -:202AA0007000223C1E2180007DE60F322F153A821532EF14B7CAD22AF53A0C01B7F5C4630F -:202AC00038CD0714F1CACD2ACD68380D8DF1210000E3E1223C1EF132EF142A3C1E11800090 -:202AE00019223C1E2A7B1F2B227B1F7DB4CAD304CDC728D2052BAF32EF14673A1E276F22AB -:202B0000CD30C3602A3E013D32062BB7CA172AC3392A2A0027EB2A2532CD2C2BD87DB42A90 -:202B20000627EB2AF73AC22C2B2124007D936F7C9A67C9CD683807034F7574206F66200536 -:202B4000626F756E647300CD1F2F2A3C1EE5CD8B2BCD6838204C617374204164647265734F -:202B600073BA2A3C1ED17CBAC2702B7DBBCA712B2BCDBA2FCD683848A0CDC631CDB02B2AD6 -:202B8000273BCDDF2FCD6838200100115C00CDD6312A3C1EEBCDC931115C00CD11323DC871 -:202BA0002A3C1E11800019223C1EC3912BCD1F2F215C00112A3BD5CDBA37E1E511063BCD66 -:202BC000BA37D1CD9F31C2D42B3AEF14FE1DC2DF31C3022CD5CD3030D1CD601B3AEF14FE64 -:202BE0001DC03AD60BB7F2EF2BCD6D31C3D3042A7B1F237DB4C2FF2B2A273B23227B1FCDD9 -:202C0000BE312A7B1F237DB4CABA3ACDAF312A7B1F2B227B1F7DB4CA302C2A3C1EE5EBCD1F -:202C2000C931E111800019223C1ECD8535C30E2CCDF131C3D304CD1F2FEB227B1F318A3BCE -:202C4000212404E52A3C1EE5CD8B2B2A7B1FC9CD082D7CB5CAD304E52A7B1F78BCDA7C2C9A -:202C6000C2682C79BDDA7C2CD119E5606919444DE1137E020B2BCD182FC3722CD1137E0281 -:202C80002303CD182FC37E2CCD792FCAA42CFE2CC2B52CCD782FCAA42CCD26202BEB2AA8A8 -:202CA0002CC3FE2C1170002100007DE60F2FE60F835FC3FE2CCD2620227B1FEBFE2CCADA6C -:202CC0002CD5CD792FD1CAD42CFE2CCADA2CCD122DC3FA2C210000C3FA2CCD782FCAE72C99 -:202CE000CD26202BC3FA2C2170003A7B1FE60F2FE60F856FC3FA2CCD082DEB2A7B1F223C43 -:202D00001EEB23227B1FEBC9CD2620227B1FEBCDAF3ACD2620223C1EEB3AEF14FE27CA2BD6 -:202D20002DFE29CA2B2DFE28C2312DCDAF3ACD2620E5C12A3C1EE5545D2A7B1FEBCD2C2B7B -:202D4000D1DABA3AC9CD882C3E85C3622DCD882C3E88C3622DCD882C3E86C3622DCD882CC4 -:202D60003E8732EF14C35C13CDF72CAF32E41E2A0E0322771E6069CDAE3A3AE41EB7F47984 -:202D80002FCAEB2DF28F2D237E2BB7CAEB2D7E4FFE22CAE02D0600FE3FCAB52D3AE41EB769 -:202DA000FAC12DCD26207CB7C2BA3ACDB63A4DEB0680C3C12D063F3AE41EB7FAC12D06BF1E -:202DC00023E52A771E71247023702522771EE13AE41EB7FAE72D7EFE20CA7A2D23C3D62DE0 -:202DE0003AE41E2F32E41E23C37A2D2A0E03EB2A771E424BCD2C2BEB2A3C1EE52A7B1F7C7D -:202E0000B52B227B1FC2132EC3192EE52A7B1F2B227B1F237CB5CAD304D5CD2C2BDAD304DA -:202E2000D1E10ABECA312E040AE67F05FE3FC24E2EE5D5C523031B7AB3CA522E0ABECA34FF -:202E40002E040A05E67FFE3FCA342EC1D1E123C30B2EC1D1E1CD6338CDBA2FCD68383AA0F9 -:202E6000E5D5C5040AB73E22F4EF380AB77EF27C2EE5CDB42FCDED38E1C3972ECDA021D268 -:202E8000942EF5CD6838BCF1E5CDB42FE1CD6838BEC3972ECDEF3823D50A07E6015F030AE8 -:202EA00007E601ABCAB02ECD6838A20AB7FCED38D11B7AB3C26B2E0AB73E22F4EF38C1D19E -:202EC000E1C34E2ECD082D7CB5CAD30423EB2A7B1F0ABECAFB2EE5F57EF5CD6338CDBA2F06 -:202EE000CD68383AA0F1CDB42FCDED38F1CDB42FCD683820BAC5E1CDBA2FE12303CD182F99 -:202F0000C3D12ECD082D78B7C2BA3AEB132A7B1F7123CD182FC3102F1B7AB3CAD304C92AC0 -:202F20000E03237EFE20C2222FCDAF3ACD4E3021FFFF227B1F21963BCDAF3ACD2620223CB9 -:202F40001E21FFFF227B1FEBCD782FC83AEF14FE1DC0CDC70F1AFE20C023227B1FC9CD68C1 -:202F600038036D656D6F72792066756C6C030D00B77C1F677D1F6FC9237EFE20CA782FFEDF -:202F80003BC8B7C9C5060807F53E30CE00CDEF38F105C2872FC1C90E01C39E2F0EFFE67FA6 -:202FA0006F2600C3F32F0E30E5D5C56F2600CDED2FC343386FAF67C3BC2F3EFF32C52FE5A3 -:202FC000D5C50EFF3E00B7CAD62F1100F0CDFE2F1100FFCDFE2F11F0FFCDF62FC343380E43 -:202FE0003011F0D8CDFE2F1118FCCDFE2F119CFFCDFE2F11F6FFCDFE2F11FFFF0EFF062FB8 -:203000002209300419DA003021000078B9CAED380DCA21300EFFFE3ADAEF38C60747C3EFB9 -:2030200038F5D630B90E01CA2E30F1C31430F1C9E60387878787875F160021800019E53EDD -:2030400009856F7E32D60B237E32E80BE1C93A5C00CD300E325C00E5CDC6313E00B7CA7665 -:20306000303E0132E534AF325C305FCD200111E5340E0DCD06330E18CD05003A5C005F01A3 -:2030800010000DFA9E3004CD702FD2823078BBC282303AF308BBCA9E301E01C3A0301E0058 -:2030A0003A5C00CDD630CABC30DABF305E235623EB222827210800197E23666FCD3B322AB6 -:2030C000043BEBCD2332110100CD08272100007CB5321E27E1C932E5343D4F3A16013CC2FD -:2030E000E63079F6804FCD1BD6CDB70DC8AF32F3087CB5C0CD68380D074469736B206C6F91 -:2031000067204552524F52206F6EA03A5C0032F308F5CD7B35CD68382C206C6F67696E6793 -:2031200020746F206472697665206F6E6CF9F1B73FC93A8508B7CA3F31318A3BC39708CD63 -:2031400068380D024C4FC7CD6838206F6EA03AE534B7C258313A5C00CD7B353A7525325C8A -:2031600000CD7036C3D304CD6D31C39610CD683803042069732024522FCFC9CD1033CD9F25 -:2031800031C0CD8408CA8C31E1C35B08CD68380D4E6F200473A0215D00CD180CC347310E31 -:2031A00011D5CDA931D1C90E12CD0633FEFFC9112A3B0E16CD1033CDA931C0C39735112A21 -:2031C0003B0E13C3A9311180000E1AC30500112A3B0E17C3A9310E0FCD1033CDA931C0CDDC -:2031E00068380304206E6F7420666F756EE4C34731112A3BD5CDC631D10E10CDA931C0CD8E -:2032000068380302636C6F73652084CD7036C3A4353EFE32A6160E14CD0633F5AF32A6165C -:20322000F1B7C9E5214F00CD2C2BE1DA332BEB220027EB424BE5CD1ED6E1C9CDB70DCA4CE8 -:203240003211F73A060FCDBC37C380322A06002E00113A00195E23EB22F73AEB5E23EB22B6 -:20326000FE3AEB7E2332F93A7E2332FA3A5E23EB22FC3AEB5E23EB22003BEB5EEB22043B11 -:2032800021D1327EF53AFA3A77E52AFC3AEBCDC632222532EB222A2BE1F1773A5C00F5E529 -:2032A000D5C532E53411E534CD7E343D5F0E0ECD0500CD4634CD18D6C1D1E1F1C9EB220AB0 -:2032C00034EBAF32D132626B3AF93A293DC2CB323E04856FEB2AF73A7D2F6F7C2F6723EBD5 -:2032E0000100000319DAE3320BEB2AF73A19E52A043B09EBE123220627EB220027C9E67F61 -:203300005F0E20C30500CD7E34CD0500CD4634C9E5D5210C001911170072231DC21933D13E -:20332000E1C93AEF14FE35CA5119CD68380362616420736563746F72206F6EA03AA616B7AE -:20334000CA4E31FEFEC2CB333A1A01B7CA4E31F53AEF14FE02CA5D33FE1EC24E313A752556 -:2033600032E004CD6838726561E4F1FA7E33CD68382C2061626F72F4CD1B1CCAD3042A777B -:203380001EEB3AEF14FE02CA8D331100002A3C1E190E803A1B0177230DC296333AEF14FE5E -:2033A00035C8CD633821263B34217C00343E00C9E5CDB733C3C233C327D6E5C50E02CDC8B7 -:2033C00033C1B7E1C22233C9C32AD62A043BEB2A0027CD2C2BD2DD333E0232A6163A0C019E -:2033E0003DCC6338CDF6283AA616B7FA0334FE7FCA0935FE02CA14352AB316AF7723773DD8 -:2034000032A616CD6338CD2F35019C002A3C1E23223C1E2AB3162BCD5213CA3834237E231B -:20342000B9C227347EB8C87E2BB623C21D3470237723772B2B2B71C9237EB9C8B7C23834BD -:203440007123772377C9F53EFF3CCA4F34F1C9F122CD34E3225B3431843B210F33E3D5F5E1 -:203460001100022A06002323237323722311160073237223110086732372F1C3CB34F53AA2 -:2034800048343CCA8834F1C9F122CD3421000039225834D5F51A32E534F12A06002323235F -:2034A0005E2356EB226134EB235E2356EB226E34EB235E2356EB227534EB11EC34722B7338 -:2034C0002B11D034722B732B722B73D1210035C9CD46343AA616FEFECA2233B7C03A5C000C -:2034E000B7C232313E02325C00C33231CD4634CD68380D0D5072657373205E432C200569A6 -:20350000732024522FCFC34731CD683820696E20646972003E0132A616CD6838206F6E20EF -:2035200073797374656D20747261636B738DC92A043BEB2A0027CD2C2BEB2AF73ACD5E3579 -:20354000EB2A06272B193AFA3A477DA032D1323AF93A47CD702F05C25335220A34C9C5D5AC -:20356000EB424B78B1C26E35210000D1C1C90B545D78B1CA6B35190BC37135CD80353EFA33 -:20358000C640C3EF38112A3B0E15CD0633B7C83DCAC4353DCAD435CD683807036469722037 -:2035A00066756CECCDAA35C3D304CD6838206F6E206472697665A0CDBD35C37B350E19CD28 -:2035C00005003CC9CD68380302657874656E642084C3A435CD683807030566756C6C206FE9 -:2035E0006EA03A2A3BCD7B35CDF131CDBE313A6601B7FAD3043AEF14FE1DCAD304318A3BDE -:20360000C396103A1D01325739E52A771EEBE112F5E5C5D5D1D5AF32573713123EFFB7FA09 -:203620008536D5CDC63111D03AD5CDD631D13ADF3A3D32F03AFA8136CD1132C28136D1D5D5 -:203640002180004604CDBC37E1E546237ECDEF3805C24B3623362023AF7732573921DE3A19 -:2036600077233511D03ACDF431CA8136D1C3B832211D367EB7F82F77CDC63111D03AC3C1C5 -:2036800031CD7036D113EBCD2038FE0DCAE036FE5FCA0137FE7FCA0137FE08CA0137FE15AE -:2036A000CA8237FE12CA8C37FE05CAB437FE18CA7A37FE5EC2C936CD2038CD1638FE21DA4B -:2036C0008A36FE5ECAC936D640473A0901B8C2ED363AEF14FE1BC2ED363A92202F3292208D -:2036E000362023F5AF77325739F1C3B832EBE1E57E2334BECAAB37EB7078CD413723C38761 -:2037000036CD0737C38736EBC1E1E5C523477ED60177DA4C37EB2B78463620FE08CA53379A -:203720003A57373C3C32573778FE20D2EF38CD80353A57373C3C325737F53E5ECDEF38F102 -:20374000C9FE20DC3937DA8035C3EF38333334EBC38736CD63373E00B7C806203D32573771 -:20376000C3533778FE203E08DC6D373E08CDEF383E20CDEF383E08C3EF383E08CD0737C3D0 -:203780007A37CD6338AF325737C31436D1D5131A47CD6838238DAF32573778B7CA87361325 -:2037A0001ACD413705C29F37C38736CD68388735EBC38736CD6338C3873606247E12231321 -:2037C00005C2BC37C9E5CDCB37E1C9CD06D6B7CA0138CD2038320A39FE13CA2038FE20C2F8 -:2037E000E937F680320A39E67FC5473A0F01B878C1CA2038FE30D8FE3A3FD8E60F3269010A -:20380000C9F601C9CDAE3ACDF437DABA3AC3D304CD2038CDEF38FE61D8FE7B3FD8E65FC91C -:20382000E5D5C5CD09D6327915FE03CA5738FE10CA4D38473A0B01B8CA473878FE0AC243D3 -:20384000383E0DC1D1E1C9CDA80DC3D3043A51392F325139C32338CD4137CDA80DCD703686 -:20386000C32404CD68388DC922BF38E3D5CD680C7EE67FCAD30411CC38FE01CCC23811D445 -:2038800038FE02CCC23811DE38FE03CCC23811E238FE04CCC23811E738FE05CCC238FE173B -:2038A000CC680CFE18CC610CB7C4EF38FE0D3E0ACCEF387EB723F27038CD610CD1E3218A06 -:2038C0003BC91AB7C8CDEF3813C3C238736563746F7273000763616E206E6F742000202D6D -:2038E000200066696C65006469736B20003E20E5D5C5F5E67F5FFE07C202393A1201B7C2DF -:2039000073393A1F01BBC248393E2057E67FFE20C248397AB7FA32393A5139B7FA48393E5E -:20392000113DFA4839322039B7C248393A0501322039CD203857FE0D3E20CA45397AFE20A9 -:20394000C24539EE80320A390E02CD0500F1F55F3E00B7FC77393E00B7CCC5373A6901B764 -:20396000CA7339575F622E00292B7CB5C269391DC26539F1C343387BF5FE09CA8839FE0DE9 -:20398000C299393EFFC3A33916033E20CD9839147AFE08C28A39F1C9F53A89393CFE08C2DA -:2039A000A339AF328939F1F5D55F0E05CD0500D1F1C9CD4E30CD68380D05636170616369D3 -:2039C00074793A89CDFB25CD9F26CD68380D747261636B733A09892A253223CDDF2F2A043D -:2039E0003BE5CDDF2FCD68382073797374656D0D012F747261636B3A892AF73AE5CDDF2F6A -:203A00002A2A2BCDDF2FCD6838206C6173740D012F73797374656D3A89D1E1CD5E35CDDFA8 -:203A20002F2AFE3A23E50E04CD401CCDDF2FCD6838206469720D64697220656E7472696518 -:203A4000733A89E1E5CDDF2FE10E20CD401CCD9F26CD68380D012F67726F75703A893AFAF7 -:203A60003A3C6F2600CDDF2FCD0E26176F2600CD9F262AFC3A3E3032C32FCDBA2F3EFF320A -:203A8000C32FCD6838482067726F7570730D6B62797465732F657874656E743A892108006D -:203AA0003AFB3A293DF2A33ACD9F26C3D3042BCD782FC0C3BA3A1AFE20C8CD683807036940 -:203AC0006E76616C696420617267756D656E740001242424202020202053554200000000EE -:203AE0000000000000000000000000000000000000000000434F4D2400040F01B3003F00BD -:203B0000800010000000025057202020202020434F4D3F000000000000000000000000008E -:203B200000000000000000780000005057202020202020434F4D00000074363738393A3B00 -:203B40003C3D0000000000000000740000000000CE37C93700005C3902434300433B0000D8 -:203B600060384300433B4D39935E00004D3902430000003046000134B8324F00560056001A -:203B800046002A3B0C338D352D2C7F13534156452050572E434F4D20313030203132302007 -:203BA00000434F4D00004341544348554D20444154000044454D4F202020204241530000AD -:203BC000464F524D41542020434F4D0000474F4E4B492020204241530000475241462020EF -:203BE0002020434F4D0000494E562020202020434F4D00004A41434B20202020434F4D00C2 -:203C0000004D555A412020202042415300004D42202020202020434F4D00005043414420AB -:203C2000202020424153000050435420202020202020200000504C4F5420202020424153D2 -:203C400000005057202020202020434F4D00005244202020202020424153000054455354B2 -:203C600020202020434F4D00005445542020202020434F4D000054494D4520202020424147 -:203C80005300004444542020202020434F4D000044522020202020204D414300004C38309B -:203CA0002020202020434F4D00004C38302F31202020434F4D00004C4C383020202020436F -:203CC0004F4D00004D38302020202020434F4D00004D55534943202020434F4D0000504FB5 -:203CE000574552202020434F4D00005245534F52432020434F4D00004D4143202020202039 -:203D0000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E503 -:203D2000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E3 -:203D4000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5C3 -:203D6000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5A3 -:203D8000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E583 -:203DA000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E563 -:203DC000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E543 -:203DE000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E523 -:203E0000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E502 -:203E2000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E2 -:203E4000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5C2 -:203E6000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5A2 -:203E8000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E582 -:203EA000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E562 -:203EC000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E542 -:203EE000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E522 -:203F0000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E501 -:203F2000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E1 -:203F4000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5C1 -:203F6000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5A1 -:203F8000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E581 -:203FA000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E561 -:203FC000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E541 -:203FE000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E521 -:20400000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E500 -:20402000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E0 -:20404000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5C0 -:20406000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5A0 -:20408000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E580 -:2040A000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E560 -:2040C000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E540 -:2040E000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E520 -:00000001FF diff --git a/hex/res.hex b/hex/res.hex deleted file mode 100644 index 9829de3..0000000 --- a/hex/res.hex +++ /dev/null @@ -1,258 +0,0 @@ -:020000040000FA -:20010000CD42015245534F55524345206279205761726420436872697374656E73656E0D0B -:200120000A284153204F462030312F30382F3830290D0A24436F70797269676874203139EE -:200140003830D10E09CD05002100003922FD1731FD17CD47160D0A4D656D6F7279206F70EF -:20016000656E20746F20002A06002BCD9A14CDDA15CDDA15CD5C16AF32121732141731FD67 -:2001800017CD15162123177EFE0DCA7701FE3BCA290DFE41CAC804FE42CAD404FE43CA72BD -:2001A0000BFE44CA2D03FE45CADF13FE46CA1508FE4BCA0314FE4CCADC04FE4FCA5504FE42 -:2001C00050CA2B02FE51CAEC02FE52CAC508FE53CA230AFE55CA6E0EFE58CAF801FE5ACACE -:2001E0008108FE3FCA8B07AF321217321417CD47163F0D0A00C37701CD4716592F4E20702B -:200200007572676520616C6C2073796D626F6C7320262043544C3F00CD15163A2317FE595E -:20022000CA7401FE4ECA7701C3F8012124177EFE0DCAE701CDA714FE20CA4102FE2CC2E718 -:200240000123D5E53E01321217CD4E16094F52470900E1D17ACD3C117BCD8C143E00CDE6DC -:2002600015CDDA15D5CDA714FE0DC2E701C121001E23237EB7CA77012B2B7E91237E98DA66 -:200280008B022B7E93237E9ADADA02E5C52346E5237E2BFE41DAE602237EFE2BCAE602FE65 -:2002A0002DCAE60205C29802E1463E01321217237ECDE61505C2AF02CD4E1609455155092E -:2002C00000C1E17EB7C43C112B7ECD8C143E00CDE615CDDA15AF32121723237ECD37112358 -:2002E000CD8F16C37102E1C1E1C3DA023E013214171123172124177E122313FE0DC2F70265 -:20030000C38401436F6E67726174756C6174696F6E732C20796F7520666F756E6420746877 -:20032000652070617463682061726561212AE816E5EB2AFE161922EA16D12124177EFE0D27 -:20034000CA8C03FE53CA0C04FE3DCAEF03FE2CCA5E03CDA714E52AFE161922EA16E1FE0DFB -:20036000CA7703FE20CA6D03FE2CC2E70123D5CDA714EB22EA16D12AEC16E51922E8162A3B -:20038000EA16D11922EA16FE0DC2E7012AE816CD8F16E5CD7408CD9A14E1E5CDA2147ECDC5 -:2003A0008C14237DE603CCA2147DE607CCA2147DE60FC29E03CDE415E17EFE20DAC403FEEF -:2003C0007FDAC6033E2ECDE615237DE60FCAD803E607CCA214C3B903CDE415CDDA1522E813 -:2003E000163AEA16953AEB169CD28F03C3770123CDA714231BEB22FE16EBFE2CCA5203FE66 -:2004000020CA5203FE0DCA7701C3E7012125177EFE2EC22404CD4214CD6813D227042A180A -:2004200017C3270421001E5E2356237EB7CA7701EBCD9A14EB46237ECDE6152305C23704E2 -:20044000CDDA15CD8F16C327042AEC16CD9A14CDDA15C377012124177EFE0DCA4904CDA772 -:2004600014FE0DC2E701EB22EC16C377013A1317B7C2220B325C003268002124173A251765 -:20048000FE20CAE701FE3AC294043A2417D640325C002323115D000608CDA2040603CDA234 -:2004A00004C97EFE0DCABF0423FE2ECABF04121305C2A2047EFE0DC8FE2E23C8C3B4043ECA -:2004C00020121305C2BF04C93E01321C17AF321D17C3E3043E01321D17C3E304AF321D17BD -:2004E000321C17AF3212173A00173201173202172124177EFE0DCA2B05FE2CCA1F05FE2092 -:20050000CA1F05FE3DCA2906CDA714EB22F016EBFE0DCA2B05FE20CA1F05FE2CC2E701232B -:20052000CDA714EB22F216AF320217CD8F163A0217B7CA3F053A01173DFA7701C34D052A5A -:20054000F2163AF016953AF1169CD277013A1C17B7CA87052AF016EB2AEC161906087ECD64 -:20056000CE16DA87052305C25E057ECDCE1623D26A052BCD7408EBD52AF016EB3E42CD9520 -:200580000BD13E49CD950B2AF6167CB5CAC1052AF016EBCD7E0DDAC1052323463E01321272 -:2005A00017CDAE10AFB0CABE05237EFE5CC2B705CDDA1505C39C05CDE61505C2A905CDDA2B -:2005C000152AF016EBCD480C2BDACF052323237EFE49CA1F06FE45CA8108F5235E2356D57A -:2005E0002AF016EBCDAB0EE1221517EBAF321217F1FE53CA4906FE42CAA406FE57CA790689 -:20060000CDE615CD47163A20494E56414C49442043544C20454E5452590D0A00C37701CDB3 -:20062000080FAF321217C32B0523CDA7147BB7CAE7013200177E23FE2CCA0805FE20CA083C -:2006400005FE0DCA7701C3E701D53AF0162F6F3AF1162F6723193E01321217CD4E16445375 -:2006600009007CCD3C117DCD8C143E00CDE615CDDA15E122F016C32B053E01321217CD4E7E -:2006800016445709002AF016EB2AEC16195E2356CD21102AF016232322F016C32B05CDDA33 -:2006A00015C32B05AF3217173C321217CD4E16444209002AF016EB2AEC16197EFE0ADADE2E -:2006C00006FE20DACB06FE7FDA1A07CD3C113E00CDE6153A1717C602321717C3E306F63051 -:2006E000CDE61523EB2AF0162322F016EB3A1517BBC2FB063A1617BACA85072AF016EBCD7B -:20070000BA13D29E063A1717C602321717FE19D29E063E2CCDE615C3B3063E27CDE6153A64 -:2007200017173C3217177ECDE6157EFE27CCE61523EB2AF0162322F016EB3A1517BBC248A0 -:20074000073A1617BACA8007E52AF016EBCDBA13E1D280073A17173C321717FE23D27807D6 -:20076000FE19DA6D072B7E23FE20CA80077EFE20DA7807FE7FDA27073E27CDE615C3ED067C -:200780003E27CDE615CDDA15C32B05CD471653594D54424C3D0021001ECD9A142AEE16CD86 -:2007A0009A14CDDA15CD47165043202020203D002AF016CD9A14CDDA15CD47164F46465396 -:2007C00045543D002AEC16CD9A14CDDA152AF6167CB5CAEF07CD4716434F4D4E54533D007E -:2007E0002AF616CD9A142AF816CD9A14CDDA15CD471643544C54424C3D00210018CD9A14F9 -:200800007E23A623233CC200082B2B2BCD9A14CDDA15C377012124177EFE0DCA4B08CDA7DC -:2008200014EB22FC162AEC1622FA16EBFE0DCA4B08FE20CA3B08FE2CC2E70123CDA714FE6C -:200840000DC2E7012AEC161922FA162AFC16EBCD8F162AFA167E2322FA16BBC24F087EBAB8 -:20086000C24F08E5D5CD74082BCD9A14D1E1CDA214C34F083AEC162F5F3AED162F571319AE -:20088000C9CDAB0E3E01321217CD4E16454E440D0A00AF3212173A1317B7CA77013E1ACDC4 -:2008A000B615CD7715AF321317CD47162B2B41534D2046494C4520434C4F5345442B2B0D2B -:2008C0000A00C37701CD6D043A1317B7C2220B216500110C170E03CD8516C2ED0821001E62 -:2008E000CDC00922EE1623233600C38B072165001106170E03CD8516C23E09CDDF142AEC5F -:20090000167CFE1EDA710911000119E5EB0E1ACD0500115C000E14CD0500B7C22609E111E5 -:20092000800019C30B09E1CD9A14CD7408CD9A14CDDA151180000E1ACD0500C3770121651F -:20094000001109170E03CD8516C24F09C3E80C216500110F170E03CD8516C2E701CDF20D70 -:200960002AF616CDC00922F81636FF2336FFC38B07CD47162B2B4E4F2C2054484154205788 -:200980004F554C44204F5645524C41592054484520444953415353454D424C45520D0A42E9 -:2009A000454341555345204F464653455420495320544F4F20534D414C4C3A2000C34904C9 -:2009C000CDDF14CD0E15FE1AC8FE09CAC309FE0DCAC309FE0ACAC309CDFC0973237223E5C9 -:2009E000230600CD0E15FE09CAF609FE0DCAF609772304C3E309E370E1C3C309110000FE1B -:200A000020C8FE1ACA590BFE3ADA0E0AD607D630EB29292929856FEBCD0E15FE1ACA590BF7 -:200A2000C3FF09CD6D043A1317B7C2220B216500110C170E03CD8516C2910A21001ECD56B1 -:200A4000155E2356237E2347B7CA6A0ACD750A3E20CDB6157ECDB6152305C2540A3E0DCDF2 -:200A6000B6153E0ACDB615C3410A3E1ACDB615CD7715C377017ACD7C14CDB6157ACD8014EF -:200A8000CDB6157BCD7C14CDB6157BCD8014C3B6152165001109170E03CD8516CAB30C210A -:200AA0006500110F170E03CD8516CA120B2165001103170E03CD8516C2E7013E01321317CB -:200AC000AF321217CD5615CD47162B2B57524954494E47202E41534D20454E41424C4544F6 -:200AE0000D0A555345205A20434F4D4D414E44204F52204520434F4E54524F4C20544F200F -:200B0000434C4F53452046494C452B2B0D0A00C37701CDF20D2AF816232336002AF616C3FE -:200B20003E0ACD47162B2B4E4F2046494C45204143434553534553205045524D495454451C -:200B40004420554E54494C202E41534D20434C4F5345440D0A00C37701CD47162B2B554E27 -:200B6000455850454354454420454F460D0A00C377012124177EFE0DCA6A0CCDA714FE0D1F -:200B8000CA640CFE20CA8D0BFE2CC2E701237ECDA70BC37701E5D5F5CD480C2BDAA20B23C7 -:200BA0002323F1D1BEE1C8321E17CD480CDAF20B3A1E17FE49CA440CFE57CA440CFE42CA1E -:200BC000440CFE53CA440CFE45CA440CFE4BC2E701EB21030019EB7E23A62B3CCAEC0B0682 -:200BE000031A77132305C2E10BC3D70B2B2B2BC3EF073A1E17FE4BCAE701FE45CA130CFE05 -:200C000042CA130CFE57CA130CFE49CA130CFE53C2E701D5E52100187E23A623233CC218AA -:200C20000C232323EB21FDFF19C12B1B7E127BB9C22A0C7AB8C22A0C6069D1732372233A32 -:200C40001E1777C9232377C92100187E23A62B3C37C8237ABE2BD8C25E0C7BBEC8D823230A -:200C600023C34B0CCD480CC36D0C210018CD8F165E2356237AA33CC27D0CC3EF07D5E5CD51 -:200C8000BA13DA960C7ECDE6152305C2850C3E3ACDE615CDDA15E1D1CDA214CDA214EBCDDE -:200CA0009A143E2CCDE615EB7ECDE615CDDA1523C36D0CCD56152100185E2356237AA33C44 -:200CC000CADD0CCD750A3E2CCDB6157ECDB6153E0DCDB6153E0ACDB61523C3B90C3E1ACD6A -:200CE000B615CD7715C37701CDDF14210018CD0E15110000FE1ACA210DFE2CCA150DFE3A3D -:200D0000DA050DD607D630EB29292929856FEBCD0E15C3F40C73237223CD0E157723C3EE7D -:200D20000C36FF2336FFC3EF07CDF20D2124177EFE0DCAA20DCDA71423FE0DCA9C0DFE20F0 -:200D4000CA480DFE2CC2E701E5CD7E0DDA5A0DCDCD0DE1E57EFE0DCA77012AF816732372AA -:200D600023D10600E5231A7713041AFE0DC2650D2322F81636FF2336FFE170C377012AF6E4 -:200D8000167E23A62B3C37C8237ABE2BC2920D7BBEC823237ECD371123C3810DCD7E0DC340 -:200DA000A50D2AF616CD8F165E2356237AA33CCA7701EBCD9A14EB3E3BCDE61546237ECDFE -:200DC000E61505C2BD0DCDDA1523C3A50D7E23A63CC82BD5545D23237ECD37112306007EB7 -:200DE0001223134FA03C41C2DF0DEB2B2B22F816D1C92AF6167CB5C0CD47162B2B434F4D00 -:200E00004D414E442049474E4F5245442B2B0D0A2B2B49737375652027554E4E4E4E2720A3 -:200E2000746F2074656C6C205245534F5552434520746F20757365206164647265737320E0 -:200E40004E4E4E4E0D0A617320746865207374617274206F662074686520636F6D6D656ECB -:200E60007473207461626C650D0A00C377012124177EFE0DCAE701FE2ECAE701CDA714EB29 -:200E80007CFE1FDA940E22F61622F81636FF2336FFC37701CD47162B2B4E4F2121203C312B -:200EA00046303048210D0A00C37701D5E53E013212172AF016EBCDBA13DAED0E48E57EFE4A -:200EC0002BCAEC0EFE2DCAEC0E230DC2BE0EE1CD4B113E3ACDE615CDA910CDA910CDAE1095 -:200EE0002AF016CD9A14CDDA15C3ED0EE1AF321217CDA214CDA2142AF016CD9A143E0132C0 -:200F00001217CDA910E1D1C9CDAB0E2AF016EB2AEC161922F416E52AF0162322F016E17ED6 -:200F200047216711110600197EB7CAB310A04F237EB9C2270F237E321E170604237EFE2EBF -:200F4000C4E61505C23C0F2AF0163A1E17FE04DA610FFE09D2610F23FE06DA5E0F2322F0E9 -:200F6000165F1600216F0F191919E52AF416C9C3930FC3960FC39F0FC3A80FC3B10FC3BD5F -:200F80000FC30D10C36D10C37310C37910C37F10C39310C3DA15CDA910CD2711C3DA15CD1C -:200FA000A910CD1D11C3DA15CDA910CDF010C3DA15CDA910CD1D11CDA410C3C00FCDA910AC -:200FC0002AF4162322F4162AF4167EFE20DAF10FFE5BD2F10F3A1E17FE04DAF10FFE06D298 -:200FE000F10F7ECDDC103E27CDE615CDA910CDAE107EFE0ADA0210CD3C113E00CDE615C327 -:20100000DA15C630CDE615C3DA15C3DA15CDA9102AF4167ECDF010CDA4102AF416235E2361 -:2010200056D5CDBA13D237103A1D17B7CA4010D1D5CD0A13C34010CD4B11CDA910CDAE10B6 -:20104000D17AB33E00CA56107AB7CA5C10CD3C117BCD8C143E00CDE615C3DA157BFE0ADAA6 -:201060006810CD3C11C35410C630C35610CDA910C31A10CDC210C36D10CDC210C3DA15CD28 -:20108000A9102AF4167E1F1F1FE607F630CDE615C3DA15CDA9102AF4167ECD1D11CDA41047 -:2010A0007EC3990F3E2CC3E6153E20C3E6153E3BC3E615CD4E16444209003E04321E17C3A0 -:2010C000C70F2AF4167E1F1FE60E215511CD37117ECDE615237EFE2EC4E615C9F53E27CDF8 -:2010E000E615F1FE27C2E615F5CDE615F1C3E6152AF4167E1F1F1FE606FE06C22B117EE655 -:20110000CFFEC1CA1511FEC5CA15113E53CDE6153E50C3E615CD4E1650535700C92AF416D1 -:201120007E1F1F1FC32B112AF4167E216511E607CD37117EC3E615856FD024C9FEA0DA8C99 -:2011400014F53E30CDE615F1C38C147ECDE6152305C24B11C94E5A5A2E4E43432E504F5086 -:2011600045502E4D2E42434445484C4D41FFCE054143492EF888014144432EF880014144BF -:20118000442EFFC6054144492EF8A001414E412EFFE605414E492EC7C408432E2E2EFFCD64 -:2011A0000743414C4CFF2F00434D412EFF3F00434D432EF8B801434D502EFFFE0543504903 -:2011C0002EFF27004441412ECF09034441442EC705024443522ECF0B034443582EFFF30044 -:2011E00044492E2EFFFB0045492E2EFF7600484C542EFFDB05494E2E2EC70402494E522EE1 -:20120000CF0303494E582EC7C2084A2E2E2EFFC3074A4D502EFF3A074C44412EEF0A034C12 -:20122000444158FF2A074C484C44CF01064C58492EC0400B4D4F562EC706044D56492EFF77 -:2012400000004E4F502EF8B0014F52412EFFF6054F52492EFFD3054F55542EFFE900504330 -:20126000484CCFC103504F502ECFC50350555348C7C009522E2E2EFF170052414C2EFF1FA6 -:20128000005241522EFFC9005245542EFF0F005252432EFF0700524C432EC7C70A52535491 -:2012A0002EF898015342422EFFDE055342492EFF220753484C44FFF9005350484CFF3207C2 -:2012C0005354412EEF020353544158FF37005354432EF890015355422EFFD6055355492EDC -:2012E000FFEB0058434847F8A8015852412EFFEE055852492EFFE3005854484C004E4E4D02 -:201300004D444459593F3F3F3F3F212117364C237ACD6F147BCD6F142121170605CD6813CC -:20132000DA2713732372C9E5D5C52AEE16545D78C603856F7CCE006722EE16232336002BB7 -:201340002B444D2A18177BBDC250137ABCCA57131B0B1A02C34613C1D17323722370D12332 -:201360001A771305C25F13C9D5E521001ED1D52323E57E23B7CAB013B8DA9C13C2A6134F0D -:20138000CD8516CA9513DAB013E17E23856FD26D1324C36D13E12B2BD1D1B7C94FCD851697 -:2013A000D28913C3B01348CD8516CAB013D28913E12B2B221817E1D137C921001E7E23BBB9 -:2013C000C2C8137EBACAD713237EB737C823856FD2BD1324C3BD13237E2347B7C037C9211A -:2013E0002417CDA7147EFE20CAF013FE2CC2E701237EFE2EC2E701D5CD4214D1CD1D13C3ED -:201400007701C92124177EFE2EC2E701CD4214CD6813DAE701444D23237E856F7CCE0067B4 -:2014200023EB2AEE167BBDC22F147ABCCA36141A020313C32514606922EE1623233600C38D -:201440007701230600E57E2304FE2BCA4614FE2DCA4614FE30DA6714FE3ADA4614FE41DABD -:201460006714FE5BDA461405CAE7012BEBE1C9F5CD7C147723F1CD80147723C91F1F1F1FD0 -:20148000E60FFE0ADA8914C607C630C9F5CD7C14CDE615F1CD8014C3E6157CCD8C147DCDEF -:2014A0008C143E20C3E6157EFE2ECACF141100007EFE30D8FE3ADAC114FE41D8FE47D0D69B -:2014C00007D630EB29292929856FEB23C3B014CD4214D5CD6813DAE7015E2356E17EC9E501 -:2014E000210001221A17AF327C00115C000E0FCD0500E13CC0CD47162B2B46494C45204ED3 -:201500004F5420464F554E440D0A00C37701E52A1A177CFE01C22B15C5D5115C000E14CD87 -:201520000500B7D1C1218000C232157E23221A17E1C9FE03DA5015CD47162B2B554E455815 -:2015400050454354454420454F460D0A00C377013E1A77C32B15E5115C000E13CD05001162 -:201560005C000E16CD05003CCAE701AF327C00218000221A17E1C9115C000E15CD0500B717 -:20158000C2A315115C000E10CD05003CC0CD47162B2B434C4F5345204552524F520D0A00C1 -:2015A000C37701CD47162B2B5752495445204552524F520D0A00E52A1A17772C221A17E10D -:2015C000C0C5D5E5115C000E15CD0500B7C2A315218000221A17E1D1C1C93E0DCDE6153EB8 -:2015E0000AC3E6153E2AC5D5E55FD50E023A1417B7CC0500D13A1317211217A67BC4B615DC -:201600007BFE0AC211163A0217B7CA111621011735E1D1C1C9CDE4151121173E4E120E0AF4 -:20162000CD05002122175E16001923360D212217237EFE0DCADA15FE61DA3016FE7BD230D2 -:2016400016E65F77C33016AF321217321417E37ECDE615237EB7C24F1623E3C9AF32021ED0 -:2016600021001E22EE163E0D32241721FFFF2200183E4932FF172AF6167CB5C822F8163690 -:20168000FF2336FFC91ABEC013230DC28516C9C5D5E50E0BCD0500B7CACA160E01CD05007D -:2016A000FE03CAAB16CDDA15C37701CD47160D0A41424F525420592F4E20000E01CD0500F7 -:2016C000E65FFE59CA0000C37701E1D1C1C9FE0DC8FE0AC8B7C8FE20D8FE7F3FC9D10E09A8 -:2016E000CD05002AFD17F9C9000180010000001E00010001000100000000000000007F00F6 -:201700000A010141534D434F4D43544C53594D444F4300000000000000000000000000004B -:20172000004E00030D0000000000000000000000000000000000000000000000000000004B -:20174000000000000000000000000000000000000000000000000000000000000000000089 -:20176000000000000000000000000000000000000000000000000000000000000000001A4F -:20178000E54D201EFF040E00AF78811FBBCAC4175FE5D5C5E5424816002100001905C29CA1 -:2017A00017D1191189011ABE1323C2B6170DC2A617C1D1E17BC9C1D1E1DAC0174BC38817DC -:2017C00043C38817AF3CC93A89010117C2FE4AC806C4FE43C80113C0FE52C93A8801FE047D -:2017E000D20D18FE03CAF217FE02C2F41530CAF4152ACA0000F8CA330023168401A9B949FE -:20180000FFFF00490049004900490049004900490049004900490049004900490049004983 -:20182000004900490049004900490049004900490049004900490049004900490049004918 -:2018400000490049004900490049004900490049004900490049004900D1964900490049DA -:201860000049004900490049004900490049004900490049004900490049004900490049D8 -:201880000049004900490049004900490049004900490049004900490049004900490049B8 -:2018A000004900490049004900490049004900490049004900D1964900490049004900497A -:2018C0000049004900490049004900490049004996490049004900490049004900490049E2 -:2018E0000049004900490049004900490049004900490049004900D196490049004900493A -:20190000004900490049004900490049004900490049004900490049004900490049004937 -:20192000004900490049004900490049004900490049004900490049004900490049004917 -:201940000049004900490049004900490049004900490049004900490049004900490049F7 -:201960000049004900490049004900490049004900490049004900490049004900490049D7 -:20198000004900490049004900D196490049004900490049004900D196490049004900497B -:2019A000004900490049004900490049004900490049004900490049004900490049004997 -:2019C000004900490049004900490049004900490049004900490049004900490049004977 -:2019E000004900490049004900490049004900490049004900490049004900490049004957 -:201A0000004900490049004900490049004900490049004900490049004900490049004936 -:201A200000490049004900490049004900490049004900490049004900D1964900490049F8 -:201A40000049004900490049004900490049004900490049004900490049004900D19649D8 -:201A60000049004900490049004900490049004900490049004900490049004900490049D6 -:201A80000049004900490049004900490049004900490049004900490049004900490049B6 -:201AA000004900490049004900490049004900490049004900490049004900490049004996 -:201AC0000049004900490049004900490049004900490049004900490049004900D1964958 -:201AE000004900490049004900490049004900490049004900490049004900490049004956 -:201B0000004900490049004900490049004900490049004900490049004900490049004935 -:201B20000049004900490049004900490049004900D19649004900490049004900490049F7 -:201B40000049004900490049004900490049004900490049004900490049004900490049F5 -:201B60000049004900490049004900490049004900490049004900490049004900490049D5 -:201B8000004900D19649004900490049004900490049004900490049004900490049004997 -:201BA000004900490049004900490049004900490049004900490049004900490049004995 -:201BC000004900490049004900490049004900490049004900490049004900490049004975 -:201BE000004900490049004900490049004900490049004900490049004900490049004955 -:201C00000049004900D1964900490049004900490049004900490049004900490049004916 -:201C20000049004900490049004900D19649004900490049004900490049004900490049F6 -:201C40000049004900490049004900490049004900490049004900490049004900490049F4 -:201C60000049004900490049004900490049004900490049004900490049004900490049D4 -:201C80000049004900490049004900490049004900490049004900490049004900490049B4 -:201CA000004900490049004900490049004900490049004900490049004900490049004994 -:201CC000004900490049004900490049004900490049004900D1964900D196490049004938 -:201CE000004900490049004900490049004900490049004900490049004900490049004954 -:201D0000004900490049004900490049004900490049004900490049004900490049004933 -:201D2000004900490049004900490049004900490049004900490049004900490049004913 -:201D40000049004900490049004900490049004900490049004900490049004900490049F3 -:201D60000049004900490049004900490049004900490049004900490049004900490049D3 -:201D8000004900490049004900D196490049004900490049004900D1964900490049004977 -:201DA000004900490049004900490049004900490049004900490049004900490049004993 -:201DC000004900490049004900490049004900490049004900490049004900490049004973 -:201DE000004900490049004900490049004900490049004900490049004900490049004953 -:201E0000004900490049004900490049004900490049004900490049004900490049004932 -:201E200000490049004900490049004900490049004900490049004900D1964900490049F4 -:201E40000049004900490049004900490049004900490049004900490049004900D19649D4 -:201E60000049004900490049004900490049004900490049004900490049004900490049D2 -:201E80000049004900490049004900490049004900490049004900490049004900490049B2 -:201EA000004900490049004900490049004900490049004900490049004900490049004992 -:201EC0000049004900490049004900490049004900490049004900490049004900D1964954 -:201EE000004900490049004900490049004900490049004900490049004900490049004952 -:201F0000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E521 -:201F2000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E501 -:201F4000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E1 -:201F6000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5C1 -:201F8000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5A1 -:201FA000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E581 -:201FC000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E561 -:201FE000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E541 -:20200000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E520 -:20202000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E500 -:20204000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E0 -:20206000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5C0 -:20208000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5A0 -:2020A000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E580 -:2020C000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E560 -:2020E000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E540 -:00000001FF diff --git a/hex/tet.hex b/hex/tet.hex deleted file mode 100644 index eb6b26c..0000000 --- a/hex/tet.hex +++ /dev/null @@ -1,323 +0,0 @@ -:020000040000FA -:200100002A0600F90000C30C01C30000CD6203CDB808C37B048026B80780260029C37704B0 -:20012000C37B04C39604C3E004C3C504C3BC05C34805C30106C32106C34B03C35D03C36A44 -:2001400004C35504F80CCD320FCDB50DC3E15E235623E52A1501197E23666FC9E15E23E57C -:2001600016002A1501197E23666FC9E15E235623E52A1501196EC9E15E23E516002A1501E4 -:20018000196EC9E15E235623E5EB097E23666FC9E15E23E5EB2600097E23666FC92101005A -:2001A000C82BC9210000C823C9210100D82BC9210000D823C9210100F02BC9210100F82B90 -:2001C000C9110100C81BC9110000C813C9110100D81BC9110000D813C9110100F01BC91159 -:2001E0000100F81BC97DBBC07CBAC9EB7ABCC07BBDC9EB7CBAC07DBBC9EB7CAAF2EC017AFD -:20020000B7F037C9EB7CAAF2F3017CB7F037C97AF5CD5A02EBCD5A02EBCD2902F1B7F07C7A -:200220002F677D2F6F23C900007CB5C8D5E5CD8902D1CD6B027C2F677D2F6F23D119C9AF59 -:20024000326806CD5A02EBCD5A02CD6B023A68061FD07C2F677D2F6F23C97CB7F02F677DA1 -:200260002F6F233A68063C326806C9C5CD7102C1C9444D21000078B1C8781F47791F4FD2A7 -:20028000830219EB29EBC376027CB5C8C5CD94026069C1C906017CB7FAA0022904C39602B4 -:2002A000EB78010000F5CDDD02DAB70203D57A2F577B2F5F1319D1AF7A1F577B1F5FF13D02 -:2002C000C8F579174F781747C3A602AF326806CD5A02EBCD5A02EBCD8902C34D027CBAD852 -:2002E000C07DBBC9EB1C1DC8AF7C1F677D1F6FC3E602EB1C1DC829C3F4027C2F677D2F6FEF -:2003000023C97A2F577B2F5F13C9210400397E23666FC9210600C30D03210800C30D032158 -:200320000A00C30D03210C00C30D03210E00C30D03211000C30D0311500621040039C5064A -:200340000E7E12231305C24103C1C9210000392277062A060011CCF719F9C303012A7706B7 -:20036000F9C9E1226A06217A08E52A1B0122640621E80322660621DC592248063EDB325EE5 -:20038000063ED33261063EC9326006326306CD3E01AF3273063274063E1F3272063E0332E7 -:2003A00076062100CC2240062110002244062140002242062100042246060E0BCD0500B7CF -:2003C00000CAC9030E01CD050021800011F907462378B7C2DC03110100C33A047E122313E2 -:2003E00005C2DC03AF1221F907110100017C08AF3269067E23FE20CAF303B7CA3A04FE2230 -:20040000C20904326906C30A042B7D02037C0203137E23B7CA3A04C5473A6906B778C1CA8B -:200420002E04FE22C21104AF3269062B7723FE20C211042B360023C3F303D5061B21DE0750 -:2004400036002305C24004CD4101AF326E06323F062A6A06E92A1B01EB2A1501CDFA021987 -:200460007CB5C81B2BAF12C36004C91B0122640621E8032266062121FFFFC93E10F5CDC56C -:2004800004DA8C046F2600E5CD9604E1F13DFE07C27D04C30901CD0A03CDC504DA77047EA6 -:2004A000CD3201E604CAB804E5CD1303C5CDBC05EB0E10CD0500C1E1CD35013600FEFF21DD -:2004C0000000C02BC957D608D8FE093FD8D55F160021DE071919197EE60137D17AC83FC9EB -:2004E000C5CDA705E51306044ECD15002305C2E8020E20C315007AE6380F0F0FC9CDF6025F -:20050000874F213506094ECD1500234ECD15000E20CD1500C31500CDF602E606FE06C2B10D -:20052000020E53CD15000E50C31500CD2E002A0C007CCDC8027DCDC8020E20CD1500CD15F6 -:2005400000C9210000392213003A1000B7CA640321FFFF220E003CC264033C3210002A0CA9 -:2005600000C38A03CD9106C233052110007EB7CA760335CA33052A0C00CD9406CD2E000E47 -:2005800020CD1500CD1500CD2E03CD960257213805011100BECAF004230DC294030E0ABE72 -:2005A000CADC04230DC29F030E06BECAC104230DC2AA03E6C0FE40CAA704FE80CA98047A46 -:2005C000E6C7D604CA89043DCA83043DCA6F047AE6C0CA3D047AE607CA3204D602CA2704D6 -:2005E000D602CA1C04D603CA0D047AE608C2FE047AE6074F3D212C0609CDE602CDF602FE92 -:2006000006C29204212906CDE602C36403212506CDE602CDF602CDC802C364030E43CD1593 -:2006200000CDFD02C3CC040E4ACD1500CDFD02C3CC040E52CD1500CDFD02C36403210D005C -:2006400000CC400010000004C8D5C8D704FE03DA02000400320000FF001F0AFF0012DB64AF -:20066000C9D3E6C90029E80300CD0F01C3CC002109061F0000CD0302CDB1020E2CCD1500F2 -:20068000C3E704210506C38C04210106CDE602CDF602CDB102C364037AE6380F4F21E105E4 -:2006A00009CDE602C3B80421DD05CDE602CDF602CDB1020E2CCD15007AE607CDB102C364D6 -:2006C000037987874F21C10509CDE602CD9602F5CD960257F15FCD8806C364037987874FDB -:2006E00021990509CDE602CD9602CD8506C364037987874F21550509CDE602C364032169D3 -:2007000006CDE6027ACD8506C36403CD2E000E3FCD15002A1300F921000039221300CD2B3B -:2007200003221100CD7C06CD4D012A1100220C00C31E052A1300F9C900070F171F272F37F2 -:200740003F76C9E3E9EBF3F9FBC6CED3D6DBDEE6EEF6FE222A323AC3CD45492020535048BE -:200760004C44492020584348475043484C5854484C52455420484C5420434D4320535443DF -:2007800020434D4120444141205241522052414C2052524320524C43204E4F50204350496D -:2007A000204F52492058524920414E492053424920494E2020535549204F55542041434939 -:2007C000204144492043414C4C4A4D50204C444120535441204C484C4453484C444D000053 -:2007E000000000000000000000000000000000000000000000000000004F524120434D5017 -:2008000020494E5220444352204D5649204C58492053544158494E5820444144204C444194 -:2008200058444358205253542050535720504F5020505553484E5A5A204E434320504F50DA -:200840004550204D20422043204420452048204C204D204120422020204420202048202078 -:200860002053502020505357203F3F3D20000000000000C39706C39F06C30F16C3DE11C35B -:200880000612C3EF11C33412C35D12C34A14C3E112C34E12C37F12E3224B19E3C306DC2AD9 -:2008A0000600229D0621970622010021000022060022EC19AF325019C3F708C3420FC3CA6F -:2008C0001AC3DE0EC3BF11C3DD0FC36510C3F80EC38D16C37C13C3F913C35516C38C25C320 -:2008E0001A0EC37B17C33918C37814C39E15C35B0FC3E80DC3DD25C5CDBB08CDBE08CDC182 -:20090000082A1501116C0219110000732372D52A1501116A0219D1732372D52A15011168CC -:200920000219D1732372D52A1501115D0219D173CD6B015C027DFE6ECA960DCDBB08CDC4D3 -:2009400008CDC708CDCA082A15011160021936322336002A150111620219AF7723772A15FA -:200960000111660219110000732372D52A150111640219D17323722A150111700019E5CDC1 -:20098000CD08D12A150111780019E5CDCD08D12A150111700019E5CDD008D17CB5CA4B0DEF -:2009A0002A150111700019E5CDD308D1CDD608217F00E52A150111700019E5CDD908D1D1C0 -:2009C0002A1501117E0219360A233600CD4D016002E52A1501117C0219D17323722A150131 -:2009E000115E0219AF772377210400E52A150111740019E52A150111700019E5CDDC08D19F -:200A0000D1D1CD4D017C0211FFFF197C17D21C0A2A1501115C02193600C3290ACDDF08E55B -:200A20002A1501115C0219D173CD6B015C027DB7C2E80A2A1501117E0219E57E23666FE501 -:200A4000CD4D016002E5CD4D017C02D1CDFA0219D119EBE17323722A150111760019E57EE7 -:200A600023666F110C0019EBE17323722A150111740019E5CDD008D17CB5CACD0A21210027 -:200A8000E52A150111700019E5CDD908D1D1217F00E52A150111740019E5CDD908D1D121A9 -:200AA0000400E52A150111700019E52A150111740019E5CDDC08D1D1D1CD4D016002E52A1B -:200AC0001501117C0219D1732372C3E50A2A150111700019E5CDE208D12A1501115E0219BC -:200AE0003601233600C3120D2A1501117C0219E57E23666F2B2B2BEBE1732372CD6B015C57 -:200B0000027DFE35C2A70B2A150111760019E57E23666F110C0019EBE17323722A15011119 -:200B2000740019E5CDD008D17CB5CAA40B2A150111760019E57E23666F110C0019EBE17373 -:200B400023722A150111740019E5CDD008D17CB5C22D0B2A150111760019E57E23666F1150 -:200B6000F4FF19EBE1732372212100E52A150111700019E5CDD908D1D1217F00E52A15019A -:200B800011740019E5CDD908D1D1210400E52A150111700019E52A150111740019E5CDDC4D -:200BA00008D1D1D1C3B20CCD6B015C027DFE30C2F00BCD4D01640211F6FF197C17D2ED0B3D -:200BC0002A1501116402195E235613722B732A150111660219E57E23666FE5CD4D016402B8 -:200BE000110A00CD3F02D119EBE1732372C3B20CCD6B015C027DFE20CA0D0CFE37CA4E0C1F -:200C0000FE39CA5F0CFE38CA700CC3A60C212100E52A150111700019E5CDD908D1D12A1502 -:200C200001115E021936012336002A1501117E021936102336272A150111660219E57E2391 -:200C4000666F11CEFF19EBE1732372C3B20C2A1501117600195E23561B722B73C3B20C2AE6 -:200C60001501117600195E235613722B73C3B20C2A1501117400195E235613722B73CD5C42 -:200C80000174110400EBCD0F027CB5C2A30C2A150111740019E57E23666F2B2B2B2BEBE1AE -:200CA000732372C3B20C2A1501115C02193620C3B20CCD6B015C027DFE20CDA301E52A1545 -:200CC0000111740019E5CDD008D1D17CA2677DA36F7CB5CA120D212100E52A150111700033 -:200CE00019E5CDD908D1D1217F00E52A150111740019E5CDD908D1D1210400E52A150111B3 -:200D0000700019E52A150111740019E5CDDC08D1D1D1CD4D015E027CB5CADD09CDE5082147 -:200D20000400E52A150111700019E52A150111780019E5CDDC08D1D1D12A1501117800193E -:200D4000E5CDCD08D1CDE808C38F09CDEB08211700E5210000E5CDEE08D1D121A50DE5CD56 -:200D6000F108D1CDDF08E52A1501115C0219D173CD6B015C027DFE64CDA301E5CD6B015CA3 -:200D8000027DFE6ECDA301D17CA2677DA36F7CB5C2630DC33009210F00E5210400E5CDF4D3 -:200DA00008D1D1C1C970726F646F6C76696D203F00C3BA0DC30126C3DD25C521000039F973 -:200DC000444D210400096E7DFE0AC2D50D210D00E5CDB40DD1210400096E2600E52104007F -:200DE000E5CDB70DD1D1C1C9C3EE0DC30126C521000039F9444DCD9001046E7DB7CA180E0C -:200E0000210400095E235613722B731BEB6E2600E5CDEB0DD1C3F60DC1C9C3200EC3DD258F -:200E2000C521FBFF39F9444D21020009AF7723772104000936006069AF772377210200E52E -:200E4000CD1D0ED17CB5CA570E210300E5CD1D0ED1EB210400097360695E235613722B7348 -:200E600021FBFF197C17CDA901E5210400096E7DB7CD9D01D17CA2677DA36F7CB5C23C0EF2 -:200E8000210200095E235613722B731BD5CD4D017C02D1CDFA01CDA901E5210400096E7D95 -:200EA000B7CD9D01D17CA2677DA36F7CB5C2360E2A1501117C0219E57E23666FE5CD90016E -:200EC00002D1CDFA0219EBE1732372210400096E2600C3D50EEB21050039F9EBC1C9C3E4C2 -:200EE0000EC33026C521EF0EE5CDE10ED1C1C96E617E6E656D203F00C3010FC3AA1FC35886 -:200F000026C521FEFF39F9444DCDFE0EE5CDFB0ED1EB6069732372CD900106E5CD9001003D -:200F2000110700EBCD0F022929EBE1732372CD90010623233605233600EB21020039F9EB41 -:200F4000C1C9C3480FC3E80DC521530FE5CD450FD1C1C91F1B36371B373100C3610FC3DD8F -:200F600025C521000039F9444D211B00E5210400E5CD5E0FD1D1213500E5210400E5CD5E2C -:200F80000FD1D1CD90010611200019E5210400E5CD5E0FD1D1CD90010411200019E5210471 -:200FA00000E5CD5E0FD1D1C1C9C3AF0FC35B0FC521000039F9444DCD900104110C00EBCD58 -:200FC000CB022323E5CD900104110C00EBCD0F0229111E0019E5CDAC0FD1D1C1C9C521FEE3 -:200FE000FF39F9444D6069AF772377CD9001001110FF197C17D25C10CD90010029E52A1593 -:2010000001117C0019D119E5CD900100110C00EBCD0F027CB5CD9D01CA4210CD90010011EF -:201020000C00EBCD0F0211F5FF197CB5CD9D01CA4210CD900100111BFF197C17CDAF01DA79 -:201040004810210100C34B10210000EBE173237260695E235613722B73C3EB0FEB21020075 -:2010600039F9EBC1C9C36E10C3A90FC3DD25C521FEFF39F9444D6069AF772377CD900100BB -:201080001110FF197C17D2D010CD90010029E52A1501117C0019D1197E23666F7CB5C2C469 -:2010A00010CD900100E5CD6810D1212100E5210400E5CD6B10D1D1212100E5210400E5CDAE -:2010C0006B10D1D160695E235613722B73C37C10EB21020039F9EBC1C9C3DF10C3DD25C5F0 -:2010E00021FEFF39F9444D6069AF772377CD90010829E52A150111380019D1197E23666F10 -:20110000E5CD900100D1196E7DFE43CA2011FE4CCA4511FE52CA6211FE44CA7F11C38F1185 -:20112000210600096E2600E5210400E5CDDC10D1D1210600096E2600E5210400E5CDDC1035 -:20114000D1D1C38F11210800E5210400E5CDDC10D1D1210800E5210400E5CDDC10D1D1C3E1 -:201160008F11211800E5210400E5CDDC10D1D1211800E5210400E5CDDC10D1D1C38F112145 -:201180001A00E5210400E5CDDC10D1D1C38F11CD90010829E52A150111380019D1197E23E7 -:2011A000666FE560695E235613722B731BE1196E7DFE45C2ED10EB21020039F9EBC1C9C338 -:2011C000CB11C35B0FC3E80DC3D910C521FEFF39F9444D210000E5210000E5CDC211D1D1AE -:2011E00021BB12E5CDC511D121D312E5CDC511D121E312E5CDC511D121F312E5CDC511D15B -:20120000210600E5210000E5CDC211D1D1210313E5CDC511D1210F00E5210000E5CDC2112F -:20122000D1D1210E13E5CDC511D1211B13E5CDC511D1212813E5CDC511D1213313E5CDC536 -:2012400011D1214113E5CDC511D1214D13E5CDC511D1216513E5CDC511D16069AF77237789 -:20126000CD90010011F9FF197C17D2B212CD90010029E52A1501116E0219D119AF772377D5 -:20128000CD900100110300CD3F022323E5213C00E5CDC211D1D1CD9001002929E5217F00EA -:2012A000E5CDC811D1D160695E235613722B73C36012EB21020039F9EBC1C92020202020B4 -:2012C000202074656B757D696A20206C757E7B696A0A006F7E6B69202020202020202020ED -:2012E000200A006C696E69692020202020202020200A0075726F77656E78202020202020AD -:20130000200A00736C656475607D61710A0075707261776C656E69653A0A0070726F626535 -:201320006C2D776E697A0A0037202D20776C65776F0A0038202D207772617D656E69650A4F -:201340000039202D2077707261776F0A0035202D20756E697E746F76656E69652066696781 -:201360007572790A0030202D207577656C697E656E69652075726F776E710A00C38513C32D -:201380005B0FC3CD1FC521FEFF39F9444DCD9001067E23666F110400EBCDCB02EB606973F3 -:2013A0002372CD90010029E52A1501116E0219D1195E235613722B73CD900100110300CD2F -:2013C0003F022323E5214600E5CD7F13D1D1CD90010029E52A1501116E0219D1197E23661D -:2013E0006FE521F413E5CD8213D1D1EB21020039F9EBC1C92533640A00C30514C35B0FC341 -:20140000E80DC3D910C5210700E5210000E5CDFC13D1D1215014E5CDFF13D1215A14E5CD7A -:20142000FF13D1216414E5CDFF13D1216E14E5CDFF13D1210700E5210000E5CDFC13D1D1D2 -:20144000CD5C0178E5217F00E5CD0214D1D1C1C920202020202020200A00202020202020A7 -:2014600020200A0020202020202020200A0020202020202020200A00C38414C3DD25C35BD0 -:201480000FC3CD1FC521FEFF39F9444DCD4D016202110A00EBCDCB02EB6069732372CD90B0 -:2014A0000100E5CD4D016402D1CD0502D2CC14210700E5210400E5CD7B14D1D1CD900100FB -:2014C000E52A150111640219D1732372CD4D01640211F6FF197C17D2FB14CD4D01640211D8 -:2014E0000500CD3F02113200CDFA0219E52A150111600219D1732372C307152A150111609A -:20150000021936032336002A150111660219E57E23666FE5CD4D017E0211E803CDCB02E5F6 -:20152000CD4D016402D119D119EBE1732372210100E5210700E5CD7E14D1D1CD4D016602EA -:20154000E5218B15E5CD8114D1D1210200E5210700E5CD7E14D1D1CD4D016202E5219115BB -:20156000E5CD8114D1D1210300E5210700E5CD7E14D1D1CD4D016402E5219715E5CD8114F1 -:20158000D1D1EB21020039F9EBC1C9253035640A00253033640A0020253032640A00C3A787 -:2015A00015C35B0FC3CD1FC5CD4D016602E5CD4D016C02D1CD0502D2ED15CD4D016602E5A3 -:2015C0002A1501116C0219D1732372CD4D016402E52A1501116A0219D1732372CD4D0162C8 -:2015E00002E52A150111680219D1732372210100E5211000E5CDA115D1D1CD4D016C02E5A7 -:20160000214316E5CDA415D1D1210200E5211000E5CDA115D1D1CD4D016802E5214916E531 -:20162000CDA415D1D1210300E5211000E5CDA115D1D1CD4D016A02E5214F16E5CDA415D110 -:20164000D1C1C9253035640A00253033640A00253032640A00C35E16C3A90FC3D910C52108 -:20166000000039F9444DCD90010423237E23666FE5CD5816D1CD9001047E23666FE52106B4 -:2016800000096E2600E5CD5B16D1D1C1C9C521F8FF39F9444D21060009AF772377CD900170 -:2016A0000C7E23666F29EB2A1501197E23666FEB21020009732372CD90010C23237E2366EF -:2016C0006FEB21040009732372CD900102110200EBCD0F02E5CD90010429E52A1501117C1C -:2016E0000019D1197E23666FD17CA2677DA36FEB6069732372210600095E235613722B73A6 -:20170000210400095E235613722B73CD9001062B2B2B2B7CB5C2321721060009AF77237765 -:2017200021040009E57E23666F11080019EBE173237221020009E57E23666F110200EBCDC8 -:20174000CB02EBE1732372CD9001027CB5CDA301E5CD9001007CB5CDC101E17CA2677DA35D -:201760006F7CB5C2C916CD9001007CB5CD9D01C37217EB21080039F9EBC1C9C521FAFF390F -:20178000F9444D6069AF772377CD90010A7E23666F29EB2A1501197E23666FEB210200095E -:2017A000732372CD90010A23237E23666FEB21040009732372CD900102110200EBCD0F02A0 -:2017C0007CB5CAD917CD90010429E52A1501117C0019D119360123360060695E2356137229 -:2017E0002B73210400095E235613722B73CD9001002B2B2B2B7CB5C212186069AF77237773 -:2018000021040009E57E23666F11080019EBE173237221020009E57E23666F110200EBCDE7 -:20182000CB02EBE1732372CD9001027CB5C2B517EB21060039F9EBC1C9C34218C3A90FC3D4 -:20184000DD25C521F5FF39F9444D606911D8007323722102000973237221080009110100B7 -:2018600073237221060009732372210400093601233600CD90010411F5FF197C17D2F3187A -:2018800021060009E57E23666FE5CD900100E5CD900104D11929E52A1501117C0019D1196B -:2018A0007E23666F7CB5CD9D01D17CA2677DA36FEBE173237221080009E57E23666FE5CD1E -:2018C000900100E5CD900104D11929E52A1501117C0019D1197E23666FD17CA2677DA36F0D -:2018E000EBE1732372210400095E235613722B73C37318CD9001067CB5CA8619CD90010042 -:20190000E5CD900102D1CDE501CA8319CD90010223E5CD3C18D1210400093601233600CDB3 -:2019200090010411F5FF197C17D26E19CD900102E5CD900104D11929E52A1501117C001983 -:20194000D119AF772377212100E5210400E5CD3F18D1D1212100E5210400E5CD3F18D1D1EF -:20196000210400095E235613722B73C31F1921020009E57E23666F11F4FF19EBE1732372CC -:20198000C3FC18C3921ACD9001087CB5CABF192A1501116202195E235613722B732A1501C0 -:2019A00011660219E57E23666FE5CD4D016402110500CD3F02D119EBE1732372C3921ACDB6 -:2019C000900100E5CD900102D1CDE501CA801ACD90010223E5CD3C18D12104000936012367 -:2019E0003600CD90010411F5FF197C17D2801ACD900102E5CD900104D11929E52A15011142 -:201A00007C0019D119E5CD900100E5CD900104D11929E52A1501117C0019D1197E23666F7F -:201A2000EBE1732372210A00093621CD900100E5CD900104D11929E52A1501117C0019D1F3 -:201A4000197E23666F7CB5CA501A210A0009367F210A00096E2600E5210400E5CD3F18D1FD -:201A6000D1210A00096E2600E5210400E5CD3F18D1D1210400095E235613722B73C3E21932 -:201A800021020009E57E23666F11F4FF19EBE17323726069E57E23666F11F4FF19EBE1734E -:201AA0002372CD9001007C17CDAF01E5CD9001067CB5CDC101E17CA2677DA36F7CB5C259D9 -:201AC00018EB210B0039F9EBC1C9C3D01AC3DD25C521CE1DE52A150111380019D17323728D -:201AE00021DF1DE52A1501113A0019D173237221F01DE52A1501113C0019D17323722101B3 -:201B00001EE52A1501113E0019D173237221121EE52A150111400019D173237221231EE541 -:201B20002A150111420019D173237221341EE52A150111440019D173237221451EE52A1599 -:201B40000111460019D173237221561EE52A150111480019D173237221671EE52A1501115A -:201B60004A0019D173237221781EE52A1501114C0019D173237221891EE52A1501114E00B2 -:201B800019D1732372219A1EE52A150111500019D173237221AB1EE52A150111520019D1A6 -:201BA00073237221BC1EE52A150111540019D173237221CD1EE52A150111560019D173238E -:201BC0007221DE1EE52A150111580019D173237221EF1EE52A1501115A0019D17323722125 -:201BE000001FE52A1501115C0019D173237221111FE52A1501115E0019D173237221221F09 -:201C0000E52A150111600019D173237221331FE52A150111620019D173237221441FE52AAC -:201C2000150111640019D173237221551FE52A150111660019D173237221661FE52A150139 -:201C400011680019D173237221771FE52A1501116A0019D173237221881FE52A1501116C66 -:201C60000019D173237221991FE52A1501116E0019D17323722A150136172336002A1501DD -:201C8000232336112336032A15011104001936742336002A15011106001936232336022A9C -:201CA00015011108001936472336002A1501110A001936132336012A1501110C00193671D2 -:201CC0002336002A1501110E001936222336032A15011110001936632336002A15011112B0 -:201CE000001936322336012A15011114001936632336002A15011116001936322336012A2D -:201D000015011118001936362336002A1501111A001936312336022A1501111C001936366E -:201D20002336002A1501111E001936312336022A15011120001936272336002A150111224D -:201D4000001936312336012A15011124001936722336002A15011126001936322336022A9D -:201D600015011128001936332336002A1501112A001936332336002A1501112C00193633E4 -:201D80002336002A1501112E001936332336002A150111300019360F2336002A15011132D5 -:201DA000001936222336222A150111340019360F2336002A15011136001936222336222167 -:201DC0000E00E5210400E5CDCD1AD1D1C1C9434343444C4C4C434545454545454545004387 -:201DE000444C43444C4343454545454545454500525243444C4C4C4343434545454545455C -:201E0000004343444C43444C43454545454545454500434343444C434545454545454545AA -:201E20004545004343444C4C43444C43454545454545450043444C43434345454545454583 -:201E400045454545005243444C43444C4C4343454545454545004343444C43434545454556 -:201E6000454545454545005243444C4C4343444C4C434545454545004343444C434345452F -:201E80004545454545454545005243444C4C4343444C4C43454545454500524343444C4CF7 -:201EA0004C4343454545454545450043444C4343444C4345454545454545450052434344FD -:201EC0004C4C4C4343454545454545450043444C4343444C434545454545454545004343DB -:201EE00043444C4C434545454545454545450043444C4343444C4C434545454545454500B8 -:201F00005243444C4C4343434545454545454545005243444C4C4343444C4345454545453C -:201F200045004343444C4C4343454545454545454545004343444C4C434345454545454581 -:201F4000454545004343444C4C4343454545454545454545004343444C4C43434545454561 -:201F600045454545450043434343454545454545454545454545005243444C43444C434441 -:201F80004C4345454545450043434343454545454545454545454545005243444C43444C19 -:201FA00043444C43454545454500C521000039F9444DCD9001047C17D2C51FCD900104CD2F -:201FC000FA02C3C91FCD900104C1C9C1C9C3D61FC30126C3F01FC521000039F9444D2AD1CC -:201FE0001FE521040009E5CDD31FD1D1C1C9C1C9C3FF1FC3E923C39124C3C024C32325C5B6 -:202000002159FF39F9444D21AB00095E23561313722B731B1BEB7E23666FEB21040009737F -:202020002372CD9001ABEB21A50009732372210400095E235613722B731BEB6EEB6069737D -:202040007BB7CADA2360696E7DFE25C2AB2321060009EB219C000973237221A3000936062E -:2020600023360021A000091E0073219E000973219F000973CD9001046E7DFE2DC28F20212B -:202080000400095E235613722B73219F000934CD9001046E7DFE30C29F2021A0000934CD75 -:2020A0009001046E2600E5CDF61FD17DB7CABC2021040009E5CDF91FD1C3BF20210000EB0E -:2020C00021A10009732372210400095E235613722B731BEB6EEB6069737BFE2EC2072121B8 -:2020E000040009E5CDF91FD1EB21A30009732372219E000934210400095E235613722B7354 -:202100001BEB6EEB60697360696E2600E5CDFC1FD17DFE44CA3821FE55CA7421FE58CA7DF8 -:2021200021FE4FCA8621FE43CACC21FE53CAFD21FE00CA7623C37C23CD9001A57E23666F53 -:202140007C17D27421219C00095E235613722B731BEB362DCD9001A5E5CD9001A57E23666A -:202160006FCDFA02EBE173237221A100095E23561B722B7321010009360AC38C2121010089 -:20218000093610C38C2121010009360821A10009E57E23666FE5210100096E2600E521A5A2 -:2021A00000095E23561313722B731B1BEB7E23666FE5219C0009E5CDF31FD1D1D1D1AF67A9 -:2021C000CDFA0219EBE1732372C37522219C00095E235613722B731BD521A500095E235699 -:2021E0001313722B731B1BEB7E23666FEBE17321A100095E23561B722B73C37522219E00ED -:20220000096E7DB7C2102221A3000936C823360021A500095E23561313722B731B1BEB7E80 -:2022200023666FEB21020009732372CD9001026E7DB7CA7522CD9001A37CB5CA7522219CD4 -:2022400000095E235613722B731BD5210200095E235613722B731BEB6EEBE17321A30009E5 -:202260005E23561B722B7321A100095E23561B722B73C32B22CD90019C360021060009EB34 -:20228000219C0009732372219F00096E7DB7C2E32221A100095E23561B722B731321FFFF3F -:2022A000197C17DAE322CD9001ADE5CD9001AFE521A000096E7DB7CAC022213000C3C322A0 -:2022C000212000E521D122E5210600397E23666FE9D1D1D1237CB5C2E02221FFFFC3E023B0 -:2022E000C39122CD90019C6E7DB7CA2723CD9001ADE5CD9001AFE5219C00095E23561372B4 -:202300002B731BEB6E2600E5211523E5210600397E23666FE9D1D1D1237CB5C2242321FFB3 -:20232000FFC3E023C3E322219F00096E7DB7CA732321A100095E23561B722B731321FFFF46 -:20234000197C17DA7323CD9001ADE5CD9001AFE5212000E5216123E5210600397E23666FF9 -:20236000E9D1D1D1237CB5C2702321FFFFC3E023C33123C3A823210000C3E023CD9001ADDC -:20238000E5CD9001AFE560696E2600E5219923E5210600397E23666FE9D1D1D1237CB5C21A -:2023A000A82321FFFFC3E023C3D723CD9001ADE5CD9001AFE560696E2600E521C823E5217A -:2023C0000600397E23666FE9D1D1D1237CB5C2D72321FFFFC3E023C32E20210000C3E023FF -:2023E000EB21A70039F9EBC1C9C3EF23C3E923C521FFFF39F9444DCD900107E5CD90010987 -:20240000D1CDEC01D23D24CD9001055E235613722B731BD5CD90010711F6FF19DA2A24CD38 -:2024200090010711300019C33224CD90010711370019EBE1732101002600C38824CD900177 -:2024400009E5CD900107E5CD900109D1CD8902E5CD900105E5CDEC23D1D1D1EB606973CD44 -:20246000900109E5CD900107E5CD900109D1CD2902E5CD900105E5CDEC23D1D1D160696EB0 -:202480002600232600C38824EB21010039F9EBC1C9C521000039F9444D210400096E26003F -:2024A00011D0FF197C17CDAF01DABC24210400096E260011C6FF197C17CDA901C1C9C1C98A -:2024C000C3C624C39124C521FEFF39F9444D6069AF772377CD9001067E23666F6E2600E555 -:2024E000CDC324D17DB7CA1325CD900100110A00CD3F02E5CD9001065E235613722B731B3C -:20250000EB6ED1AF671911D0FF19EB6069732372C3D424CD900100C31A25EB21020039F952 -:20252000EBC1C9C32925C35D25C521000039F9444D210400096E2600E5CD2625D17CB5CA9C -:202540005025210400096E260011E0FF19C35725210400096E26002600C1C9C1C9C521001A -:202560000039F9444D210400096E2600119FFF197C17CDAF01DA8825210400096E260011A4 -:2025800085FF197C17CDA901C1C9C1C9CD37032A54067CB5C8C5444D2A5206EB2A5006CDEC -:2025A000DD02DABB253E023CEAAF25EDB0C1C97E1223130B78B1C2AF25C1C90B09EB09EB14 -:2025C000033E023CEACB25EDB8C1C97E122B1B0B78B1C2CB25C1C97CBAC07DBBC9CD37032F -:2025E000C52A01002B2B2B3A50064787805F160019E52A5206444D21FC25E3E96F2600C1A2 -:20260000C9CD0A03C50E02FE0AC215261E0DCD05000E023E0A5FCD05000E0BCD0500B7C253 -:202620002426C1C90E01CD0500FE03CA2001C1C9C33626C3E80DCD0A03E5CD3326E1C521EC -:202640007856E50E0BCD0500E1232323B7CA4226224806224A06C1C92A4806EB3E48A3CAE7 -:202660006626EA6626372A4A067C17677D176F224A067A17677B176F2248067CE67F67C9BE -:20268000170011037400230247001301710022036300320163003201360031023600310287 -:2026A000270031017200320233003300330033000F0022220F002222CE1DDF1DF01D011E96 -:2026C000121E231E341E451E561E671E781E891E9A1EAB1EBC1ECD1EDE1EEF1E001F111F00 -:2026E000221F331F441F551F661F771F881F991F0400110004001D000400050001000000B6 -:202700000000000000000000000000000000000000000100010000000000000000000000B7 -:20272000000000000000000000000100010000000000000000000000000000000000000097 -:20274000000001000100000000000000000000000000000000000000000001000100000075 -:20276000000000000000000000000000000000000000010001000000000000000000000057 -:20278000000000000000000000000100010000000000000000000000000000000000000037 -:2027A000000001000100000000000000000000000000000000000000000001000100000015 -:2027C0000000000000000000000000000000000000000100010000000000000000000000F7 -:2027E0000000000000000000000001000100000000000000000000000000000000000000D7 -:202800000000010001000000000000000000000000000000000000000000010001000000B4 -:20282000000000000000000000000000000000000000010001000000000000000000000096 -:20284000000000000000000000000100010000000000000000000000000000000000000076 -:20286000000001000100000000000000000000000000000000000000000001000100000054 -:20288000000000000000000000000000000000000000010001000000000000000000010035 -:2028A000010001000000000000000100010000000000000000000000010000000000000013 -:2028C0000000010001000100010001000100010001000100010001000100010000000000EB -:2028E000320000000000CFFF0000000000000000010001000000010000000000FFFF700067 -:10290000310028C33200CD006A00CD006A000E01FC -:00000001FF diff --git a/hex/type.hex b/hex/type.hex deleted file mode 100644 index 8a40c15..0000000 --- a/hex/type.hex +++ /dev/null @@ -1,34 +0,0 @@ -:020000040000FA -:20010000213601F9110000D5E9726F444F5320545950452046494C45205574696C69747942 -:20012000284329204952494D532C204D6F73636F772031393835CD59020E31116503CD051A -:20014000003D3D3260032180002263037E326203CDD202DA6E02FE20CA5001CDD202DAB7FC -:2001600001FE20C25B01CDD202DAB701FE20CA6601FE50CA9F01FE44C280013E01C39101EF -:20018000FE43C28A013E02C39101FE46C269023E03325F03CDD202DAB701FE20CA9401FE48 -:2001A00050C269023EFF325E03CDE902DAB7017DB7CAB7013260030E0F115C00CD0500FE03 -:2001C000FFCA6E022100012263033A6003326203CD2F03D8FE1AC83261035FCD84023A616E -:2001E00003FE0AC2D0013A5D03B7CA3602CDC502B7CAED01FE03CA7302FE20CAD001FE1004 -:20020000C21B020E31116903CD0500EEFF326F030E31116D03CD0500C3ED01FE0DC22C02A2 -:200220003EFF325E03AF325D03C3CA01AF325D03325E03C3D001CDC502B7CA45023EFF32EC -:200240005D03C3ED013A5E03B7CAD0013A62033D326203C2D001C33D020E0CCD0500FE2688 -:20026000DAD102FE30D2D102C91E00C375021E01C375021E02217103160019195E23560EA2 -:2002800009C305003A5F03B7CACC02FE01CAC7027BE67FFE20D2CC02FE0DCACC02FE0ACAFD -:2002A000CC02FE09CACC02FE0ECACC02FE0FCACC023A5F03FE03C8D51E5ECDCC02D17BF6F5 -:2002C000405FC3CC021EFF0E06C305000E02C30500763A6203B7C2DB023FC93D3262032AAC -:2002E0006303237E226303B7C90E0ACDD202210000D2F602B7C9FE20C8CD1103D8B93FD85C -:20030000545D6F260079CD2203E5CDD202E1C3F102DE30D8FE0ADA1E03DE07FE0AD8FE1053 -:200320003FC9B7C81FD2290319EB29EBC322032A63031100FF197CB5CC4503D82A63037E35 -:2003400023226303C91180000E1ACD0500115C000E14CD05001F218000226303C90000002C -:2003600000000000001C0000003800000038FF000077030E0418046F7B69626B61206B6FCF -:200380006D616E646E6F6A207374726F6B692E206973706F6C787A756A74650D0A54595087 -:2003A000452055464E205357495443482020200920696C690D0A545950452055464E205361 -:2003C00057495443482050200920696C690D0A545950452055464E205357495443482050E3 -:2003E000230D0A097320706572656B6C607E6174656C656D205357495443483A094E4F205C -:2004000020204420202043202020460D0A246E65742066616A6C61240D0A54595045207062 -:2004200072657277616E61241A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A38 -:200440001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A5C -:200460001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A3C -:20048000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5BC -:2004A000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E59C -:2004C000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E57C -:2004E000E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E55C -:00000001FF diff --git a/hex/wm.hex b/hex/wm.hex deleted file mode 100644 index c30ded3..0000000 --- a/hex/wm.hex +++ /dev/null @@ -1,322 +0,0 @@ -:020000040000FA -:20010000C36902C3600220434F5059524947485420284329203139373820204D4943524F4C -:2001200050524F20494E5445524E4154494F4E414C20434F52504F524154494F4E20202006 -:200140002020200D0A000D4D6963726F50726F20574F52444D41535445522072656C65619F -:20016000736520312E3037412073657269616C202320574D38383733554E2020200D0A00E5 -:200180003E1BCDEF013E36CDEF013E31CDEF01C90000000000003E1BCDEF013E35CDEF01DD -:2001A0003E2085CDEF013E2084CDEF01C900000000000000000000B82917400000000000FF -:2001C00000010101000000000000000000000000000000000000000000000000000000001C -:2001E000000000000000000000000000C34F02C39225210000228326C5D5E5CD80013AC1BD -:2002000001CD4F02E1D1C1C92A8F26AF32A126D5EB2A8326CD9F1FEBD1C8228326C5D5E510 -:20022000CD96013AC201CD4F02E1D1C1C34E23E52A832625CD0B02E1C9F53ABB01CD9B25BF -:200240003ABC01B7C49B253AC301CD4F02F1C93C3DC8F5CD4E23AF003DC25802F1C3500214 -:2002600031B6293EFFCD7402FF31B629AFCD7402CDD91F00324C2721000039226027114629 -:2002800001CD0E23110601CD0E232A0100113000197E23B7C29F027E3CCAB2022B7E23FE07 -:2002A00002C2AF027EFE64D2AF02FE01D2B2023EFFFEAF324B273ABD01B7C2C70221FDFFFC -:2002C000463EA977AE703C214927773A0300E603FE02D2D70236FFCD01192AB701EB21310C -:2002E000273E04732372233DC2E302AF1213EB2239272A3927223B27223D27223F272241C6 -:20030000271180260EB1AF12130DC20703325B00326800326B00327D002A06007DFE06CAA5 -:2003200026037CD607672B2243273AB801C60FBCDA4503CDE71F4E4F5420454E4F554748CD -:20034000204D454D007CB71F1F1F3C3CE63C47322B2707322E2778FE08D25E033E083230C2 -:20036000277CFE64210004222627DA6E03292228273E08322C27DA7A0387322D27215D0052 -:200380007E2BFE20C29703CDE71F4E4F2046494C45204E414D45007ECD52207711AB26D55E -:2003A000011000CD0C1F7EE1B7CAB003CD5220773A5C00BECABC033EFF321C277E11D126D6 -:2003C00012213B04010B0013CD0C1F3A1C27B7CAFD0311AB26CDF41FCAFD03CDE71F4649A8 -:2003E0004C4520455849535453204F4E2044455354494E4154494F4E2044534B00115C00DE -:20040000CDF41F3EFFCA0E04325B00C32104321D27CD06230A4E45572046494C450D0A0AAD -:200420000011B426D5CD061F11AB26CD2820D1214304CD091FCD4D1CC3B904574D424143C5 -:200440004B5550242424CD6804CD0520215C007E326C003AAB2677C3F202CD680411D12602 -:20046000CD28202A6027F9C9CD511D211D277EB7115C0021531FCC6D2011AB26216500C39B -:200480006D20CD9704C2B904CD052011AB26CD0820216C00C35304CD06230D0A41424F5247 -:2004A000542028592F4E293F2000CD3022CD4C06FE59C9CD9704CA63042A6027F921B904C3 -:2004C000E5CDFA23CD680621A8267EB7C2DE0435216C283600224D27CDF710CD68063E2A1D -:2004E000CDFC24CD3022224D277EB7C2F6043A6B28FE0ACA8D0747E523CDF122E1B7C21994 -:200500000578CD4C06FE48CA4604FE51CAB304FE4FCA8204FE45CA5A04CD4105C8CD06233C -:200520000D0A203F3F3F002A4D27EBCD0E23CDE324C3B904CD0912CDE324D1CD0E23C31D81 -:2005400005C5D5E5224F27CD6806213606E52A4F27CD0608CDF122224D27E5CD4906224F9F -:2005600027E1B7CA2706FE3ECA2706FE3BCA7C06FE11CA5419FE04CA2C06FE56CAF710CDD7 -:20058000B421CDF1222254272A5427CD4906225227224F27B7CA9007FE43CA2C07FE44CAB3 -:2005A0003207FE4BCA7807FE4CCA5407FE50CACD07FE54CA9A07E52A5827EB210200CD9F50 -:2005C0001FE1D2CA05FE42CA4707FE2FC2DD053EFF325E27CD4906224F27225227FE46CA00 -:2005E0003508FE4ECA3B08FE52CA4708FE53CA4108CD5506FE51CAAB06CD5F06C22706FE87 -:2006000041CAD408FE49CAD708FE5ACA0F08FE3CCA8906FE4DCA8906FE21CAF408FE57CA8F -:20062000201AFE59CADF19E1B7C3CC1F3A4C27B7CA2706C338003B3BCD6806CD2808C288D3 -:2006400005C34E057EB7C823C9CD4406FE61D8FE7BD0E6DFC9F53A5C27B7FA1D05F1C9C56D -:20066000473A5E27B778C1C9210002224527224727210000225E272D22A526C9224F27CD6A -:200680004406C8FE0DC8C37C06EBCD19072A5A27EBCD4105D8FE3ECA9E06B7C21D057AB365 -:2006A000C81B7AB3C8CDD623C39106CD4906224F27225227FE50CA5B0AFE58CADA06F5CDB4 -:2006C0001A08F1FE4CCA2E0AFE54CA3A0AFE4BCA470AFE47CA4E0AC31D05CD19072A4F271E -:2006E000E52A5427E52A5827E5CDB91E2A3327CD4105DAF806C20E07E1225827DC0608CDDA -:200700001A08C2E506E1225427E1224F27C9CD06232051583F00C3270521C4D639D8CD3490 -:2007200005535441434B204F56464C00CDA00DC3871ACDA00DFA3E07223F27C34107223D5E -:2007400027CD9B1DC38D1A3A5C272F21FFFF325C27225827CD040ECD871ACD2808C25407BB -:20076000C91101002A5827E5EBCD5107E1225827C93EFFFEAFC34E07CD040EC335072101B3 -:2007800000AF325C27AF321E27225827C9CD7E07CD5407210100AFCD8207CDE80DEBFAB36A -:2007A000072A3F27EBD2BB07CDBB073E7DCDFC24C3FC242A3D273E7BDCAD07CD0608CD9FEB -:2007C0001FC81ACDFC2413CDD623C3BE072A5827E52A5C27E5CD28082AB90126002BE5C4CF -:2007E0005107E1CD9607E1225C27E1225827CD1A08CDB51CC03A5C27B7213F27F2020821E9 -:200800003B27CDFB1EC0E5210000CD8107E1C92100A0E3E32B7CB5C21208E52A58277CB54D -:20082000CA24082B225827E1E52A58273A1E27B4B5E1C3D623CDB50CC34A08CD960CC34AE3 -:2008400008CDEB0CC34A08CDA80CD21A08CD5F06C25E08CD06232023232000C32705CD7040 -:2008600008CD0608E1B737C3CC1FCD1907CD70082A4F27CD4906224F27FE3CCA6A08FE4DD1 -:20088000CA6A08FE41CACE08FE46CACE08FE49CACE08FE4ECACE08FE52CACB08FE53CACBB3 -:2008A00008FE57CACE08FE59CACE08FE3BCC7C06CA7008FE51C2C308CD4906224F27FE4CA1 -:2008C000CACE08FE3EC8B7C8C37008CD1A09CD1A09C37008CD61072A52277EB7CACE0ACD23 -:2008E0001309CD1B0C3A6227B71143013E02CC230CC31A083A5827F5CD0608F1E67FCDACA1 -:200900000BFE1AC0CD0623205455524B4559200D0A00C9E52A5227C31E09E52A4F27C5F549 -:20092000116327D50EFFCD4406FE0EC23B093E0D0C13123E0A0C1312C32609FE19C2450903 -:200940003E1BC33509CD5B09C22609326227224F27AF12D1791213F1C1E1C90C1312FE1AF3 -:20096000C8FE1BC8B7C9C5D5E5D5AF0E1012130DC26D09D1D52A4F27CDF1223A4B27B7C278 -:200980009A09D5224F27019F01114F27CD05002A4F27D1FAAC0912C3AC09237E2BFE3AC2DD -:2009A000AC09CD120ACAAC09D6401223130E08CDF409FE2EF5E521F009C4091FE1F10E03ED -:2009C000CCF309D1131A1BFE20CADB09CDF122CD4406224F27CD5E09CACC1FCD3405494E55 -:2009E00056414C49442046494C45204E414D45004C494223CD120ACA070A12130DC2F40957 -:200A0000CD120AC2000AC9F53E2012130DC2080AF1C97ECD1D0AC823CD4C06B7C9FE2EC855 -:200A2000FE3AC8FE2AC8FE3FC8FE20D0BFC9CD430ACD1309213527C31E0C213327CD911FE6 -:200A4000C3BE07CD5F06C02A3327223527C9213327CDFB1ECD951FEBC3290CCD430A21351C -:200A600027CD680CCD040EEB2A3F27EBCD851F213527CD820ACDB91ECD8D1ACD2808C25E4D -:200A80000AC9CD8D0CC8CD680CCDA10AEB2A3F27EBCD3F0CEB223F27EBCD9B1D05C2860AE4 -:200AA000C9C5D5E5213327CDFB1E2A3127EB2A4327CD7C1FCD711F0911800DCD9F1FDACCEF -:200AC0001FCD3405514255462046554C4C00CD0608CD650CCDBE18F5DC850BF1DAD40ACDDD -:200AE000F024CDD623FE1AC8FE1BC821D40AE5FE1FCAF90AFE7FC2060BCD140CCDFC242241 -:200B00003D27CD9B1DC9FE20D2AC0BFE19C2120B3E1BFE05CAE324FE15CA210BFE18C23048 -:200B20000BCDE324CD140CFE0AC8223D27C3240BFE08C2490B3A8426B7C8CD140CFE0AC865 -:200B4000FE0DC8CDB90BC3FF0AFE1CC27D0B3A8426B7C8CD140CFE0DC8FE0AC8F5CD430BFE -:200B6000F1FE09CA4E0BFE20CA4E0B3A8426B7C8CD140CCDD70ED0CD430BC36B0BFE12C221 -:200B80009D0BCDE3242A3D272BCDEB0BDA950B7EFE0AC2880B23EB2A3D27C3BE07FE0DC217 -:200BA000AC0B3E0DCDAC0B3E0ACDFC24F5CD550CCD951FF17723C3FF0AFE09C2D60BEB2AC0 -:200BC000A72546EB04C805C8CDE00B05C2C80BEB2B22A725EBC9FE1BCAE00BFE20DCE00BC2 -:200BE000CD2F023E20CD6725C32F02EB2A3B27CD9F1FEBD0EB2A3D27CD7B1FE5CDC11C2AF6 -:200C00003D27D1F519F1C92A3D272BD5CDEB0BD1D87EB7C9CD070CD03333C9213D27116307 -:200C2000271A134F0600C32C0C213D27CD921DCD8D0CC8CD680CCD3F0C05C2330CB7C9E51D -:200C4000CD951F1AE67F7713230DC2430CEBE37323722BD1C9D52A3D27EB2A3F27CD9F1FC5 -:200C6000D1213D27D8213D27C5D5E5CDFB1E78B7C2CC1FCD951E7AB7C24C1ECD9E1AD26BE1 -:200C80000CCD34054D454D2046554C4C00CD561F040C0DC005C9CDBD0CD0CD871AD2960CDB -:200CA0003A5C27CD4B0737C9CDF30CD0CD871AD2A80CC3A00CCDBD0CD0CDAE1AD8CD13099D -:200CC0003A5C27B7FAD80C213F27CD240D2A3F27D8CD510DD8C3E50E213B27CD240D2A3D34 -:200CE00027D8CD390DCD790DC3D40CCDF30CD0CDAE1AD8CDBD0C3A6327CD1A09D8473A5CE4 -:200D000027B778FA120D2A3D27CD3C0D223D27C31B0C2A3F27CD4A0D223F27CD1B0CCD361D -:200D20000DC3E50ECDFB1E031B1A13C5477990C14F78DE0047C92A3D273A6327E5677D9485 -:200D4000E16F7CDE0067C93A6327856F7CCE0067C91AB7C8D5CD7F0EDA770D050DE5131A3D -:200D6000B7CA760DBE23CA5E0D2BCDAB0E23CA5E0DE1D1C3510DD1D1C91AB7C823D51ACD9A -:200D8000960EDA770D050DE513231AB7CA990DBECA880DCDAB0ECA880DE1D1B7C27D0DC963 -:200DA000C5D50100002A5827EB3A5C27B7FAC70D2A3F2719D2BD0D23444D21FFFFEB2A4154 -:200DC00027CDBD1FC3DF0D2A3D27CD7C1FDAD80DCD671F444D210000EB2A3B27CDAB1F09C3 -:200DE000C34C0E3EFFCD8207D52A5827E5CD040ED1D2530CF5CDAE1AD2FE0DF1D1C9F1EB31 -:200E0000225827D1C5D52A5827EB215C277AB3C2130E357EB7FA2F0ECDF81ECD951FCD7D2F -:200E20000EDA4B0E050D1B7AB3C21E0EC34B0E13213B27CDFB1E2A3D27CD4E23CD940EDA7C -:200E4000760E050D1B7AB3C2390E23EBAF321E27CDB51CC25C0E210000221E27225827EB99 -:200E60002256273A5C27B7E521FFFF19DACC1F2A1D2729C3CC1F1BEB3EFFC34D0E3E0A048B -:200E80000CC38A0EBEC4AB0E23C80DC2840E05C2840E37C93E0A040CC3A10E2BBEC4AB0EDB -:200EA000C80DC29B0E05C29B0E37C9FE13CAC70ED0FE01C8FE0FC0131A1BB7CAC50EBE3ED6 -:200EC0000FCAD00E13BFC97ECDD70E3E13D2C50EB7C9CDFA2237C8CD2922D8CD4C06FE41E4 -:200EE0003FD0FE5BC9C5D5E5EB2A3B27CD9F1FDC1D0F2A412723CD9F1FD41D0F2A3D272347 -:200F0000CD9F1FD20D0FEB113B27C3281E2A3F27CD9F1FDC1D0FEB113F27C3051ECD340580 -:200F20005055544355522045525200CDE318CD60162BA63600C2640F219E267E3600B7F539 -:200F4000C4F016F1C2570F2185267EB7F2540FAF77329B26CD74163A93262A952622932635 -:200F6000BDC458133A9B26B7C2A40FCD0215CDF2012A8526CDEA173E7BDCAD07110000CDF0 -:200F80005D10E6C0C25510CDFA17CA990FFE0AC2930F13CDFC24C37F0FEB2285263EFF32E3 -:200FA0009B261E003A9C26B7C239102A9126CD0B02CD6E18CD5D10E6E8C25510CD7F18DA19 -:200FC000D00FFE0ACAD40FCD2124CD4E23C3BC0FCD1F243A2B033A9D26B7C23910CD5D102E -:200FE000E6E8C25510D5EB2A8926CD9F1FEBD1D20610CD5D10E6D4C25510CD7F18DA0610C5 -:20100000CD2124C3E50F2A8326E5CD1F243A8326219726BECA1A10D23510218026BED23529 -:2010200010CD5D10E680E1C25510E53E0ACDFC241EFFC30A10E122972621FFFF229C261E03 -:2010400000CD080221A3267EB7C82336FF3E3CCD6725C308023E0ACDFC24C30802C5D5E559 -:20106000CD4E230106002AB725EB1B0DCA8410131A3CC27A1011B9251A3C3DCA8410CDBB97 -:2010800010C36B103AA226FE02DA92103A9F26CDBB103AA326F6F3A0473A8F26B778CAA38F -:2010A00010E6BF471F78D2B8103A8F26C604218026BE78DAB810E6C3C3CC1FFE7FC2C51040 -:2010C0003E20B047C9FE20DACC103E2021D610CD4A0D7EB047C900400080008000200008EF -:2010E00001400105302000008000000000000030018020000020082100FF22A526AF32A250 -:20110000263AB901D6023280261FB71F328526CD2514CD070CDA2511FE0DC22511CD7C18D9 -:20112000FE0ACC1612CD2B0FAF325F273A9F2621A026BEC238113EFF77212511E521A226BD -:2011400035CA4711F275113601CDB418329F26FE00C2751121A2267EF53600CD640FF121CF -:20116000A2263604FE04C26B113610FE10C272113640C3491121A4267E3600B7CAA811CD5B -:201180007C18DAA011FE0DCAA011FE09CAA011FE7FC296113E7EFE20D29D113E5EC3A211D6 -:2011A0003E20CD6725CD0802CD4E233A9F26FE08CA4814FE20D23A15F58721C511CD4A0D62 -:2011C000CD951FF1E945136D1289122C14161203133F12EC142A123A155419DD141612ABB7 -:2011E0001594150B151A15B61214142A127614BF1445130914C112CE147C13051260141AFB -:201200001546134814E1CD060821A6267EB7C8342A8026C30B02CD7413CD7518CD4C16F5B8 -:20122000CDE50EF1FE0DC0C31612CD140CCD5616CDE50ECD070CFE0DC0CD5813C32A12CDB2 -:201240007413CD6E18CD7F18DAE50ECDD70EDA4512CD4C16CD7F18DAE50ECD4C16CDFA2228 -:20126000CA54122BC3E50ECD5616CDE50ECD5813CD140CCDFA22CA6712CD5616CDE50ECD4D -:20128000140CCDD70EDA7C12C9CDF315CAAC12AF3290262A8326E5210000228326CD1618B8 -:2012A0002A5627CDE50E3A8326C32E1316003EF0329026C3F71216003A9026F6073CC3B036 -:2012C00012CDEC15F5218F268621802696DAF5123C218526BED2F5127E3DFAF512CD601601 -:2012E000CAF51221A2263601CD7C13CD2817CD0802F1C3C412F1572A8326E52E00CD7413B2 -:20130000C33213CDEC15CD58132A8326E5210000228326F56FCD16182A5627CDE50EF1471D -:20132000218526CDFC133A832690F22E13AF57210000228326CD6E18CDFE15CD1216CDE593 -:201340000EE1228326C9CDF315CA62132A8526CD7107210000228526F53A9C26B7CC001565 -:20136000F1C9D52A87262BE5CD7407D12A852619228526D13A9C26B7C0C325143AA226FEE3 -:2013800011D20114CD6016CA01143A85263DF2A213CD75183E01CDF612CD2817DC2514C318 -:2013A0008A13CD6916AF3282262A9726CD0B023A8326218D2686572A8B26CDA318CD7F189F -:2013C000DAEA13CDFC243A8326E521822686E1BADABD13CD7F18DAEA13CD6C24DAEA13FE80 -:2013E0000ACAEA13CDFC24C3D3132A8326229726CDD416CD59163A8D262193262F3C8677B2 -:20140000C9CDEC152F3CC30C14CDEC152185268677C33F14CD140C2A852623CD71072A8066 -:20142000262B228526F5AF329B26F1C9AF32A726CD75182A8526EB2A872619AFCD4E07CDE7 -:2014400025143EFF329E26C9CD140CCDFF0ACDC514CD5616CD070CFE0DCA4814C9CD4B14AF -:20146000CD140CCDFA22CA5D14CD4B14CD140CCDD70EDA6914C9CD7518CDFA22C28E14CDFC -:20148000EF14CD7518CDFA22CA7F14C3B214CDB214CD070CDA9B14CDFA22C0CD7518FE2003 -:2014A000CAA614FE09C0CDEF14C39B14CDEF14CD7518CDD70EDAAC14CDD20ED4EF14C9CD0F -:2014C0000608CD78071EFFF5AF329C26F1C9CDBF14CD0015CD7E07D5CD7807D1C9CD75185A -:2014E000FE0DC8FE0AC8CDEF14C3DD14CD7518CDC514223F27CD9B1DFE0DCAEC14FE0AC01B -:201500001EFFE5210000229C26E1C921A3267E2F77E521FFFF229926E1C9CD640FCDB418A4 -:20152000FE1AC23015CD0409CD0F08CDC5143E1AFE0DCAAB15FE0ACC2514F52A9126CD0B80 -:2015400002F1D51E00CD2124D1CDAC0B57CD7C18DA7915FE0DCA7915473AA326B778C2C7B9 -:2015600014BACA7315FE20DAEF147AFE20DCC714DAF214CDF214C383153A8326218F26BE7C -:20158000C2C714E5CD56182291262A8326228F26E1C31115CDEC15F5CDE2152A3D272B2BD6 -:2015A000CDE50EF13DC29715C30015CD4F163AA326B7CACB15CD7C18DAC215FE0DCAC215A3 -:2015C0001EFFCD1F24CDA20BC3C514CD7413CD6E18CD7F18DADF15FE0AC2D115C3E50ECDBC -:2015E000E50E3E0DCDAC0B3E0AC3AC0B21A2267E3600C921A026BEC9CD9A24CD4C163A831C -:2016000026BAD0CD7F18D8CD5D18D2F8152B03C3FE153A90263C573A8426BAD0CD7F18D88C -:20162000CD6C24DA4916FE0ACA4916FE0DCA4916CD6C24DA4716CD9A243A8426BAD24916C1 -:20164000CD7F18D8C326162B032B03C9FE0AC0E521852634E1C9FE0AC0E521852635E1C97B -:20166000219D267E2BA62BA6C93A9926B7C8C37416CD2514CD2817D22217CD5916F2A916CE -:20168000CD340546494C45204C494E45204C4F4E474552205448414E20454E5449524520A3 -:2016A0005343524E203F3F3F003A9B26218D26A6CA71163A8F2621802696DAC716C2711605 -:2016C0003A9026B7C27116CDD016CD0215C37416AF3282263E0ACDFC243A8226B7CAE81617 -:2016E00021972635F2E81634218D26BEDAD416C92185267EB7F20D17E5CD7C18E1D2051768 -:201700003600C30D17AF96CDF612C3F016CD2817D22217F53A8526B7CA8016F1CD0613C327 -:201720000D172199263600C9C5D5E52A8326E5AF328D263A85263DCD01183CDA8517210000 -:20174000002287262283262A8526CD16182291267A328D262A8326228F262A5627EB2A3D44 -:2017600027CD7C1F24224527CD8C17EB2A8326229526EBCD9E17228926CD9918228B263A54 -:201780009526CD0118E1228326C3CC1FCD6E18CD7F18D8FE0ACA4916CD9A24C38F17CD07C6 -:2017A00018DAC917CD7F18D8FE0ACCE317FE20DAC317E5218426343ABA013DBEE1D29E173F -:2017C0002B7E23CD9A24C39E17CD7F18D8CD6C24DA4916FE0ACADE17CD9A24C3C9172B0345 -:2017E000FE0AC0E521872634E1C9D5CDE30DF5EB2A3D27CD851FEBF1D1C978B1C87E230B0C -:20180000C93D328326B7F83A83263C3C573A802692D02F3C37C9CDEA173E7BDC97241600A5 -:20182000CDFA17CA5618CD9A24FE0AC220183A83265778B1CA56187E230BFE20DA5018E579 -:20184000218426343ABA013DBEE1D232182B7E23CD9A24C33218CD7C182A8326D8CD6C24CF -:20186000D0E52A83262C2602228326E137C9CDF81ECD951FC9CD7C18D03333C9CD6E187888 -:20188000B1C29518CD9918E5CD0B1CE1F5CD4E23CDA318F1D87E0B23C9D5EB2A3F27CD7B5F -:2018A0001FD1C9D5EBCDF81ECD951F1979934F789A47D1C9CDBE18D0CD2B0FC3B418C5D541 -:2018C000E53A4927B7C2DD18CDE318DACC1F16C915CAC118CD4E23CAD018CDE318D4222316 -:2018E000C3CC1F3A4927B7C03AFFF7214A27BEC83A4927B7C0CD2514CDF20121A92522A732 -:20190000253A4927B7C03AFFF7F51FF53E50D213193E2832BA01F11F3E18D21F193E0C327D -:20192000B901D6023280263E1532BB01F1324A2737C900574D202020202020484C50000020 -:201940000000000000000000000000000000000000000000CDF201CD251421321911F82626 -:20196000012100CD0C1F11F826CDF41FC2A2193E0132F82611F826CDF41FC2A219CD3405A0 -:20198000574D2E484C50204E4F5420464F554E44204F4E2044454641554C54204F522041E0 -:2019A0003A0011F82621E927CDA920DADE1911F82621E927CD8F1C21E927F57E23FE11CAAE -:2019C000CD19CDFC24F13DC2BA19C3A219CDB418FE0AC2DD19E5CDF201E1C3C519F1C911A8 -:2019E000F826CD6609CDF41FC2FD19CD340546494C45204E4F5420464F554E4400CDD6233C -:201A000011F82621E927CDA920DA1D1ACD8F1CF506004F11E927CD290CF1DAFD19C31A0814 -:201A2000CD2808CA1D0511F626AF121313CD6609110000213F27CDBC1ECD951FCD7C1FEB5A -:201A4000CD040E2A5627EBE501810009CD9F1F2BE3DA5E1A11F826CD1A21D1C3431ACD7B4A -:201A60001FC1EBCD2808CA741AE52A5627CD871AE1D2331A7BCDEB1B11F826CD3221CD0FD3 -:201A8000202A5627C3E50ECDD623CDE50ECD2808C8CDD6233A5C27B7FAC11CC34D1C3A5CAB -:201AA00027B737FC5E1BD0CDDD1AD0C35E1BCDBE1AD8CD911AD8CDBE1AD4911AB7C9C5D5F1 -:201AC000E53A5C27B7113B27FACE1A113F272A2F27EBCDFB1E6069CD9F1FC3CC1FC5D5E50F -:201AE000CD0C1BDACC1F215F273446212E27AF8605C2EF1A3DF6074F3A2D273D47CD0C1B02 -:201B000005CA081B0DC2FD1AB7C3CC1F2A3B27CD731DD8E52ACD26EB2A2027CD9F1FE111EC -:201B2000AB26D22B1BCD3521C3381BCD2F21EB2A202723222027EB0411800019223B27C998 -:201B4000C5D5E5218100224527214327CD491E2A4127CDE50ECD0C1BD2551BC3CC1FC5D547 -:201B6000E5CD7E1BDACC1F3A2D274705874F0DCD7E1B05CA7A1B0DC26F1BB7C3CC1F2A41A5 -:201B800027CDAA1CC2961B3AF52657CD3C0DE57ACDEB1BC39B1B1180FF19E5E3CD831DE3EA -:201BA000D2A51BE1C9E52A2227EBCDE31DCD9F1FE1D2BD1B115C00CD3C21C3E21BE52A2439 -:201BC00027EBCDE31DCD9F1FE111D126D2D51BCD3521C3E21BCD2F21E52A24272B222427FE -:201BE000E104CDAA1CB7E1224127C9C5D511E927D5470E82042B1B7E1223130D05C2F71B25 -:201C00003E1A12130DC2001CC3CC1FCDAA1CC8C5D5E5CD951E218000CD9F1FEB2A2827D2F2 -:201C2000291CCDDD1ADA1A1DEBEB214327CD0D1DC35C1CC5D5E5214327110078CD3D1DCD70 -:201C4000AA1CCA731C79B7C25C1CC3CC1FC5D5E5CDAA1CCA731C214327CDF31C2A4127CD1C -:201C6000761CD48F1CDA6B1C32F5262241270DC25F1CB7C3CC1FCDD62311D0261A13B73784 -:201C8000C4B020D0115B001A13B737C4A920C906807EE67F77FE1ACAA31C2305C2911C37B4 -:201CA0003E80C9CDC5203E8090C9E53A5B0021D026B637E1C93A5C27B73AAA26F4AA1CB7BD -:201CC000C9C5D5E53AAA26B737CAF01C115E1B213B27CDF61C2A3B27CDD6231180FF1911F6 -:201CE000AB26CDB020DAEF1C223B270DC2D81CB7C3CC1F11DD1AE52A2827D5CD951ECD9FBE -:201D00001FE1DCC4112A2627292424EBE1CD3D1DFE08DA181DD6044FB7C0CD34054D454D9D -:201D20002053484F52544147452C2054525920434C454152494E47205142554600CD491EF4 -:201D4000D5CD951EE1CDBD1FEB29DA4A1DEB7A4AC9CD331CCD401BCD331CD2541D213B27B1 -:201D6000CDFB1ECD951F79CDEB1B11AB26CD2F21C30F20E52A4527EB2A3D27CD7C1FEBE197 -:201D8000C39F1FE52A4727EB2A3F2719D1CD9F1FEBC9D5113D27CD9F1FD1C0C5D5E5F521A6 -:201DA0003B27CDF41D2ACD2619EB2A2027CD9F1FEBD2B71D222027213F27CDF41DCDE31D9A -:201DC000CD7C1FEB2A2227CD9F1FEBDAD11D222227EB2A2427CD9F1FEBDADF1D222427F18A -:201DE000C3CC1FD52AF326EB2A7E00CD7C1F11FF7F19D1C9CDFB1E6069295C1600D2011EA5 -:201E000014C9C5D5E5EBE5CD951FEBCD851FE1E5CD8F1FCD0C1FE32B2B73237223D17323B5 -:201E200072B7C3CC1FC5D5E5EB2323E5CD951FCD851FE323235E2356E3CD2E1FE3722B7354 -:201E4000D12B722B73B7C3CC1FC5D5E5EB213327CD9F1FDC861E214427CD9F1FD4861E2171 -:201E6000332723CD9F1F2BDA731ECDBC1ECDAC1EC3621E214127CD9F1FD2CC1FCDD81E2B84 -:201E80002B2B2BC3761ECDE71F505554484F4C452045525200C5E5110000213127CDFB1E53 -:201EA000EB09EBCDAC1ED29D1EE1C1C9D523232323114227CD9F1FD1C9213727C5D5E5CDE9 -:201EC000FB1ECD8F1FE37323722BE3CD0C1FE1E52323732372C3CC1FC5D5E5E52B2BCDFB39 -:201EE0001EE1E5CD911FEBE323722B73E3CD2E1FE12B722B73C3CC1F213F27D5E5CD911FFB -:201F0000CD851FE1D1C921531F010300CD561FCD9F1FC21C1F09EB09010000C9040CC325B5 -:201F20001F7E1223130DC2211F05C2211FC9CD561FCD9F1FC2411FCD711F09EB0901000093 -:201F4000C9040CC34A1F2B1B7E120DC2461F05C2461FC942414B78F6173CC0CD3405434F96 -:201F600050592045525200F5AF956F3E009C67F1C9F5AF914F3E009847F1C9EBD5EBCD67D2 -:201F80001FEB19D1C9E5CD7C1F444DE178B1C92B2B5E2356237E23666FC92B2BC3951FC5B2 -:201FA000477A94C2A81F7B9578C1C9CD9F1FDAB61F210000B7C9E5CD7C1FD137C9CD9F1FAD -:201FC000CAB11FDAB11FEBCD7C1F37C9E1D1C1C9D5118000CDD91F1AD1E3C54E23D5E5CD78 -:201FE0000500E1D1C1E3C9CDE324D1CD0E23CDE324C36304CDD01F0F3CE52123001936009D -:202000002B3600E1C911D1261B1B1A1313B7C8CDD01F103CC0CDE71F434C4F5345204552F0 -:20202000520011D126CD0820CDD01F131BCDC52013C3C520CD2820CDF91FCDD01F163CC032 -:20204000CDE71F4449524543544F52592046554C4C00D55F3A4B27B77BC26220CDD91F1E6C -:20206000D1C9D1B7C26C20CDD91F193CC9C5D5E5D521100019011000EBCD0C1F3600D12153 -:20208000190019EBE1E5CD091FE1D1C1CDD01F173CC03A4B27B7C0CDE71F52454E414D4578 -:2020A000204641494C55524500CDB420D43521C9CD3C21D8CD4E23AFCD6721DAC520CDD9BB -:2020C0001F14B73DC01BAF121337C9E5626B2B2B7EB7CC342036FFE1CD0A21C0F5E521D133 -:2020E00026CD9F1FE1CAF7203AD026B7D5CC2220D1F1CD0A21C0F5F1FE02C24020CD34051B -:202100004449534B2046554C4C00CD6521CDD91F15FE01C8FEFFC8FE02C9C5E5D5018000BF -:2021200011E927D5CD0C1FE1D1CD3221E1C1C9CDD623CDCB20C5010100C34021C501FFFF47 -:20214000D5E51B3EFF1221230019E5CD951F097CA53CCA5E21EBE1732372B7C3CC1FAF12EF -:2021600037E1C3CC1F3EFFC547E521220019CD951F7DE67F4F297C210C0019BECAA021E544 -:20218000F5212100197EB7C40F203600F1E177CDD01F0F3CC2A02178B737CAA921CD3A209D -:2021A0002120001971237EB077E1F5EBCDD91F1AEBF1C1C9115C27AF12CDF12223FE2BCA3B -:2021C000B921FE2DC2CD213EFF12C3B9212B11FFFFEB225A27EBCDF122FE2323CA0F222B61 -:2021E000CD2922110100D20F221B7ECD2922D20A2223E5626B19291929DA1522D6305F161E -:202200000019DA1522EBE1C3EA21EB225A27EBEB225827EBC9CD34054E554D4245522054FE -:202220004F4F204C4152474500FE303FD0FE3AC9C5D521A5267EF5AF77216C28E54F79FEB8 -:202240007FD2DA22D1D5CDBE18F5DCBE07F1DA3E22CDF024FE0DCADF22FE0ACAD522E521A1 -:202260003E22E3FE1FCA6D22FE7FC27422CDCD22C8C3FC24FE18CA7E22FE15C28322EB0E76 -:20228000003E05FE05CAE324FE08C29422CDCD22C8C3B90BFE1CC2B922CDCD22C847CDB996 -:2022A0000B78CDFA22CA9922CDCD22C847CDD70ED2CA22CDB90BC3A822FE12C2C422CDE36C -:2022C00024C3BE07FE03CAB30477230CC979B7C80D3C2B7EC9060DC3E1223E0DCDFC240697 -:2022E0000A326B28360078CDFC24E1F132A526D1C17ECDFA22C023C3F122FE09C8FE20C83E -:20230000FE0AC8FE0DC9E3F5CD1823F1E3C9F5EBE5CD1823E1EBF1C97EB7C8CDFC2423C379 -:202320001823E52AB7257EB7CA4023F53600237E3CC2372321B92522B725CD4E23F1E1C91B -:20234000E1CDB423E67FCD9C23CA4123B7C9E5CDC023CA95232AB5257EB7C28323CDB423FD -:20236000E67FC49C23CA4F2377237E3CC2722321B92522B5257EB7C28323CDC023C255230C -:20238000C391233E21CDFC243E07CD9B25AF329B26E1F601C92AB7257EB7E1C9FE16C0CDDF -:2023A000B423F5CD9B25F1FE1BC2B223CDB423CD9B25AFC93E06CDC723FE03C032A726C9F6 -:2023C0003E03CDC723B7C9C5D5E521CC1FE52A0100CD4A0D79E9F53AA526B7C2E323CD4ED0 -:2023E00023F1C9CDFA23C2EB23F1C9CD3405494E54455252555054454400CD4E23E521A745 -:20240000267E3600B7E1C8C5E521B92522B52522B7250E64AF77230DC215240DE1C1C93E66 -:202420000DFE0DCC3024CD6524D0CD3024C3FC24F51CCA3F241D0000001CFE09C262243A3A -:20244000A126FE0DCA6224CD4E233ABB01B7C43902C262243E20CD6524DA6224CD4E23C313 -:2024600054241DF1C9CD6C24D8C3FC24FE0DC8FE0AC8C5473A84264F78FE09C2832479F6BC -:20248000074F2FFE20D28E24FE1BCA8E240C0C3ABA010CB978C1C9CD9A24E5F5218426FE7E -:2024A00020DAB724343ABA01BECAAF24D2D12436022B34F1C39B24FE1BCAA424FE0ACACFA6 -:2024C00024FE0DCAD424FE09CADC2434C3A4242B34F1E1C9CD4E233600F1E1C97EF6077780 -:2024E000C3A424F53E0DCDFC243E0ACDFC24F1C9FE08C8FE7FC8FE1FC8FE1CC8F5E5FE1B68 -:20250000C205253E24FE7FC20C253E7EF5CD6C24D21B25CD06230D0A3E3E002AA725FE0D53 -:20252000C2292521A925C35B25FE09C24825237E3CC235252B36003E20CD6725343A8426FA -:20254000E607C23725C35B25FE20D25B25FE0ACA5B253E5ECD6725F1C640F522A725F1E1CA -:20256000FE09C46725F1C9F5CD9B25F1F5E5CD7425E1F1C9218426FE0ACA8625FE0DC28463 -:20258000253600C934C92B343AB9013DBED0352B34C9F5AF32A126F1C39E2532A126C54F7E -:2025A0003E09CDC723C1C9A925FF00000000000000000000FFB925B925000000000000000B -:2025C0000000000000000000000000000000000000000000000000000000000000000000FB -:2025E0000000000000000000000000000000000000000000000000000000000000000000DB -:202600000000000000000000000000000000000000000000000000000000000000FF0000BB -:2026200000000000000000000000000000000000000000000000000000000000000000009A -:2026400000000000000000000000000000000000000000000000000000000000000000007A -:2026600000000000000000000000000000000000000000000000000000000000000000005A -:20268000000000020000000000000000000000000000000000000000000000000000000038 -:2026A000000A00000000000000000000000000000000000000000000000000000000000010 -:2026C0000000000000000000000000000000000000000000000000000000000000000000FA -:2026E0000000000000000000000000000000000000000000000000000000000000000000DA -:202700000000000000000000000000000000000000000000000000000000000000000000B9 -:202720000000000000000004000800180810300018B829B829B829B829B929B929B929B932 -:2027400029B92905BA0A3E0132FF37FF000AAF32AB37C3F30AAF32A937C3F30A3E0132A9D7 -:20276000B429F30A3EFF32AA37C3F30AAF32AA37C3F30A3E0132AA37C3F30A3E01326937CA -:20278000C3F30AAF326937C3F30A3EFF327037CD5825AF3270377AB7C274043A7638FE20DF -:2027A000C07B3DF8CA7404FE10D274043C326F37AF676BC35D19CD58257AB7C274043A6AE8 -:2027C00037B7C87BB7CAD927FE0ADC74043A7638FE20C2D9277B32AD37CD7717CD1A04C389 -:2027E0009918CD080BC27404F53A6238FE08DAF627CDA4043E07215D38773A6A37B722BAF3 -:20280000370E03C4D019F1FE2CCAE227C93AA837B7C29804CD7B0B2AC1372BCDA247B7CA07 -:202820002828CD6548C3B6043D32A8372AC1377E2322C137FE21D22C28C9CD7B0BFE28C2DD -:202840007404CDDC0AFE27C27404CD080BC27404FE27C27404CDDC0AFE29C27404CDF30A97 -:202860003A6A37B7C03A6238FE06DA6F283E06116338213839477EB7C28C041A77231305A1 -:20288000C27B2870C9CDCB28CD7B0BFE2FC27404CD080BC4C328FE2FC27404CDF30ACDA8EB -:2028A0000C237EE6D0C28C04E57EF62477CDEE23E12B2255383E03324C38210000224D3817 -:2028C000C36D23F53E01326238F1C93A5E38B7C8C1C39E04CD080BC2F628F5B7CDA80CCDBC -:2028E0000529237EE664C2FC287EE603F68077F1FE2CCAD428C9CD7404C3F028F61077CD71 -:00000001FF diff --git a/img/Debug.jpg b/img/Debug.jpg new file mode 100644 index 0000000..96043c2 Binary files /dev/null and b/img/Debug.jpg differ diff --git a/IconBig.png b/img/IconBig.png similarity index 100% rename from IconBig.png rename to img/IconBig.png diff --git a/nanotime/nanotime.go b/nanotime/nanotime.go deleted file mode 100644 index ce0de8a..0000000 --- a/nanotime/nanotime.go +++ /dev/null @@ -1,18 +0,0 @@ -package nanotime - -import ( - "time" - _ "unsafe" // required to use //go:linkname -) - -//go:noescape -//go:linkname nanotime runtime.nanotime -func nanotime() int64 - -func Now() uint64 { - return uint64(nanotime()) -} - -func Since(t uint64) time.Duration { - return time.Duration(Now() - t) -} diff --git a/okemu b/okemu deleted file mode 100755 index 1f2de70..0000000 Binary files a/okemu and /dev/null differ diff --git a/okemu.log b/okemu.log deleted file mode 100644 index e69de29..0000000 diff --git a/okemu.prof b/okemu.prof deleted file mode 100644 index e126866..0000000 Binary files a/okemu.prof and /dev/null differ diff --git a/okemu.yml b/okemu.yml index c19f97d..bc009d2 100644 --- a/okemu.yml +++ b/okemu.yml @@ -1,16 +1,14 @@ logFile: okemu.log logLevel: info -monitorFile: rom/MON_r8_9c6c6546.bin -cpmFile: rom/CPM_r8_bc0695e4.bin -#monitorFile: rom/MON_r5.bin -#cpmFile: rom/CPM_r5.bin +monitorFile: rom/MON_r8_9c6c6546.mon +cpmFile: rom/CPM_r8_bc0695e4.cpm fdc: - autoLoad: true autoSave: true floppyFile: floppy/floppyB.okd - - autoLoad: true - autoSave: true - floppyFile: floppy/floppyC.okd + - autoLoad: false + autoSave: false + floppyFile: floppy/empty.okd debugger: enabled: true host: localhost diff --git a/rebuild.sh b/rebuild.sh deleted file mode 100755 index 84c7b84..0000000 --- a/rebuild.sh +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/bash - -echo "Build OkEmu" -export GOROOT=/home/roma/projects/go/1.25.7/ -export PATH=/home/roma/projects/go/1.25.7/bin/:$PATH - -version=$(git describe --tags HEAD) -#commit=$(git rev-parse HEAD) -timestamp=$(date +%Y-%m-%d' '%H:%M:%S) - -go build -ldflags "-X 'main.Version=$version' -X 'main.BuildTime=$timestamp'" . - -#echo "Copy to kubelogtst01" -#scp stash boykovra@kubelogtst01: diff --git a/rom/CPM_r5.bin b/rom/CPM_r5_7378e4f9.cpm similarity index 100% rename from rom/CPM_r5.bin rename to rom/CPM_r5_7378e4f9.cpm diff --git a/rom/CPM_r7_720k.bin b/rom/CPM_r7_720k.bin deleted file mode 100644 index 7b1c66f..0000000 Binary files a/rom/CPM_r7_720k.bin and /dev/null differ diff --git a/rom/CPM_r7_b89a7e16.bin b/rom/CPM_r7_b89a7e16.bin deleted file mode 100644 index ba16f63..0000000 Binary files a/rom/CPM_r7_b89a7e16.bin and /dev/null differ diff --git a/rom/CPM_r8_bc0695e4.bin b/rom/CPM_r8_bc0695e4.cpm similarity index 100% rename from rom/CPM_r8_bc0695e4.bin rename to rom/CPM_r8_bc0695e4.cpm diff --git a/rom/MON_r5.bin b/rom/MON_r5_587799bc.mon similarity index 100% rename from rom/MON_r5.bin rename to rom/MON_r5_587799bc.mon diff --git a/rom/MON_r6.bin b/rom/MON_r6.bin deleted file mode 100644 index c6b7a69..0000000 Binary files a/rom/MON_r6.bin and /dev/null differ diff --git a/rom/MON_r7_93bd95bd.bin b/rom/MON_r7_93bd95bd.bin deleted file mode 100644 index c43d5c7..0000000 Binary files a/rom/MON_r7_93bd95bd.bin and /dev/null differ diff --git a/rom/MON_r8_9c6c6546.bin b/rom/MON_r8_9c6c6546.mon similarity index 100% rename from rom/MON_r8_9c6c6546.bin rename to rom/MON_r8_9c6c6546.mon diff --git a/rom/Ocean_240_ROM_C000_CPM_with_floppy_b89a7e16.bin b/rom/Ocean_240_ROM_C000_CPM_with_floppy_b89a7e16.bin deleted file mode 100644 index ba16f63..0000000 Binary files a/rom/Ocean_240_ROM_C000_CPM_with_floppy_b89a7e16.bin and /dev/null differ diff --git a/rom/Ocean_240_ROM_E000_Monitor_587799bc.bin b/rom/Ocean_240_ROM_E000_Monitor_587799bc.bin deleted file mode 100644 index 8b7be78..0000000 Binary files a/rom/Ocean_240_ROM_E000_Monitor_587799bc.bin and /dev/null differ diff --git a/rom/README.md b/rom/README.md new file mode 100644 index 0000000..fd2c665 --- /dev/null +++ b/rom/README.md @@ -0,0 +1,3 @@ +# Эмулятор персонального компьютера Океан-240.2 + +Двоичные образы операционной системы и монитора, прошиваемые в ПЗУ компьютера. diff --git a/Icon.png b/src/Icon.png similarity index 100% rename from Icon.png rename to src/Icon.png diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000..8d6d713 --- /dev/null +++ b/src/README.md @@ -0,0 +1,7 @@ +# Эмулятор персонального компьютера Океан-240.2# + +Исходники эмулятора на языке [GO](https://go.dev/). + +Для графического интерфейса используется библиотека [Fyne](https://fyne.io/). Для сборки исходников, нужно её установить по инструкции к ней. + +Для вычисления выражений, используется моя модификация библиотеки [gval](github.com/PaesslerAG/gval), исходные коды в папке [gval](gval/). diff --git a/config/config.go b/src/config/config.go similarity index 100% rename from config/config.go rename to src/config/config.go diff --git a/debug/breakpoint/breakpoint.go b/src/debug/breakpoint/breakpoint.go similarity index 60% rename from debug/breakpoint/breakpoint.go rename to src/debug/breakpoint/breakpoint.go index 7381a0b..de22efb 100644 --- a/debug/breakpoint/breakpoint.go +++ b/src/debug/breakpoint/breakpoint.go @@ -168,6 +168,34 @@ func (b *Breakpoint) SetType(bpType int) { b.bpType = bpType } +func cvtToUint16(v interface{}) (uint16, error) { + switch value := v.(type) { + case int: + return uint16(value), nil + case int8: + return uint16(value), nil + case int16: + return uint16(value), nil + case int32: + return uint16(value), nil + case int64: + return uint16(value), nil + case uint: + return uint16(value), nil + case uint8: + return uint16(value), nil + case uint16: + return value, nil + case uint32: + return uint16(value), nil + case uint64: + return uint16(value), nil + default: + // log.Errorf("Unknown type of %v", value) + return 0, fmt.Errorf("error: unsupported type of %v", value) + } +} + func getUint16(name string, ctx map[string]interface{}) uint16 { if v, ok := ctx[name]; ok { if v == nil { @@ -178,32 +206,13 @@ func getUint16(name string, ctx map[string]interface{}) uint16 { return v } // for less frequent cases - switch value := v.(type) { - case int: - return uint16(value) - case int8: - return uint16(value) - case int16: - return uint16(value) - case int32: - return uint16(value) - case int64: - return uint16(value) - case uint: - return uint16(value) - case uint8: - return uint16(value) - case uint32: - return uint16(value) - case uint64: - return uint16(value) - default: - log.Errorf("Unknown type %v for variable %s", value, name) - return 0 + rv, e := cvtToUint16(v) + if e != nil { + log.Errorf("error: variable %s have unsupported type: %v", name, v) } - } else { - log.Errorf("Variable %s not found in context!", name) + return rv } + log.Errorf("Variable %s not found in context!", name) return 0 } @@ -225,6 +234,7 @@ func (b *Breakpoint) Hit(parameters map[string]interface{}) bool { return sp >= b.addr } bc := context.WithValue(context.Background(), "MEM", parameters["MEM"]) + bc = context.WithValue(bc, "IO", parameters["IO"]) value, err := b.eval.EvalBool(bc, parameters) if err != nil { fmt.Println(err) @@ -236,7 +246,12 @@ var language gval.Language func init() { language = gval.NewLanguage(gval.Base(), gval.Arithmetic(), gval.Bitmask(), gval.PropositionalLogic(), - gval.Function("PEEKW", cfPeekW), + gval.Function("PEEKW", CfPeekW), + gval.Function("PEEK", CfPeek), + gval.Function("BYTE", CfByte), + gval.Function("WORD", CfWord), + gval.Function("ABS", CfAbs), + gval.Function("IN", CfIn), ) } @@ -259,20 +274,96 @@ func (b *Breakpoint) MBank() uint8 { return b.mBank } -func cfPeekW(ctx context.Context, arguments ...interface{}) (interface{}, error) { +func CfPeekW(ctx context.Context, arguments ...interface{}) (uint16, error) { if len(arguments) != 1 { - return nil, fmt.Errorf("expected 1 argument") + return 0, fmt.Errorf("expected 1 argument") } - addr, ok := arguments[0].(uint) - if !ok { - return nil, fmt.Errorf("argument must be a uint") + addr, e := cvtToUint16(arguments[0]) + if e != nil { + return 0, fmt.Errorf("error, illegal address: %v", e) } memInt := ctx.Value("MEM") memRead, ok := memInt.(func(uint16) uint8) if !ok { - return nil, fmt.Errorf("MEM must be func(uint16) uint8") + return 0, fmt.Errorf("MEM must be func(uint16) uint8") } - lo := memRead(uint16(addr)) - hi := memRead(uint16(addr + 1)) - return (uint16(hi) << 8) | uint16(lo), nil + + r := uint16(memRead(addr+1))<<8 | uint16(memRead(addr)) + log.Debugf("PeekW[0x%04X]=0x%04X", addr, r) + return r, nil } + +func CfPeek(ctx context.Context, arguments ...interface{}) (uint16, error) { + result, err := CfPeekW(ctx, arguments...) + return result & 0x00ff, err +} + +func CfIn(ctx context.Context, arguments ...interface{}) (uint16, error) { + if len(arguments) != 1 { + return 0, fmt.Errorf("expected 1 argument") + } + addr, e := cvtToUint16(arguments[0]) + if e != nil { + return 0, fmt.Errorf("error, illegal address: %v", e) + } + ioInt := ctx.Value("IO") + ioRead, ok := ioInt.(func(uint16) uint8) + if !ok { + return 0, fmt.Errorf("IO must be func(uint16) uint8") + } + + r := uint16(ioRead(addr)) + log.Debugf("IO[0x%04X]=0x%02X", addr, r) + return r, nil +} + +func CfByte(ctx context.Context, arguments ...interface{}) (uint8, error) { + if len(arguments) != 1 { + return 0, fmt.Errorf("expected 1 argument") + } + val, e := cvtToUint16(arguments[0]) + if e != nil { + return 0, fmt.Errorf("error, illegal value: %v", e) + } + return uint8(val), nil +} + +func CfWord(ctx context.Context, arguments ...interface{}) (uint16, error) { + if len(arguments) != 1 { + return 0, fmt.Errorf("expected 1 argument") + } + val, e := cvtToUint16(arguments[0]) + if e != nil { + return 0, fmt.Errorf("error, illegal value: %v", e) + } + return val, nil +} + +func CfAbs(ctx context.Context, arguments ...interface{}) (uint16, error) { + if len(arguments) != 1 { + return 0, fmt.Errorf("expected 1 argument") + } + val, e := cvtToUint16(arguments[0]) + if e != nil { + return 0, fmt.Errorf("error, illegal value: %v", e) + } + if val < 256 { + // byte + i8 := int8(val) + if i8 < 0 { + return uint16(-i8), nil + } + return uint16(i8), nil + } + i16 := int16(val) + if i16 < 0 { + return uint16(-i16), nil + } + return uint16(i16), nil +} + +//"IN(e): returns the byte at port e\n" \ +//"NOT(e): negates expression e: if it's 0, returns 1. Otherwhise, return 0\n" \ +//"ABS(e): returns absolute value of expression e\n" \ +//"BYTE(e): same as (e)&FFH\n" \ +//"WORD(e): same as (e)&FFFFH\n" \ diff --git a/debug/breakpoint/breakpoint_test.go b/src/debug/breakpoint/breakpoint_test.go similarity index 100% rename from debug/breakpoint/breakpoint_test.go rename to src/debug/breakpoint/breakpoint_test.go diff --git a/debug/debuger.go b/src/debug/debuger.go similarity index 90% rename from debug/debuger.go rename to src/debug/debuger.go index 44258b2..a166e78 100644 --- a/debug/debuger.go +++ b/src/debug/debuger.go @@ -1,6 +1,7 @@ package debug import ( + "fmt" "okemu/debug/breakpoint" "okemu/z80" "okemu/z80/dis" @@ -267,3 +268,38 @@ func (d *Debugger) CheckMemBreakpoints(accessMap *map[uint16]byte) (bool, uint16 func (d *Debugger) ClearBreakpoints() { clear(d.breakpoints) } + +type MemBP struct { + addr uint16 + size uint16 +} + +func (d *Debugger) GetMemBreakpoints() []MemBP { + var res []MemBP + a := uint16(0) + s := uint16(0) + isBp := false + for addr := 0; addr < 65536; addr++ { + if d.memBreakpoints[addr] > 0 { + if !isBp { + isBp = true + a = uint16(addr) + } + s++ + if addr == 65535 { + res = append(res, MemBP{addr: a, size: s}) + } + } else { + if isBp { + isBp = false + res = append(res, MemBP{addr: a, size: s}) + s = 0 + } + } + } + return res +} + +func (m *MemBP) String() string { + return fmt.Sprintf("%04XH : %d", m.addr, m.size) +} diff --git a/debug/dzrp/dzrp.go b/src/debug/dzrp/dzrp.go similarity index 100% rename from debug/dzrp/dzrp.go rename to src/debug/dzrp/dzrp.go diff --git a/debug/dzrp/protocol.go b/src/debug/dzrp/protocol.go similarity index 100% rename from debug/dzrp/protocol.go rename to src/debug/dzrp/protocol.go diff --git a/debug/evaluate.go b/src/debug/evaluate.go similarity index 100% rename from debug/evaluate.go rename to src/debug/evaluate.go diff --git a/debug/zrcp/constants.go b/src/debug/zrcp/constants.go similarity index 78% rename from debug/zrcp/constants.go rename to src/debug/zrcp/constants.go index da7e285..d918462 100644 --- a/debug/zrcp/constants.go +++ b/src/debug/zrcp/constants.go @@ -1,14 +1,14 @@ package zrcp -const welcomeMessage = "Welcome to Ocean-240.2 remote command protocol (ZRCP partial implementation)\nWrite help for available commands\n\ncommand> " +const welcomeMessage = "Welcome to Ocean-240.2 remote command protocol (ZRCP partial implementation)\nWrite help for available commands\n" const emptyResponse = "\ncommand> " const aboutResponse = "ZEsarUX remote command protocol" const getVersionResponse = "12.1" -const getRegistersResponse = "PC=%04x SP=%04x AF=%04x BC=%04x HL=%04x DE=%04x IX=%04x IY=%04x AF'=%04x BC'=%04x HL'=%04x DE'=%04x I=%02x R=%02x F=%s F'=%s MEMPTR=%04x IM0 IFF%s VPS: 0 MMU=00000000000000000000000000000000" -const getStateResponse = "PC=%04x SP=%04x AF=%04x BC=%04x HL=%04x DE=%04x IX=%04x IY=%04x AF'=%04x BC'=%04x HL'=%04x DE'=%04x I=%02x R=%02x IM0 IFF%s (PC)=%s (SP)=%s MMU=00000000000000000000000000000000" +const getRegistersResponse = "PC=%04x SP=%04x AF=%04x BC=%04x HL=%04x DE=%04x IX=%04x IY=%04x AF'=%04x BC'=%04x HL'=%04x DE'=%04x I=%02x R=%02x F=%s F'=%s MEMPTR=%04x IM0 IFF%s VPS: 0 MMU=%s" +const getStateResponse = "PC=%04x SP=%04x AF=%04x BC=%04x HL=%04x DE=%04x IX=%04x IY=%04x AF'=%04x BC'=%04x HL'=%04x DE'=%04x I=%02x R=%02x IM0 IFF%s (PC)=%s (SP)=%s MMU=%s" const inCpuStepResponse = "\ncommand@cpu-step> " -const getMachineResponse = "64K RAM, no ZX\n" +const getMachineResponse = "Ocean-240.2 64K\n" const respErrorLoading = "ERROR loading file" const quitResponse = "Sayonara baby\n" const runUntilBPMessage = "Running until a breakpoint, key press or data sent, menu opening or other event\n" diff --git a/src/debug/zrcp/util.go b/src/debug/zrcp/util.go new file mode 100644 index 0000000..1a1df0e --- /dev/null +++ b/src/debug/zrcp/util.go @@ -0,0 +1,56 @@ +package zrcp + +import ( + "fmt" + "strconv" + "strings" +) + +func parseUint64(s string) (uint64, error) { + v := strings.TrimSpace(strings.ToUpper(s)) + base := 0 + if strings.HasSuffix(v, "H") { + v = strings.TrimSuffix(v, "H") + base = 16 + } + a, e := strconv.ParseUint(v, base, 64) + return a, e +} + +func parseUint16(s string) (uint16, error) { + v, e := parseUint64(s) + if v > 65535 { + return uint16(v), fmt.Errorf("too big uint16: %d", v) + } + return uint16(v), e +} + +func toW(hi, lo byte) uint16 { + return uint16(lo) | (uint16(hi) << 8) +} + +func iifStr(iif1, iif2 bool) string { + flags := []byte{'-', '-'} + if iif1 { + flags[0] = '1' + } + if iif2 { + flags[1] = '2' + } + return string(flags) +} + +func typToString(typ uint8) string { + switch typ { + case 0: + return "D" + case 1: + return "R" + case 2: + return "W" + case 3: + return "R/W" + default: + return "x" + } +} diff --git a/src/debug/zrcp/zrcp.go b/src/debug/zrcp/zrcp.go new file mode 100644 index 0000000..002744a --- /dev/null +++ b/src/debug/zrcp/zrcp.go @@ -0,0 +1,983 @@ +package zrcp + +import ( + "bufio" + "errors" + "fmt" + "io" + "net" + "okemu/config" + "okemu/debug" + "okemu/debug/breakpoint" + "okemu/okean240" + "okemu/z80" + "okemu/z80/dis" + "os" + "runtime" + "strings" + //"okemu/logger" + "strconv" + + log "github.com/sirupsen/logrus" +) + +type ZRCP struct { + port string + config *config.OkEmuConfig + debugger *debug.Debugger + disassembler *dis.Disassembler + computer *okean240.ComputerType + conn net.Conn + reader *bufio.Reader + writer *bufio.Writer + params []string +} + +type CommandHandler struct { + fn func(zrcp *ZRCP) (string, error) + desc string +} + +/* +hard-reset-cpu Hard resets the machine +help Shows help screen or command help +hexdump Dumps memory at address, showing hex and ascii +*/ + +var commandHandlers = map[string]CommandHandler{ + "about": {(*ZRCP).handleAbout, "Shows about message"}, + "clear-membreakpoints": {(*ZRCP).handleClearMemBreakpoints, "Clear all memory breakpoints"}, + "close-all-menus": {(*ZRCP).handleEmptyHandler, "Close all visible dialogs"}, + "cpu-code-coverage": {(*ZRCP).handleCPUCodeCoverage, "Sets cpu code coverage parameters"}, + "cpu-history": {(*ZRCP).handleCPUHistory, "Runs cpu history actions"}, + "cpu-step": {(*ZRCP).handleCpuStep, "Run single opcode cpu step"}, + "disable-breakpoint": {(*ZRCP).handleDisableBreakpoint, "Disable specific breakpoint"}, + "disable-breakpoints": {(*ZRCP).handleDisableBreakpoints, "Disable all breakpoints"}, + "disassemble": {(*ZRCP).handleDisassemble, "Disassemble at address"}, + "enable-breakpoint": {(*ZRCP).handleEnableBreakpoint, "Enable specific breakpoint"}, + "enable-breakpoints": {(*ZRCP).handleEnableBreakpoints, "Enable breakpoints"}, + "enter-cpu-step": {(*ZRCP).handleEnterCPUStep, "Enter cpu step to step mode"}, + "evaluate": {(*ZRCP).handleEvaluate, "Evaluate expression"}, + "exit-cpu-step": {(*ZRCP).handleExitCPUStep, "Exit cpu step to step mode"}, + "extended-stack": {(*ZRCP).handleExtendedStack, "Sets extended stack parameters, which allows you to see what kind of values are in the stack"}, + "get-cpu-frequency": {(*ZRCP).handleGetCPUFrequency, "Get cpu frequency in HZ"}, + "get-current-machine": {(*ZRCP).handleGetCurrentMachine, "Returns current machine name"}, + "get-machines": {(*ZRCP).handleGetMachines, "Returns list of emulated machines"}, + "get-membreakpoints": {(*ZRCP).handleGetMemBreakpoints, "Get memory breakpoints list"}, + "get-memory-pages": {(*ZRCP).handleGetMemoryPages, "Returns current state of memory pages"}, + "get-os": {(*ZRCP).handleGetOs, "Shows emulator operating system"}, + "get-registers": {(*ZRCP).handleGetRegisters, "Get CPU registers"}, + "get-tstates": {(*ZRCP).handleGetTStates, "Get the t-states counter"}, + "get-tstates-partial": {(*ZRCP).handleGetTStatesPartial, "Get the t-states partial counter"}, + "get-version": {(*ZRCP).handleGetVersion, "Shows emulator version"}, + "hard-reset-cpu": {(*ZRCP).handleHardResetCPU, "Hard resets the machine"}, + "help": {(*ZRCP).handleEmptyHandler, "Shows help screen or command help"}, + "hexdump": {(*ZRCP).handleHexDump, "Dumps memory at address, showing hex and ascii"}, + "load-binary": {(*ZRCP).handleLoadBinary, "Load binary file \"file\" at address \"addr\" with length \"len\", on the current memory zone"}, + "quit": {(*ZRCP).handleEmptyHandler, "Closes connection"}, + "read-memory": {(*ZRCP).handleReadMemory, "Dumps memory at address"}, + "reset-tstates-partial": {(*ZRCP).handleResetTStatesPartial, "Resets the t-states partial counter"}, + "run": {(*ZRCP).handleRun, "Run cpu when on cpu step mode"}, + "save-binary": {(*ZRCP).handleSaveBinary, "Save binary file \"file\" from address \"addr\" with length \"len\", from the current memory zone"}, + "set-breakpoint": {(*ZRCP).handleSetBreakpoint, "Sets a breakpoint at desired index entry with condition"}, + "set-breakpointaction": {(*ZRCP).handleEmptyHandler, "Sets a breakpoint action at desired index entry"}, + "set-breakpointpasscount": {(*ZRCP).handleSetBreakpointPassCount, "Set pass count for breakpoint"}, + "set-debug-settings": {(*ZRCP).handleEmptyHandler, "Set debug settings on remote command protocol"}, + "set-membreakpoint": {(*ZRCP).handleSetMemBreakpoint, "Sets a memory breakpoint starting at desired address entry for type"}, + "set-machine": {(*ZRCP).handleEmptyHandler, "Set machine"}, + "set-register": {(*ZRCP).handleSetRegister, "Changes register value"}, + "snapshot-load": {(*ZRCP).handleSnapshotLoad, "Loads a snapshot"}, + "snapshot-save": {(*ZRCP).handleSnapshotSave, "Saves a snapshot"}, + "write-memory": {(*ZRCP).handleWriteMemory, "Writes a sequence of bytes starting at desired address on memory"}, + "write-port": {(*ZRCP).handleWritePort, "Writes value at port"}, +} + +func NewZRCP(config *config.OkEmuConfig, debug *debug.Debugger, disassm *dis.Disassembler, comp *okean240.ComputerType) *ZRCP { + return &ZRCP{ + port: config.Debugger.Host + ":" + strconv.Itoa(config.Debugger.Port), + debugger: debug, + disassembler: disassm, + computer: comp, + } +} + +// SetupTcpHandler Setup TCP listener, handle connections +func (p *ZRCP) SetupTcpHandler() { + l, err := net.Listen("tcp4", p.port) + if err != nil { + fmt.Println(err) + return + } + + defer func(l net.Listener) { + err := l.Close() + if err != nil { + log.Warnf("Error closing listener connection %v", err) + } + }(l) + log.Infof("Ready for debugger connections on %s", p.port) + for { + var err error + p.conn, err = l.Accept() + if err != nil { + log.Errorf("Accept connection: %v", err) + return + } + go p.handleConnection() + } + +} + +// handleConnection Receive and handle commands +func (p *ZRCP) handleConnection() { + p.reader = bufio.NewReader(p.conn) + p.writer = bufio.NewWriter(p.conn) + + if !p.writeWelcomeMessage() { + return + } + for { + str, err := p.reader.ReadString('\n') + if err != nil { + if err == io.EOF { + break + } else { + log.Errorf("TCP error: %v", err) + p.debugger.SetStepMode(false) + return + } + } + if !p.handleCommand(str) { + log.Debug("Closing connection") + p.writeResponseMessage(quitResponse) + break + } + //byteBuffer.WriteByte(b) + } + p.debugger.SetStepMode(false) + err := p.conn.Close() + if err != nil { + log.Warnf("Can not close socket: %v", err) + } +} + +func (p *ZRCP) writeWelcomeMessage() bool { + return p.writeResponseMessage(welcomeMessage) +} + +// writeResponseMessage send response and prompt message to client +func (p *ZRCP) writeResponseMessage(message string) bool { + if message == "-" { + return true + } + prompt := emptyResponse + if p.debugger.StepMode() { + prompt = inCpuStepResponse + } + + _, err := p.writer.WriteString(message + prompt) + if err != nil { + log.Errorf("TCP write error: %v", err) + return false + } + err = p.writer.Flush() + if err != nil { + log.Errorf("TCP flush error: %v", err) + return false + } + return true +} + +// writeMessage send message back to clien +func (p *ZRCP) writeMessage(message string) bool { + _, err := p.writer.WriteString(message) + if err != nil { + log.Errorf("TCP error: %v", err) + return false + } + err = p.writer.Flush() + if err != nil { + log.Errorf("TCP error: %v", err) + return false + } + return true +} + +// handleCommand route client command +func (p *ZRCP) handleCommand(str string) bool { + str = strings.TrimSpace(str) + if str == "" { + return false + } + + log.Debugf("Command: '%s'", str) + + pos := strings.Index(str, " ") + cmd := str + + p.params = []string{} + if pos > 1 { + cmd = str[:pos] + if len(str) >= pos+1 { + p.params = strings.Split(strings.TrimSpace(str[pos+1:]), " ") + } + } + + var err error + var resp string + + if cmd == "quit" { + return false + } else if cmd == "help" { + resp, _ := p.handleHelp() + p.writeResponseMessage(resp) + return true + } + + handler, ok := commandHandlers[cmd] + if ok { + resp, err = handler.fn(p) + if err != nil { + //log.Errorf("%v", err) + p.writeResponseMessage(err.Error()) + } else { + p.writeResponseMessage(resp) + } + } else { + log.Debugf("Unhandled Command: %s", str) + p.writeResponseMessage("") + } + return true +} + +func (p *ZRCP) handleCpuStep() (string, error) { + p.debugger.SetDoStep(true) // computer.Do() + text := p.disassembler.Disassm(p.computer.CPUState().PC) + return p.registersResponse(p.computer.CPUState()) + " TSTATES: " + strconv.Itoa(int(p.computer.TStatesPartial())) + "\n" + text, nil +} + +func (p *ZRCP) handleRun() (string, error) { + p.writeMessage(runUntilBPMessage) + p.debugger.SetRunMode(true) + return "-", nil +} + +func (p *ZRCP) handleSetMemBreakpoint() (string, error) { + if len(p.params) < 1 { + return "", errors.New("error, not enough parameters") + } + address, err := parseUint16(p.params[0]) + if err != nil { + return "", errors.New("error, illegal address") + } + typ := uint16(3) + if len(p.params) > 1 { + typ, err = parseUint16(p.params[1]) + if err != nil || typ > 3 { + return "", errors.New("error, illegal access type") + } + } + + size := uint16(1) + if len(p.params) > 2 { + size, err = parseUint16(p.params[2]) + if err != nil { + return "", errors.New("error, illegal memory size") + } + } + if p.debugger != nil { + p.debugger.SetMemBreakpoint(address, byte(typ), size) + } + return "", nil +} + +func (p *ZRCP) handleCPUHistory() (string, error) { + if len(p.params) < 1 { + return "", errors.New("error, no parameters") + } + + cmd := p.params[0] + nspe := errors.New("error, no second parameter") + + switch cmd { + + case "enabled": + if len(p.params) < 2 { + return "", nspe + } + p.debugger.SetCpuHistoryEnabled(p.params[1] == "yes") + + case "clear": + p.debugger.CpuHistoryClear() + + case "started": + if len(p.params) < 2 { + return "", nspe + } + p.debugger.SetCpuHistoryStarted(p.params[1] == "yes") + case "set-max-size": + if len(p.params) != 2 { + return "", nspe + } + size, err := parseUint64(p.params[1]) + if err != nil { + return "", errors.New("error, illegal number") + } + p.debugger.SetCpuHistoryMaxSize(int(size)) + case "get": + if len(p.params) != 2 { + return "", nspe + } + index, err := parseUint64(p.params[1]) + if err != nil { + return "", errors.New("error, illegal number") + } + history := p.debugger.CpuHistory(int(index)) + if history != nil { + return p.stateResponse(history), nil + } + return "", errors.New("ERROR: index out of range") + case "ignrephalt", "ignrepldxr": + // ignore + default: + return "", errors.New("error: unknown history command: " + cmd) + } + + return "", nil +} + +func (p *ZRCP) handleLoadBinary() (string, error) { + loadError := errors.New(respErrorLoading) + if len(p.params) < 2 { + return "", loadError + } + fn := strings.Trim(p.params[0], " \"\t") + offset, e := parseUint16(p.params[1]) + length := 0 + if e != nil || offset < 0 || offset > 65535 || len(fn) == 0 { + return "", loadError + } + if len(p.params) > 2 { + l, e := parseUint64(p.params[2]) + if e != nil { + length = 0 + } else { + length = int(l) + } + } + data, err := os.ReadFile(fn) + if err != nil { + return "", loadError + } + if length != 0 && len(data) != length { + log.Warnf("File size does not match the specified length. Expected %d bytes, got %d.", length, len(data)) + //return respErrorLoading + length = len(data) + } + if length == 0 { + length = len(data) + } + // Loaded Ok, move file to memory + for addr := uint16(0); addr < uint16(length); addr++ { + p.computer.MemWrite(addr+offset, data[addr]) + } + return "", nil +} + +// registersResponse Build string +// PC=%4x SP=%4x AF=%4x BC=%4x HL=%4x DE=%4x IX=%4x IY=%4x AF'=%4x BC'=%4x HL'=%4x DE'=%4x I=%2x +// R=%2x F=%s F'=%s MEMPTR=%4x IM0 IFF-- VPS: 0 MMU=00000000000000000000000000000000 +func (p *ZRCP) registersResponse(state *z80.CPU) string { + resp := fmt.Sprintf(getRegistersResponse, + state.PC, + state.SP, + toW(state.A, state.Flags.GetFlags()), + toW(state.B, state.C), + toW(state.H, state.L), + toW(state.D, state.E), + state.IX, + state.IY, + toW(state.AAlt, state.FlagsAlt.GetFlags()), + toW(state.BAlt, state.CAlt), + toW(state.HAlt, state.LAlt), + toW(state.DAlt, state.EAlt), + state.I, + state.R, + state.Flags.GetFlagsStr(), + state.FlagsAlt.GetFlagsStr(), + state.MemPtr, + iifStr(state.Iff1, state.Iff2), + p.getMMU(), + ) + log.Debug(resp) + return resp +} + +// getNBytes return hex string of n bytes from memory starts at addr +func (p *ZRCP) getNBytes(addr uint16, n int) string { + var res strings.Builder + for i := 0; i < n; i++ { + res.WriteString(fmt.Sprintf("%02X", p.computer.MemRead(addr))) + addr++ + } + return res.String() +} + +// stateResponse build string, represent history state +// PC=003a SP=ff46 AF=005c BC=174b HL=107f DE=0006 IX=ffff IY=5c3a AF'=0044 BC'=ffff HL'=ffff DE'=5cb9 I=3f R=78 +// IM0 IFF-- (PC)=2a785c23 (SP)=107f MMU=00000000000000000000000000000000 +func (p *ZRCP) stateResponse(state *z80.CPU) string { + resp := fmt.Sprintf(getStateResponse, + state.PC, + state.SP, + toW(state.A, state.Flags.GetFlags()), + toW(state.B, state.C), + toW(state.H, state.L), + toW(state.D, state.E), + state.IX, + state.IY, + toW(state.AAlt, state.FlagsAlt.GetFlags()), + toW(state.BAlt, state.CAlt), + toW(state.HAlt, state.LAlt), + toW(state.DAlt, state.EAlt), + state.I, + state.R, + iifStr(state.Iff1, state.Iff2), + p.getNBytes(state.PC, 4), + p.getNBytes(state.SP, 2), + p.getMMU(), + ) + log.Trace(resp) + return resp +} + +func (p *ZRCP) handleSetRegister() (string, error) { + state := p.computer.CPUState() + if len(p.params) != 1 { + return "", errors.New("error, expected REG=val") + } + regPar := strings.Split(p.params[0], "=") + if len(regPar) != 2 { + return "error", errors.New("error, illegal set register parameter: '" + regPar[0] + "'") + } + val, e := parseUint16(regPar[1]) + if e != nil { + return "error", errors.New("invalid register value: '" + regPar[1] + "'") + } + switch regPar[0] { + case "AF": + state.A = uint8(val >> 8) + state.Flags.SetFlags(uint8(val)) + case "BC": + state.B = uint8(val >> 8) + state.C = uint8(val) + case "DE": + state.D = uint8(val >> 8) + state.E = uint8(val) + case "HL": + state.H = uint8(val >> 8) + state.L = uint8(val) + // ------------------------------ + case "SP": + state.SP = val + case "PC": + state.PC = val + case "IX": + state.IX = val + case "IY": + state.IY = val + // ------------------------------ + case "AF'": + state.AAlt = uint8(val >> 8) + state.FlagsAlt.SetFlags(uint8(val)) + case "BC'": + state.BAlt = uint8(val >> 8) + state.CAlt = uint8(val) + case "DE'": + state.DAlt = uint8(val >> 8) + state.EAlt = uint8(val) + case "HL'": + state.HAlt = uint8(val >> 8) + state.LAlt = uint8(val) + + // ------------------------------ + case "A": + state.A = uint8(val) + case "F": + state.Flags.SetFlags(uint8(val)) + case "B": + state.B = uint8(val) + case "C": + state.C = uint8(val) + case "D": + state.D = uint8(val) + case "E": + state.E = uint8(val) + case "H": + state.H = uint8(val) + case "L": + state.L = uint8(val) + // ------------------------------ + case "A'": + state.AAlt = uint8(val) + case "F'": + state.FlagsAlt.SetFlags(uint8(val)) + case "B'": + state.BAlt = uint8(val) + case "C'": + state.CAlt = uint8(val) + case "D'": + state.DAlt = uint8(val) + case "E'": + state.EAlt = uint8(val) + case "H'": + state.HAlt = uint8(val) + case "L'": + state.LAlt = uint8(val) + // ------------------------------ + case "I": + state.I = uint8(val) + case "R": + state.R = uint8(val) + default: + log.Errorf("Unsupported set register parameter: %v", p.params) + } + p.computer.SetCPUState(state) + return p.registersResponse(p.computer.CPUState()), nil +} + +func (p *ZRCP) handleReadMemory() (string, error) { + addr, size, err := p.getAddrValue64() + if err != nil { + return "", err + } + if size > 65536 { + return "", errors.New("error, too many bytes") + } + return p.getNBytes(addr, int(size)), nil +} + +func (p *ZRCP) getExtendedStack() (string, error) { + if len(p.params) < 2 { + return "", errors.New("error, will be 2 or 3 params") + } + + size, err := parseUint16(p.params[1]) + if err != nil { + return "", errors.New("error, invalid size parameter") + } + + sp := p.computer.CPUState().SP + if len(p.params) == 3 { + var err error + sp, err = parseUint16(p.params[2]) + if err != nil { + return "", errors.New("error, illegal number for SP") + } + } + + var resp strings.Builder + spEnd := sp - size*2 + es, err := p.computer.ExtendedStack() + if err == nil { + for i := sp; i > spEnd; i -= 2 { + resp.WriteString(fmt.Sprintf("%04XH %s\n", p.computer.MemRead(i), PushValueTypeName[es[i]])) + } + } + log.Tracef("extended-stack get: %s", resp) + return resp.String(), err +} + +func (p *ZRCP) handleSetBreakpoint() (string, error) { + if len(p.params) < 2 { + return "", errors.New("error, invalid parameters") + } + + no, e := parseUint16(p.params[0]) + if e != nil || no > breakpoint.MaxBreakpoints || no < 1 { + return "", errors.New("error, invalid breakpoint number") + } + exp := strings.Join(p.params[1:], " ") + e = p.debugger.SetBreakpoint(no, exp, 1) + if e != nil { + return "", errors.New("error, " + e.Error()) + } + return "", nil +} + +// BreakpointHit handle breakpoint hit, called from program cycle +func (p *ZRCP) BreakpointHit(number uint16, typ byte) { + if p.writer != nil { + pc := p.computer.CPUState().PC + res := p.disassembler.Disassm(pc) + msg := "" + if typ == 0 { + msg = p.debugger.BPExpression(number) + } else { + msg = fmt.Sprintf("MEM[%04X] %s", number, typToString(typ)) + } + rep := fmt.Sprintf("Breakpoint fired: %s\n%s", msg, res) + log.Debug(rep) + p.writeResponseMessage(rep) + } +} + +func (p *ZRCP) handleSetBreakpointPassCount() (string, error) { + bpNo, passCount, err := p.getAddrValue16() + if err != nil { + return "", err + } + p.debugger.SetBreakpointPassCount(bpNo, passCount) + return "", nil +} + +func (p *ZRCP) handleDisassemble() (string, error) { + var addr uint16 + if len(p.params) == 0 { + addr = p.computer.CPUState().PC + } else { + var e error + addr, e = parseUint16(p.params[0]) + if e != nil { + return "", fmt.Errorf("error, illegal address: %s", p.params[0]) + } + } + res := p.disassembler.Disassm(addr) + log.Trace(res) + return res, nil +} + +func (p *ZRCP) handleSnapshotSave() (string, error) { + if len(p.params) < 1 { + return "", errors.New("error, no parameter") + } + e := p.computer.SaveSnapshot(strings.TrimSpace(p.params[0])) + if e != nil { + return "", errors.New("error: " + e.Error()) + } + return "", nil +} + +func (p *ZRCP) handleSnapshotLoad() (string, error) { + if len(p.params) < 1 { + return "", errors.New("error, no parameter") + } + e := p.computer.LoadSnapshot(strings.TrimSpace(p.params[0])) + if e != nil { + return "", errors.New("error: " + e.Error()) + } + return "", nil +} + +func (p *ZRCP) handleGetTStatesPartial() (string, error) { + return strconv.FormatUint(p.computer.TStatesPartial(), 10), nil +} + +func (p *ZRCP) handleResetTStatesPartial() (string, error) { + p.computer.ResetTStatesPartial() + return "", nil +} + +func (p *ZRCP) handleEmptyHandler() (string, error) { + return "", nil +} + +func (p *ZRCP) handleAbout() (string, error) { + return aboutResponse, nil +} + +func (p *ZRCP) handleGetVersion() (string, error) { + return getVersionResponse, nil +} + +func (p *ZRCP) handleGetRegisters() (string, error) { + return p.registersResponse(p.computer.CPUState()), nil +} + +func (p *ZRCP) handleHardResetCPU() (string, error) { + p.computer.Reset() + return "", nil +} + +func (p *ZRCP) handleEnterCPUStep() (string, error) { + p.debugger.SetStepMode(true) + return "", nil +} + +func (p *ZRCP) handleExitCPUStep() (string, error) { + p.debugger.SetStepMode(false) + return "", nil +} + +func (p *ZRCP) handleGetCurrentMachine() (string, error) { + return getMachineResponse, nil +} + +func (p *ZRCP) handleClearMemBreakpoints() (string, error) { + p.debugger.ClearMemBreakpoints() + return "", nil +} + +func (p *ZRCP) handleEnableBreakpoints() (string, error) { + p.debugger.SetBreakpointsEnabled(true) + return "", nil +} + +func (p *ZRCP) handleDisableBreakpoints() (string, error) { + p.debugger.SetBreakpointsEnabled(false) + return "", nil +} + +func (p *ZRCP) setBreakpointState(enable bool) string { + if len(p.params) == 0 { + return "error, no bp number" + } + no, e := parseUint16(p.params[0]) + if e != nil { + return "error, illegal bp number" + } + if enable && !p.debugger.BreakpointsEnabled() { + return "Error. You must enable breakpoints first" + } + p.debugger.SetBreakpointEnabled(no, enable) + return "" +} + +func (p *ZRCP) handleEnableBreakpoint() (string, error) { + resp := p.setBreakpointState(true) + var err error + if len(resp) != 0 { + err = errors.New(resp) + } + return "", err +} + +func (p *ZRCP) handleDisableBreakpoint() (string, error) { + resp := p.setBreakpointState(false) + var err error + if len(resp) != 0 { + err = errors.New(resp) + } + return "", err +} + +func (p *ZRCP) handleGetCPUFrequency() (string, error) { + return strconv.Itoa(int(p.computer.CPUFrequency())), nil +} + +func (p *ZRCP) handleExtendedStack() (string, error) { + if len(p.params) < 1 { + return "", errors.New("error, not enough params") + } + cmd := p.params[0] + if cmd == "get" { + return p.getExtendedStack() + } else if cmd == "enabled" { + if len(p.params) < 2 { + return "", errors.New("error, expected yes|no") + } + p.computer.SetExtendedStack(p.params[1] == "yes") + } else { + return "", errors.New("error, unknown sub-command: " + cmd) + } + return "", nil +} + +// handleCPUCodeCoverage Handle commands: +// cpu-code-coverage enabled yes +// cpu-code-coverage enabled no +// cpu-code-coverage clear +func (p *ZRCP) handleCPUCodeCoverage() (string, error) { + if len(p.params) < 1 { + return "", errors.New("error, not enough params") + } + + resp := "" + + switch p.params[0] { + case "enabled": + if len(p.params) < 2 { + return "", errors.New("error, not arguments for enabled [yas|no]") + } + p.computer.SetCodeCoverage(p.params[1] == "yes") + case "clear": + p.computer.ClearCodeCoverage() + case "get": + for addr, _ := range p.computer.CodeCoverage() { + resp += fmt.Sprintf("%04X ", addr) + } + } + return resp, nil +} + +func (p *ZRCP) getAddrValue64() (uint16, uint64, error) { + if len(p.params) != 2 { + return 0, 0, errors.New("error, not enough params") + } + addr, e := parseUint16(p.params[0]) + if e != nil { + return 0, 0, errors.New("error, invalid first number: " + e.Error()) + } + + val, e := parseUint64(p.params[1]) + if e != nil { + return 0, 0, errors.New("error, invalid second number: " + e.Error()) + } + return addr, val, nil +} + +func (p *ZRCP) getAddrValue16() (uint16, uint16, error) { + addr, val, err := p.getAddrValue64() + return addr, uint16(val), err +} + +func (p *ZRCP) getAddrValue8() (uint16, uint8, error) { + addr, val, err := p.getAddrValue64() + return addr, uint8(val), err +} + +func (p *ZRCP) handleWriteMemory() (string, error) { + addr, val, e := p.getAddrValue8() + if e != nil { + return "", e + } + p.computer.MemWrite(addr, val) + log.Tracef("0x%02X=>MEM[0x%04X]", val, addr) + return "", nil +} + +func (p *ZRCP) handleWritePort() (string, error) { + addr, val, e := p.getAddrValue8() + if e != nil { + return "", e + } + p.computer.IOWrite(addr, val) + log.Tracef("0x%02X=>IO[0x%04X]", val, addr) + return "", nil +} + +func (p *ZRCP) handleEvaluate() (string, error) { + if len(p.params) == 0 { + return "0", nil + } + return p.computer.Evaluate(strings.Join(p.params, " ")) +} + +func (p *ZRCP) getMMU() string { + var res strings.Builder + for _, id := range p.computer.MemoryPages() { + res.WriteString(fmt.Sprintf("%04X", id)) + } + return res.String() +} + +func (p *ZRCP) handleGetMemoryPages() (string, error) { + var res strings.Builder + for _, id := range p.computer.MemoryPages() { + if id < 0xf0 { + res.WriteString(fmt.Sprintf("RA%d ", id)) + } else { + res.WriteString(fmt.Sprintf("RO%d ", id-0xf0)) + } + } + return res.String(), nil +} + +func (p *ZRCP) handleGetOs() (string, error) { + return runtime.GOOS, nil +} + +func (p *ZRCP) handleGetTStates() (string, error) { + return strconv.FormatUint(p.computer.Cycles(), 10), nil +} + +func (p *ZRCP) handleSaveBinary() (string, error) { + if len(p.params) != 3 { + return "", errors.New("error, need 3 parameters") + } + fn := strings.Trim(p.params[0], " \t\"") + addr, e := parseUint16(p.params[1]) + if e != nil { + return "", errors.New("error, invalid address") + } + size, e := parseUint16(p.params[2]) + if e != nil { + return "", errors.New("error, invalid size") + } + var block []byte + for c := uint16(0); c < size; c++ { + block = append(block, p.computer.MemRead(addr)) + addr++ + } + err := os.WriteFile(fn, block, 0644) + if err != nil { + log.Fatal(err) + } + return "", nil +} + +func (p *ZRCP) handleGetMachines() (string, error) { + return "OK240.2\t" + getMachineResponse, nil +} + +func (p *ZRCP) handleGetMemBreakpoints() (string, error) { + var res strings.Builder + for _, bp := range p.debugger.GetMemBreakpoints() { + res.WriteString(bp.String()) + res.WriteByte(0x0a) + } + return res.String(), nil +} + +func (p *ZRCP) handleHelp() (string, error) { + var res strings.Builder + res.WriteString("Available commands:\n") + for k, v := range commandHandlers { + res.WriteString(fmt.Sprintf("%-*s%s\n", 24, k, v.desc)) + } + res.WriteString("\nTotal commands: " + strconv.Itoa(len(commandHandlers)) + "\n") + return res.String(), nil +} + +func (p *ZRCP) handleHexDump() (string, error) { + addr, size, err := p.getAddrValue64() + if err != nil { + return "", err + } + ctr := 0 + fakeSize := size / 16 * 16 + if fakeSize != size { + fakeSize += 16 + } + var resB strings.Builder + var resA strings.Builder + for c := uint64(0); c <= fakeSize; c++ { + if ctr%16 == 0 { + if resB.Len() > 0 { + resB.WriteString(resA.String()) + resB.WriteString("|\n") + } + if c == fakeSize { + break + } + resA.Reset() + resA.WriteString(" |") + resB.WriteString(fmt.Sprintf(" %04XH ", addr)) + } + if c < size { + b := p.computer.MemRead(addr) + resB.WriteString(fmt.Sprintf("%02X ", b)) + if b >= 32 && b < 127 { + resA.WriteString(string(b)) + } else { + resA.WriteByte(0x2e) // . + } + } else { + resB.WriteString(" ") + resA.WriteByte(0x20) + } + addr++ + ctr++ + } + return resB.String(), nil +} diff --git a/debug/zrcp/zrcp_test.go b/src/debug/zrcp/zrcp_test.go similarity index 100% rename from debug/zrcp/zrcp_test.go rename to src/debug/zrcp/zrcp_test.go diff --git a/appWindow.go b/src/forms/appWindow.go similarity index 90% rename from appWindow.go rename to src/forms/appWindow.go index 227d042..c48e409 100644 --- a/appWindow.go +++ b/src/forms/appWindow.go @@ -1,4 +1,4 @@ -package main +package forms import ( "fmt" @@ -18,7 +18,7 @@ import ( "fyne.io/fyne/v2/widget" ) -func mainWindow(computer *okean240.ComputerType, config *config.OkEmuConfig) (*fyne.Window, *canvas.Raster, *widget.Label) { +func NewMainWindow(computer *okean240.ComputerType, config *config.OkEmuConfig) (*fyne.Window, *canvas.Raster, *widget.Label) { emulatorApp := app.New() w := emulatorApp.NewWindow("Океан 240.2") @@ -93,11 +93,11 @@ func newToolbar(c *okean240.ComputerType, w fyne.Window, a fyne.App, config *con hBox.Add(widget.NewSeparator()) } - hBox.Add(widget.NewButtonWithIcon("1", theme.DownloadIcon(), func() { - c.SetRamBytes(ramBytes) - })) - - hBox.Add(widget.NewSeparator()) + //hBox.Add(widget.NewButtonWithIcon("1", theme.DownloadIcon(), func() { + // c.SetRamBytes(ramBytes) + //})) + // + //hBox.Add(widget.NewSeparator()) hBox.Add(widget.NewButtonWithIcon("^C", theme.MediaStopIcon(), func() { c.PutCtrlKey(0x03) })) @@ -106,14 +106,14 @@ func newToolbar(c *okean240.ComputerType, w fyne.Window, a fyne.App, config *con bFast := widget.NewButtonWithIcon("", theme.MediaFastForwardIcon(), nil) bFast.OnTapped = func() { - fullSpeed.Store(true) + c.SetFullSpeed(true) c.SetCPUFrequency(50_000_000) bNorm.Enable() bFast.Disable() } bNorm.OnTapped = func() { - fullSpeed.Store(false) + c.SetFullSpeed(false) c.SetCPUFrequency(2_500_000) bNorm.Disable() bFast.Enable() @@ -139,7 +139,7 @@ func newToolbar(c *okean240.ComputerType, w fyne.Window, a fyne.App, config *con })) hBox.Add(layout.NewSpacer()) hBox.Add(widget.NewButtonWithIcon("Reset", theme.MediaReplayIcon(), func() { - needReset = true + c.SetPendingReset(true) //computer.Reset(conf) })) return hBox diff --git a/settings.go b/src/forms/settings.go similarity index 83% rename from settings.go rename to src/forms/settings.go index e172060..de6d746 100644 --- a/settings.go +++ b/src/forms/settings.go @@ -1,12 +1,15 @@ -package main +package forms import ( + "errors" "okemu/config" "okemu/okean240/fdc" + "os" "strconv" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/data/binding" "fyne.io/fyne/v2/data/validation" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" @@ -77,11 +80,9 @@ func diskForm(cfg *config.OkEmuConfig, drv byte) *widget.Form { dskAutoSave.Checked = cfg.FDC[drv].AutoSave - dskFileName := widget.NewEntry() - dskFileName.SetText(cfg.FDC[drv].FloppyFile) - dskFileName.OnSubmitted = func(s string) { - cfg.FDC[drv].FloppyFile = s - } + dskFileName := widget.NewEntryWithData(binding.BindString(&cfg.FDC[drv].FloppyFile)) + dskFileName.SetPlaceHolder("Enter file name...") + dskFileName.Validator = FileExists("File not exists") return widget.NewForm( widget.NewFormItem("AutoLoad", dskAutoLoad), @@ -89,3 +90,13 @@ func diskForm(cfg *config.OkEmuConfig, drv byte) *widget.Form { widget.NewFormItem("File", dskFileName), ) } + +func FileExists(reason string) fyne.StringValidator { + return func(text string) error { + _, e := os.Stat(text) + if errors.Is(e, os.ErrNotExist) { + return errors.New(reason) + } + return nil + } +} diff --git a/go.mod b/src/go.mod similarity index 100% rename from go.mod rename to src/go.mod diff --git a/go.sum b/src/go.sum similarity index 100% rename from go.sum rename to src/go.sum diff --git a/gval/LICENSE b/src/gval/LICENSE similarity index 100% rename from gval/LICENSE rename to src/gval/LICENSE diff --git a/gval/benchmarks_test.go b/src/gval/benchmarks_test.go similarity index 100% rename from gval/benchmarks_test.go rename to src/gval/benchmarks_test.go diff --git a/gval/evaluable.go b/src/gval/evaluable.go similarity index 100% rename from gval/evaluable.go rename to src/gval/evaluable.go diff --git a/gval/evaluable_test.go b/src/gval/evaluable_test.go similarity index 100% rename from gval/evaluable_test.go rename to src/gval/evaluable_test.go diff --git a/gval/example_test.go b/src/gval/example_test.go similarity index 100% rename from gval/example_test.go rename to src/gval/example_test.go diff --git a/gval/functions.go b/src/gval/functions.go similarity index 100% rename from gval/functions.go rename to src/gval/functions.go diff --git a/gval/functions_test.go b/src/gval/functions_test.go similarity index 100% rename from gval/functions_test.go rename to src/gval/functions_test.go diff --git a/gval/gval.go b/src/gval/gval.go similarity index 100% rename from gval/gval.go rename to src/gval/gval.go diff --git a/gval/gval_evaluationFailure_test.go b/src/gval/gval_evaluationFailure_test.go similarity index 100% rename from gval/gval_evaluationFailure_test.go rename to src/gval/gval_evaluationFailure_test.go diff --git a/gval/gval_noparameter_test.go b/src/gval/gval_noparameter_test.go similarity index 100% rename from gval/gval_noparameter_test.go rename to src/gval/gval_noparameter_test.go diff --git a/gval/gval_parameterized_test.go b/src/gval/gval_parameterized_test.go similarity index 100% rename from gval/gval_parameterized_test.go rename to src/gval/gval_parameterized_test.go diff --git a/gval/gval_parsingFailure_test.go b/src/gval/gval_parsingFailure_test.go similarity index 100% rename from gval/gval_parsingFailure_test.go rename to src/gval/gval_parsingFailure_test.go diff --git a/gval/gval_test.go b/src/gval/gval_test.go similarity index 100% rename from gval/gval_test.go rename to src/gval/gval_test.go diff --git a/gval/language.go b/src/gval/language.go similarity index 100% rename from gval/language.go rename to src/gval/language.go diff --git a/gval/operator.go b/src/gval/operator.go similarity index 100% rename from gval/operator.go rename to src/gval/operator.go diff --git a/gval/operator_test.go b/src/gval/operator_test.go similarity index 100% rename from gval/operator_test.go rename to src/gval/operator_test.go diff --git a/gval/parse.go b/src/gval/parse.go similarity index 100% rename from gval/parse.go rename to src/gval/parse.go diff --git a/gval/parser.go b/src/gval/parser.go similarity index 100% rename from gval/parser.go rename to src/gval/parser.go diff --git a/gval/parser_test.go b/src/gval/parser_test.go similarity index 100% rename from gval/parser_test.go rename to src/gval/parser_test.go diff --git a/gval/random_test.go b/src/gval/random_test.go similarity index 100% rename from gval/random_test.go rename to src/gval/random_test.go diff --git a/logger/logger.go b/src/logger/logger.go similarity index 100% rename from logger/logger.go rename to src/logger/logger.go diff --git a/main.go b/src/main.go similarity index 81% rename from main.go rename to src/main.go index ce523d5..0719a91 100644 --- a/main.go +++ b/src/main.go @@ -8,6 +8,7 @@ import ( "okemu/config" "okemu/debug" "okemu/debug/zrcp" + "okemu/forms" "okemu/logger" "okemu/okean240" "okemu/z80/dis" @@ -22,21 +23,19 @@ import ( ) var Version = "v1.0.0" -var BuildTime = "2026-03-01" +var BuildTime = "2026-04-01" + +const defaultTimerClkPeriod = 430 +const defaultCpuClkPeriod = 311 ////go:embed hex/m80.hex //var serialBytes []byte -//go:embed bin/PIP.COM -var ramBytes []byte - -////go:embed bin/LINK.COM -//var ramBytes2 []byte +////go:embed bin/jack.com +//var ramBytes []byte var needReset = false -var fullSpeed atomic.Bool - func main() { fmt.Printf("Starting Ocean-240.2 emulator %s build at %s\n", Version, BuildTime) @@ -79,13 +78,13 @@ func main() { disassm := dis.NewDisassembler(computer) - w, raster, label := mainWindow(computer, conf) + w, raster, label := forms.NewMainWindow(computer, conf) //dezog := dzrp.NewDZRP(conf, debugger, disassm, computer) dezog := zrcp.NewZRCP(conf, debugger, disassm, computer) - go cpuClock(ctx, computer, dezog) - go timerClock(ctx, computer) + go cpuClock(computer, dezog) + go timerClock(computer) go screen(ctx, computer, raster, label) if conf.Debugger.Enabled { @@ -123,7 +122,7 @@ func screen(ctx context.Context, computer *okean240.ComputerType, raster *canvas timerFreq = math.Round(float64(timerTicks.Load()-preTim)/period) / 1000.0 label.SetText(formatLabel(computer, cpuFreq, timerFreq)) - adjustPeriods(cpuFreq, timerFreq) + adjustPeriods(computer, cpuFreq, timerFreq) //log.Debugf("Cpu clk period: %d, Timer clock period: %d, period: %1.3f", cpuClkPeriod.Load(), timerClkPeriod.Load(), period) //pre = computer.Cycles() @@ -140,9 +139,9 @@ func screen(ctx context.Context, computer *okean240.ComputerType, raster *canvas } // adjustPeriods Adjust periods for CPU and Timer clock frequencies -func adjustPeriods(cpuFreq float64, timerFreq float64) { +func adjustPeriods(c *okean240.ComputerType, cpuFreq float64, timerFreq float64) { // adjust cpu clock if not full speed - if !fullSpeed.Load() { + if c.FullSpeed() { if cpuFreq > okean240.CPUFrequencyHi && cpuClkPeriod.Load() < defaultCpuClkPeriod+defaultCpuClkPeriod/2 { cpuClkPeriod.Add(1) } else if cpuFreq < okean240.CPUFrequencyLow && cpuClkPeriod.Load() > 3 { @@ -163,17 +162,10 @@ func formatLabel(computer *okean240.ComputerType, freq float64, freqTim float64) var timerTicks atomic.Uint64 -const defaultTimerClkPeriod = 430 // = 1_000_000_000 / 1_607_900 // period in nanos for 1.5MHz frequency -const defaultCpuClkPeriod = 311 // = 1_000_000_000 / 2_770_000 // period in nanos for 2.5MHz frequency +var timerClkPeriod atomic.Int64 // period in nanos for 1.5MHz frequency +var cpuClkPeriod atomic.Int64 // period in nanos for 2.5MHz frequency -var timerClkPeriod atomic.Int64 // = 1_000_000_000 / 1_607_900 // period in nanos for 1.5MHz frequency -var cpuClkPeriod atomic.Int64 // = 1_000_000_000 / 2_770_000 // period in nanos for 2.5MHz frequency - -//var timerTicker *time.Ticker - -//var cpuTicker *time.Ticker - -func timerClock(ctx context.Context, computer *okean240.ComputerType) { +func timerClock(computer *okean240.ComputerType) { timerClkPeriod.Store(defaultTimerClkPeriod) timeStart := hrtime.Now() for { @@ -190,7 +182,7 @@ func timerClock(ctx context.Context, computer *okean240.ComputerType) { var cpuTicks atomic.Uint64 -func cpuClock(ctx context.Context, computer *okean240.ComputerType, dezog debug.DEZOG) { +func cpuClock(computer *okean240.ComputerType, dezog debug.DEZOG) { cpuClkPeriod.Store(defaultCpuClkPeriod) cpuTicks.Store(0) @@ -209,7 +201,7 @@ func cpuClock(ctx context.Context, computer *okean240.ComputerType, dezog debug. // 2.5MHz frequency cpuTicks.Add(1) - if fullSpeed.Load() { + if computer.FullSpeed() { // Max frequency _, bp, bpType = computer.Do() } else if cpuTicks.Load() >= nextTick { diff --git a/okean240/computer.go b/src/okean240/computer.go similarity index 78% rename from okean240/computer.go rename to src/okean240/computer.go index c234e2b..460f92a 100644 --- a/okean240/computer.go +++ b/src/okean240/computer.go @@ -1,6 +1,7 @@ package okean240 import ( + "context" _ "embed" "encoding/binary" "encoding/json" @@ -8,6 +9,8 @@ import ( "image/color" "okemu/config" "okemu/debug" + "okemu/debug/breakpoint" + "okemu/gval" "okemu/okean240/fdc" "okemu/okean240/pic" "okemu/okean240/pit" @@ -17,9 +20,7 @@ import ( "strconv" "sync/atomic" - //"okemu/z80" "okemu/z80/c99" - //"okemu/z80/js" log "github.com/sirupsen/logrus" ) @@ -40,7 +41,7 @@ type ComputerType struct { colorMode bool screenWidth int screenHeight int - vRAM *RamBlock + vRAM *MemoryBlock palette byte bgColor byte pit *pit.I8253 @@ -52,9 +53,11 @@ type ComputerType struct { hShift byte cpuFrequency uint32 // - debugger *debug.Debugger - config *config.OkEmuConfig - kbAck atomic.Bool + debugger *debug.Debugger + config *config.OkEmuConfig + kbAck atomic.Bool + fullSpeed atomic.Bool + pendingReset atomic.Bool } type Snapshot struct { @@ -131,6 +134,8 @@ func NewComputer(cfg *config.OkEmuConfig, deb *debug.Debugger) *ComputerType { c.fdc = fdc.NewFDC(cfg) c.cpuFrequency = DefaultCPUFrequency c.debugger = deb + c.fullSpeed.Store(false) + c.pendingReset.Store(false) return &c } @@ -141,40 +146,41 @@ func (c *ComputerType) Reset() { } func (c *ComputerType) getContext() map[string]interface{} { - context := make(map[string]interface{}) + ctx := make(map[string]interface{}) s := c.cpu.GetState() - context["A"] = s.A - context["B"] = s.B - context["C"] = s.C - context["D"] = s.D - context["E"] = s.E - context["H"] = s.H - context["L"] = s.L - context["A'"] = s.AAlt - context["B'"] = s.BAlt - context["C'"] = s.CAlt - context["D'"] = s.DAlt - context["E'"] = s.EAlt - context["H'"] = s.HAlt - context["L'"] = s.LAlt - context["PC"] = s.PC - context["SP"] = s.SP - context["IX"] = s.IX - context["IY"] = s.IY - context["ZF"] = s.Flags.Z - context["SF"] = s.Flags.S - context["NF"] = s.Flags.N - context["PF"] = s.Flags.P - context["HF"] = s.Flags.H - context["YF"] = s.Flags.Y - context["XF"] = s.Flags.X - context["CF"] = s.Flags.C - context["BC"] = uint16(s.B)<<8 | uint16(s.C) - context["DE"] = uint16(s.D)<<8 | uint16(s.E) - context["HL"] = uint16(s.H)<<8 | uint16(s.L) - context["AF"] = uint16(s.A)<<8 | uint16(s.Flags.GetFlags()) - context["MEM"] = c.memory.MemRead - return context + ctx["A"] = s.A + ctx["B"] = s.B + ctx["C"] = s.C + ctx["D"] = s.D + ctx["E"] = s.E + ctx["H"] = s.H + ctx["L"] = s.L + ctx["A'"] = s.AAlt + ctx["B'"] = s.BAlt + ctx["C'"] = s.CAlt + ctx["D'"] = s.DAlt + ctx["E'"] = s.EAlt + ctx["H'"] = s.HAlt + ctx["L'"] = s.LAlt + ctx["PC"] = s.PC + ctx["SP"] = s.SP + ctx["IX"] = s.IX + ctx["IY"] = s.IY + ctx["ZF"] = s.Flags.Z + ctx["SF"] = s.Flags.S + ctx["NF"] = s.Flags.N + ctx["PF"] = s.Flags.P + ctx["HF"] = s.Flags.H + ctx["YF"] = s.Flags.Y + ctx["XF"] = s.Flags.X + ctx["CF"] = s.Flags.C + ctx["BC"] = uint16(s.B)<<8 | uint16(s.C) + ctx["DE"] = uint16(s.D)<<8 | uint16(s.E) + ctx["HL"] = uint16(s.H)<<8 | uint16(s.L) + ctx["AF"] = uint16(s.A)<<8 | uint16(s.Flags.GetFlags()) + ctx["MEM"] = c.memory.MemRead + ctx["IO"] = c.IORead + return ctx } func (c *ComputerType) Do() (uint32, uint16, byte) { @@ -479,3 +485,51 @@ func (c *ComputerType) SetExtendedStack(enabled bool) { func (c *ComputerType) ExtendedStack() ([]byte, error) { return c.cpu.ExtendedStack() } + +var language gval.Language + +func init() { + language = gval.NewLanguage(gval.Base(), gval.Arithmetic(), gval.Bitmask(), gval.PropositionalLogic(), + gval.Function("PEEKW", breakpoint.CfPeekW), + gval.Function("PEEK", breakpoint.CfPeek), + gval.Function("BYTE", breakpoint.CfByte), + gval.Function("WORD", breakpoint.CfWord), + gval.Function("ABS", breakpoint.CfAbs), + gval.Function("IN", breakpoint.CfIn), + ) +} + +func (c *ComputerType) Evaluate(expression string) (string, error) { + params := c.getContext() + bc := context.WithValue(context.Background(), "MEM", params["MEM"]) + bc = context.WithValue(bc, "IO", params["IO"]) + eval, err := language.NewEvaluable(expression) + if err != nil { + return "", fmt.Errorf("error: %s", err.Error()) + } + value, err := eval.EvalUint(bc, params) + if err != nil { + return "", fmt.Errorf("error: %s", err.Error()) + } + return strconv.FormatUint(uint64(value), 10), nil +} + +func (c *ComputerType) MemoryPages() []byte { + return c.memory.MemoryWindows() +} + +func (c *ComputerType) SetFullSpeed(full bool) { + c.fullSpeed.Store(full) +} + +func (c *ComputerType) FullSpeed() bool { + return c.fullSpeed.Load() +} + +func (c *ComputerType) SetPendingReset(pending bool) { + c.pendingReset.Store(pending) +} + +func (c *ComputerType) PendingReset() bool { + return c.pendingReset.Load() +} diff --git a/okean240/computer_test.go b/src/okean240/computer_test.go similarity index 100% rename from okean240/computer_test.go rename to src/okean240/computer_test.go diff --git a/okean240/constants.go b/src/okean240/constants.go similarity index 100% rename from okean240/constants.go rename to src/okean240/constants.go diff --git a/okean240/fdc/fdc.go b/src/okean240/fdc/fdc.go similarity index 100% rename from okean240/fdc/fdc.go rename to src/okean240/fdc/fdc.go diff --git a/okean240/ioports.go b/src/okean240/ioports.go similarity index 98% rename from okean240/ioports.go rename to src/okean240/ioports.go index f9978df..48337fc 100644 --- a/okean240/ioports.go +++ b/src/okean240/ioports.go @@ -10,7 +10,7 @@ package okean240 import log "github.com/sirupsen/logrus" -func (c *ComputerType) IORead(port uint16) byte { +func (c *ComputerType) IORead(port uint16) uint8 { switch port & 0x00ff { case PicDd75a: // PIO xx59, get IRR register diff --git a/okean240/keyboard.go b/src/okean240/keyboard.go similarity index 100% rename from okean240/keyboard.go rename to src/okean240/keyboard.go diff --git a/okean240/memory.go b/src/okean240/memory.go similarity index 81% rename from okean240/memory.go rename to src/okean240/memory.go index eb4edc3..46f59db 100644 --- a/okean240/memory.go +++ b/src/okean240/memory.go @@ -24,16 +24,16 @@ const ( WindowNo3 ) -type RamBlock struct { +type MemoryBlock struct { id byte memory [RamBlockSize]byte } type Memory struct { - allMemory [RamBlocks]*RamBlock - memoryWindow [RamWindows]*RamBlock - rom0 RamBlock // monitor + monitor - rom1 RamBlock // cpm + monitor + allMemory [RamBlocks]*MemoryBlock + memoryWindow [RamWindows]*MemoryBlock + rom0 MemoryBlock // monitor + monitor + rom1 MemoryBlock // cpm + monitor config byte } @@ -55,7 +55,7 @@ func (m *Memory) Init(monFile string, cmpFile string) { // empty RAM var id byte = 0 for block := range m.allMemory { - rb := RamBlock{} + rb := MemoryBlock{} rb.id = id id++ for addr := 0; addr < RamBlockSize; addr++ { @@ -74,10 +74,10 @@ func (m *Memory) Init(monFile string, cmpFile string) { if err != nil { log.Fatal(err) } - m.rom0 = RamBlock{} - m.rom0.id = 100 - m.rom1 = RamBlock{} - m.rom0.id = 101 + m.rom0 = MemoryBlock{} + m.rom0.id = 0xF0 + m.rom1 = MemoryBlock{} + m.rom1.id = 0xF1 half := RamBlockSize / 2 for i := 0; i < half; i++ { // mon+mon @@ -130,8 +130,19 @@ func (m *Memory) MemRead(addr uint16) byte { func (m *Memory) MemWrite(addr uint16, val byte) { window := addr >> 14 offset := addr & 0x3fff - if window == 1 { - //log.Debugf("at vram [%2x][%4x]", window, offset) + if m.memoryWindow[window].id < 0xF0 { + // write to RAM only + m.memoryWindow[window].memory[offset] = val + } else { + log.Debugf("Attempting to write 0x%02X=>ROM[0x%04X]=", val, addr) } - m.memoryWindow[window].memory[offset] = val +} + +// MemoryWindows Return memory pages, mapped to memory windows +func (m *Memory) MemoryWindows() []byte { + var res []byte + for w := 0; w < RamWindows; w++ { + res = append(res, m.memoryWindow[w].id) + } + return res } diff --git a/okean240/palette.go b/src/okean240/palette.go similarity index 100% rename from okean240/palette.go rename to src/okean240/palette.go diff --git a/okean240/pic/pic8259.go b/src/okean240/pic/pic8259.go similarity index 100% rename from okean240/pic/pic8259.go rename to src/okean240/pic/pic8259.go diff --git a/okean240/pit/pit8253.go b/src/okean240/pit/pit8253.go similarity index 100% rename from okean240/pit/pit8253.go rename to src/okean240/pit/pit8253.go diff --git a/okean240/remapkey.go b/src/okean240/remapkey.go similarity index 100% rename from okean240/remapkey.go rename to src/okean240/remapkey.go diff --git a/okean240/usart/usart8251.go b/src/okean240/usart/usart8251.go similarity index 100% rename from okean240/usart/usart8251.go rename to src/okean240/usart/usart8251.go diff --git a/z80/c99/constants.go b/src/z80/c99/constants.go similarity index 100% rename from z80/c99/constants.go rename to src/z80/c99/constants.go diff --git a/z80/c99/cpu.go b/src/z80/c99/cpu.go similarity index 100% rename from z80/c99/cpu.go rename to src/z80/c99/cpu.go diff --git a/z80/c99/helper.go b/src/z80/c99/helper.go similarity index 100% rename from z80/c99/helper.go rename to src/z80/c99/helper.go diff --git a/z80/c99/opcodes.go b/src/z80/c99/opcodes.go similarity index 100% rename from z80/c99/opcodes.go rename to src/z80/c99/opcodes.go diff --git a/z80/c99/opcodesCB.go b/src/z80/c99/opcodesCB.go similarity index 100% rename from z80/c99/opcodesCB.go rename to src/z80/c99/opcodesCB.go diff --git a/z80/c99/opcodesDDFD.go b/src/z80/c99/opcodesDDFD.go similarity index 100% rename from z80/c99/opcodesDDFD.go rename to src/z80/c99/opcodesDDFD.go diff --git a/z80/c99/opcodesED.go b/src/z80/c99/opcodesED.go similarity index 100% rename from z80/c99/opcodesED.go rename to src/z80/c99/opcodesED.go diff --git a/z80/cpu.go b/src/z80/cpu.go similarity index 100% rename from z80/cpu.go rename to src/z80/cpu.go diff --git a/z80/cpu_test.go b/src/z80/cpu_test.go similarity index 100% rename from z80/cpu_test.go rename to src/z80/cpu_test.go diff --git a/z80/dis/z80disasm.go b/src/z80/dis/z80disasm.go similarity index 100% rename from z80/dis/z80disasm.go rename to src/z80/dis/z80disasm.go diff --git a/z80/dis/z80disasm_test.go b/src/z80/dis/z80disasm_test.go similarity index 100% rename from z80/dis/z80disasm_test.go rename to src/z80/dis/z80disasm_test.go diff --git a/z80/tests.expected b/src/z80/tests.expected similarity index 100% rename from z80/tests.expected rename to src/z80/tests.expected diff --git a/z80/tests.in b/src/z80/tests.in similarity index 100% rename from z80/tests.in rename to src/z80/tests.in