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
+
+
+
+## Зачем?
+
+Эмулятор был разработан для удобства реверс-инжененринга программ монитора и приложений для этого старого компьютера.
+Поэтому и имеет такой минималистичный интерфейс.
+
+Если нужен более точный эмулятор Океана-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 - в коде, цветом помечаются строки, выполненные процессором.
+
+
+
+Можно отлаживать код и без 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