[an error occurred while processing this directive]


;  Файл библиотеки для поддержания текстового
; режима и оконного интерфейса

; Дата написания 23.8.94

; BorSoft
; Copyright 1994

; If You have some changes in this file
; PLEASE Call (095) 188-31-34 ( in Moscow )

; Состав библиотеки:
;  Window     - Установить текущим окно
;               Формат обращения( абсолютные координаты )
;               WLeft WTop WRight WBottom -
;  ClrScr     - Oчистить текущее окно
;  PushWindow - Запомнить область экрана в стеке
;               Формат обращения( абсолютные координаты )
;  PopWindow  - Вспомнить из стека область экрана
;               Формат обращения( абсолютные координаты )
;  GetWindow  - Выдать коор. рабочей области на экране
;  GoToXY     - Передвинуть курсор по относительным коор.
;  SetColor   - Установить цвет символов( 32*32 )
;  GetColor   - Взять значение текущего цвета
;  SetPalette - Установить палитру( 1..4 )
;  GetPalette - Взять значение палитры
;  GetScrAdr  - Взять адрес начала текущего экрана
;  Flash      - Установить для 32*32 мерцание
;  Inverse    - Установить для 32*32 инверсию символов
;  Normal     - Понятно
;  GetChar    - Возьмем символ по координатам
;  Border     - Нарисуем рамку
;               Формат обращения( абсолютные координаты )
;               X1 Y1 X2 Y2 BorderNo -
;  PushState  - Запомнить текущее состояние экрана
;  PopState   - Восстановить прошлое состояние экрана
;  Home       - Курсор в ЛевоВерх окна
;  SSP@       - Взять адрес текущего положения экр. стека
;  SSP!       - Сбросить экранный стек
;  ShowList   - Показать на текущем окне по адресу
;               в стеке текстовый список( OUTS- просто )
;  ShowString - Показать на текущей строке стр. из памяти
;  ToBegStr   - В начало текущей строки
;  ShowBorder - Нарисуем свою рамку
;               Формат обращения:
;               X1 Y1 X2 Y2 MyBorderAdr -
;               Примечание: MyBorderAdr- адрес описателя
;                рамки, состоящий из 6 байт( на примере )
;
;                         12222223
;                         4      4
;                         4      4
;                         62222225

; Начальная инициализация
Crtlib                   
 dfb ¤86
 asc "crtliB"
 dw  0
crtlib
l100
 jsr sspsto
 jsr lit
l101
  dw settext32
 jsr scrdrivers
 jsr twop
 jsr store         Запомним процедуру установки TEXT32
   
 jsr lit
l102
  dw home
 jsr jumpkeytab
 jsr lit
  dw ¤18
 jsr plus

 jmp store         Установим CTRL-L

;---------------------------------------------------------
; Сначала ассемблерные процедуры                          
;
 
; На входе в стеке координаты на выходе VREM смещение
MakeOffs
 jsr Pop          Возьмем со стека координату Y
 ldy #¤0
 sty Vrem
 sta Vrem+1
 clc                                           
 ror Vrem+1       Умножим на ¤40
 ror Vrem
 ror Vrem+1
 ror Vrem
 jsr Pop          Возьмем со стека координату X
 sta Vrem+2
 lda Mode
 cmp #TEXT64
 beq b100
 asl Vrem+2
b100
 lda Vrem+2
 clc
 adc Vrem         Получим смещение от начала экрана
 sta Vrem 
 
 rts
 
; По координатам на стеке установим во VREM реальный адрес
GetRealAdr                                                
l103
 jsr CheckBound   Проконтролируем границы
 bcs badout
 
l104
 jsr MakeOffs     Сделаем смещение от угла окна

 lda BegPos+1     Прибавим адрес начала экрана
 and #¤f8
 clc
 adc Vrem+1                                   
 sta Vrem+1

b119
 inx              Восстановим стек
 inx
 inx
 inx       
badout
 rts

; Установим адрес для относительных координат
GetOffsAdr
l105
 jsr CheckOffsBound
 bcs badout
    
l106
 jsr MakeOffs
 
 lda BegPos
 clc
 adc Vrem
 sta Vrem
 lda BegPos+1
 adc Vrem+1
 sta Vrem+1
l107
 jmp b119

; Контроль координат на стеке( если плохие, то стек чист )
CheckBound
 jsr Pop
 cmp #¤20
 bcs b101
 jsr Pop
 ldy Mode
 cpy #TEXT64
 beq b102
 asl a
b102
 cmp #¤40
 bcs b103
b120
 inx
 inx
 inx
 inx
 rts

b101
 dex
 dex
b103
 rts

; Проконтролируем относительные координаты
CheckOffsBound
 jsr Pop
 cmp WinDepth
 bcs b101
 jsr Pop
 cmp WinWidth
 bcs b103
 bcc b120

; Установим адрес в ячейках FORTH по VREM
SetScrAdr
 lda Vrem
 sta CurrPos
 lda Vrem+1
 sta CurrPos+1
 rts

; Положим в экранный стек слово с регистров
PushS
 sta ¤c083    Включим старшую половину на адреса D000-DFFF

 sty Vrem+¤a
 ldy #¤0
 sta (TxtStack),y
 iny
 lda Vrem+¤a
 sta (TxtStack),y

 lda TxtStack
 clc
 adc #¤2      Изменим адрес экранного стека

savesstack
 sta TxtStack
 bcc b104
 inc TxtStack+1

b104      
 sta ¤c08b    Восстановим конфигурацию памяти
 rts

; Возьмем со стека число в регистры
PopS
 sta ¤c083

 lda TxtStack
 beq b199    
b198
 lda TxtStack
 sec
 sbc #¤2
 sta TxtStack
 bcs b105
 dec TxtStack+1

b105
 ldy #¤1
 lda (TxtStack),y
 sta Vrem+¤a
 dey
 lda (TxtStack),y
 ldy Vrem+¤a
 
 sta ¤c08b
 rts
 
b199
 lda TxtStack+1
 cmp #¤d0
 beq b104
 bne b198

; Положим на экранный стек строку по адресу в VREM 
; и длиной в Y
PushSString
 sta ¤c083

 sty Vrem+¤a
 ldy #¤0 
b106
 lda (Vrem),y
 sta (TxtStack),y
 iny
 cpy Vrem+¤a
 bne b106
 
 clc
 lda TxtStack
 adc Vrem+¤a
l108
 jmp savesstack

; Возьмем с экранного стека строку как выше
PopSString
 sta ¤c083
 
 sty Vrem+¤a
 lda TxtStack
 beq whatsit 
b197
 lda TxtStack
 sec
 sbc Vrem+¤a
 sta TxtStack
 bcs b108
 dec TxtStack+1
 
b108
 ldy #¤0 
b109
 lda (TxtStack),y
 sta (Vrem),y
 iny
 cpy Vrem+¤a
 bne b109
 beq b104
 
whatsit
 lda TxtStack+1
 cmp #¤d0
 bne b197
 beq b104
                         
; Если не текстовый режим, то пропустим процедуру
IsTextMode
 lda Mode
 cmp #TEXT64
 beq okoutt
 cmp #TEXT32
 beq okoutt
 sec
 rts
okoutt
 clc
 rts

; Процедура входа в текстовую процедуру
CrtIn
l109
 jsr IsTextMode  Если не текстовый режим, то пропустим
 bcs nowaygr
 jsr DisInt      Замаскируем прерывания
 jmp CursorOff

nowaygr
 pla
 pla
 rts
 
; Процедура выхода из текстовой процедуры
CrtOut
 jsr CursorOn

 jmp EnbInt

; Переместим курсор в нулевые координаты
SetNullPos
 ldy #¤0
 tya     
b114
 sta PosX,y
 iny
 cpy #¤4
 bne b114
 rts

; Установим следующую строку для VREM
NextVrem
 lda #¤40
 clc
 adc Vrem
 sta Vrem
 bcc b139
 inc Vrem+1
b139
 rts

; Установим предыдущий VREM
PrevVrem
 lda Vrem
 sec     
 sbc #¤40
 sta Vrem
 bcs b139
 dec Vrem+1
 
 rts

; Установим режим текста 32*32--------------------
settext32
 jsr swap
 jsr dup
 jsr two
 jsr less
 jsr zbran
  dw m301-*-2
 jsr settext
 jsr lit
  dw ¤27
 jsr atribute
 jsr store
 jsr t32
 jsr winwidth     
 jsr store

 jmp true

m301  
 jsr ddrop

 jmp false

; Выдадим на стек число символов по числу строк
howmuchsymb
 jsr Pop
 sta Vrem+4    Число строк
 jsr StackVrem            
 ldy #¤0
 sty Vrem+2
 sty Vrem+3    Обнулим счетчик
b130
 lda (Vrem),y
 beq endlist
 cmp #ENTERKEY
 beq findcr
b132
 inc Vrem+2
 bne b131
 inc Vrem+3
b131
 iny
 bne b130
 inc Vrem+1
 bne b130
 
findcr
 dec Vrem+4
 bne b132
endlist
 lda Vrem+2
 ora Vrem+3
 beq dropstack   Если символов 0, то уберем из стека адрес
 inx
 inx
dropstack                                                 
 jsr Vrem2Stack
 
 rts
 
; Нарисуем полосу в любом месте
ShowHorLine
 lda Vrem+4
 sta Vrem+3
 sty Vrem+6
 ldy #¤1
 lda (Vrem+¤a),y
 ldy Vrem+6

b196 
 dec Vrem+3
 beq b195
l160
 jsr OutBordPart
 bne b196  
 
b195
 rts

; Выведем одну частичку бордера
OutBordPart
 sta (Vrem),y
 pha
 lda Mode
 iny
 cmp #TEXT64
 beq outahere
 lda Atribute
 sta (Vrem),y
 iny
outahere
 pla
 rts

;--------------------------------------------------------
; Процедуры связи с FORTH                                
;
;

; Переместить курсор по координатам на стеке
Gotoxy
 dfb ¤86
 asc "gotoxY"
 dw  Crtlib
gotoxy

l110
 jsr CrtIn
l111
 jsr GetOffsAdr  Установим адрес для курсора( ot
 bcs badcoor     Координаты не устраивают
 jsr Pop
 sta PosY
 jsr Pop
 sta PosX   
l112
 jsr SetScrAdr
   
badcoor
l113
 jmp CrtOut
 
; Очистим экран текстовой консоли
Clrscr
 dfb ¤86
 asc "clrscR"
 dw  Gotoxy
clrscr
    
l114
 jsr CrtIn
 lda WinDepth
 sta Vrem+3
 lda BegPos
 sta Vrem
 lda BegPos+1
 sta Vrem+1
 lda WinWidth
 sta Vrem+2
 lda Mode
 cmp #TEXT64
 beq nextline
 asl Vrem+2

nextline
 ldy #¤0
curline
 lda #BLANK
 sta (Vrem),y
 lda Mode
 cmp #TEXT64
 beq b112
 iny
 lda Atribute
 sta (Vrem),y
b112
 iny
 cpy Vrem+2
 bne curline     Цикл по текущей строке
    
l115
 jsr NextVrem    Прибавим ¤40 к содержимому VREM
 dec Vrem+3
 bne nextline
    
l116
 jmp CrtOut
 
; Объявим окно для последующего вывода
Window
 dfb ¤86
 asc "windoW"
 dw  Clrscr
window
    
l117
 jsr CrtIn
l118
 jsr GetRealAdr
 bcs noway
 jsr Pop
 sta Vrem+4     Координата нижнего угла окна по У
 jsr Pop
 sta Vrem+5     Координата нижнего угла окна по Х

 lda Vrem       Сохраним адрес нижнего угла
 sta Vrem+7     
 lda Vrem+1
 sta Vrem+8                  
    
l119
 jsr GetRealAdr
 bcs noway1
 jsr Pop
 sta WinY
 sta Vrem+9     Координата верхнего угла окна по Х
 jsr Pop
 sta WinX
 sta Vrem+¤a    Координата верхнего угла окна по У
 lda Vrem+4                                       
 sec
 sbc Vrem+9
 sta WinDepth
 inc WinDepth
 lda Vrem+5
 sec
 sbc Vrem+¤a
 sta WinWidth
 inc WinWidth
    
l120
 jsr SetScrAdr  Установим адрес начала окна
 lda Vrem+1
 sta BegPos+1
 lda Vrem
 sta BegPos  

 and #¤3f      Установим адрес начала последней линии окна
 sta Vrem
 lda Vrem+7
 and #¤c0
 ora Vrem     
 sta EndPos
 lda Vrem+8
 sta EndPos+1
    
l121
 jsr SetNullPos 
l122
 jmp CrtOut
     
noway
 jsr Pop
 jsr Pop
noway1
l123
 jmp CrtOut

; Положим окно на сохранение в стек
Pushwindow
 dfb ¤8a
 asc "pushwindoW"
 dw  0
pushwindow

 jsr dswap
l125
 jsr CrtIn
l126
 jsr GetRealAdr
 bcs noway
 lda Vrem+2
 sta Vrem+¤a     Сохраним смещение от 0 позиции для верха
 jsr Pop
 sta Vrem+4      Сохраним адрес werha сохраняемого окна
 jsr Pop
 sta Vrem+5
l127
 jsr GetRealAdr
 bcs noway1  
 jsr Pop
 sec 
 sbc Vrem+4
 sta Vrem+4
 inc Vrem+4
 jsr Pop
 sec
 sbc Vrem+5
 sta Vrem+5
 inc Vrem+5
 lda Mode
 cmp #TEXT64
 beq b116
 asl Vrem+5
b116
 
 lda Vrem      Установимся на начало низа сохран. окна
 and #¤c0
 ora Vrem+¤a
 sta Vrem   
 lda Vrem+4 
 sta Vrem+2
 
loopallwin
 ldy Vrem+5    
l129
 jsr PushSString
l128
 jsr PrevVrem
 dec Vrem+2
 bne loopallwin

 ldy Vrem+5
 lda Vrem+4
l130
 jsr PushS     Сохраним объемные параметры окна
 
 jsr CursorOn

 jmp EnbInt

; Восстановим окно из экранного стека на экран
Popwindow
 dfb ¤89
 asc "popwindoW"
 dw  Writefile
popwindow
    
l131
 jsr CrtIn
l132
 jsr GetRealAdr
 bcs badout1
l133
 jsr PopS        Восстановим объемные параметры окна
 sta Vrem+4      Глубина окна
 sty Vrem+5      Ширина окна
         
b117
 ldy Vrem+5    
l134
 jsr PopSString
l135
 jsr NextVrem
 dec Vrem+4
 bne b117 
 jsr Pop
 jsr Pop
 
badout1
l136
 jmp CrtOut

; Сохраним экранные параметры в экранном стеке
Pushstate
 dfb ¤89
 asc "pushstatE"
 dw  Popwindow
pushstate
          
 jsr DisInt
 lda #>EndPos
 sta Vrem
 lda #<EndPos
 sta Vrem+1     Установим адрес для сохранения экр. парам.
 
 ldy #¤14
l137
 jsr PushSString

 jmp EnbInt
 
; Восстановим экранные параметры из стека
Popstate
 dfb ¤88
 asc "popstatE"
 dw  Readfile
popstate
           
 jsr DisInt
 jsr CursorOff
 lda #>EndPos
 sta Vrem
 lda #<EndPos
 sta Vrem+1
 
 ldy #¤14      
l138
 jsr PopSString
 jsr CursorOn

 jmp EnbInt
 
; Возьмем по абсолютным координатам символ с экрана
Getchar
 dfb ¤87
 asc "getchaR"
 dw  Sysbuf1
getchar
    
 jsr CursorOff
l139
 jsr GetRealAdr
 bcs nexxt
 jsr Pop
 jsr Pop
 ldy #¤0
 sty Vrem+3
 lda Mode
 cmp #TEXT64
 beq justgetit
 iny
 lda (Vrem),y
 sta Vrem+3
 dey
justgetit
 lda (Vrem),y
 sta Vrem+2
 jsr Vrem2Stack
 
nexxt
 jmp CursorOn
 
; Переместим курсор в угол окна
Home
 dfb ¤84
 asc "homE"
 dw  0
home
l140
 jsr clrscr
 jsr zero
 jsr zero

l167
 jmp gotoxy

; Установим экранный стек в начальное положение
Sspsto
 dfb ¤84
 asc "ssp!"
 dw  Home
sspsto
 lda #¤0
 sta TxtStack
 lda #¤d0
 sta TxtStack+1

 rts

; Возьмем на стек текущее положение экранного стека
Sspat
 dfb ¤84
 asc "ssp@"
 dw  Sspsto
sspat
 lda TxtStack
 ldy TxtStack+1
 
 jmp PushNext

; Покажем на всем окне текст( на стеке адрес )
Showlist
 dfb ¤88
 asc "showlisT"
 dw  Popstate

showlist
l141
 jsr tobegstr
 jsr windepth
 jsr at
l143
 jsr howmuchsymb     Выдадим на стек число символов
;                    в экране
 jmp type            Выведем все на окно

; Покажем на строке по адресу на стеке
Showstring
 dfb ¤8a
 asc "showstrinG"
 dw  Pushwindow

showstring
l144
 jsr tobegstr       Перейдем к началу строки
 jsr one
l145
 jsr howmuchsymb

 jmp type
 
; Перейдем к началу строки
Tobegstr
 dfb ¤88
 asc "tobegstR"
 dw  Showlist

tobegstr
 jsr zero
 jsr posy
 jsr at

l146
 jmp gotoxy

; Установим цвет для режим32
Setcolor
 dfb ¤88
 asc "setcoloR"
 dw  Tobegstr
setcolor
 
 lda Mode
 cmp #TEXT32
 bne not32
 jsr Pop
 and #¤7
 sta Vrem
 lda Atribute
 and #¤f8
 ora Vrem
 sta Atribute

not32
 rts

; Возьмем цвет для режим32
Getcolor
 dfb ¤88
 asc "getcoloR"
 dw  Setcolor
getcolor

 lda Atribute
 and #¤7
 ldy #¤0

 jmp PushNext

; Установим палитру для текста и графики
Setpalette
 dfb ¤8a
 asc "setpalettE"
 dw  Showstring
setpalette

 jsr Pop
 and #¤3
l147
 sta mypalette
 ldy #¤0
 sty Vrem+2
 sty Vrem+3   
 ror a
 rol Vrem+2
 ror a
 rol Vrem+3
 ldy Vrem+2
 lda ¤c058,y
 ldy Vrem+3
 lda ¤c05a,y
fuck
 rts

; Возьмем номер текущей палитры
Getpalette
 dfb ¤8a
 asc "getpalettE"
 dw  Setpalette
getpalette
    
l148
 lda mypalette
 ldy #¤0

 jmp PushNext

mypalette
 dfb ¤0

; Возьмем адрес начала текущего экрана
Getscradr
 dfb ¤89
 asc "getscradR"
 dw  Pushstate
getscradr
    
l149
 jsr IsTextMode
 bcs fuck
 lda BegPos+1
 and #¤f8
 tay
 ldy #¤0
 
 jmp PushNext

; Установим мерцание для режим32
Flash
 dfb ¤85
 asc "flasH"
 dw  Bank5
flash

 lda #¤8
 sta Vrem
         
myset
 lda Mode
 cmp #TEXT32
 bne fuck
 
 lda Atribute
 and #¤d7
 ora Vrem
 sta Atribute
 
 rts

; Установим инверсию для режим32
Inverse
 dfb ¤87
 asc "inversE"
 dw  Getchar
inverse

 lda #¤0
 sta Vrem
 beq myset

; Нормальное отбражение
Normal
 dfb ¤86
 asc "normaL"
 dw  Window
normal

 lda #¤28
 sta Vrem
 bne myset

; Нарисуем рамку для окна( в стеке номер рамки )
Border
 dfb ¤86
 asc "bordeR"
 dw  Normal

border
 jsr three
 jsr min
 jsr lit
  dw ¤7
 jsr star
 jsr lit
l150
  dw myborders
 jsr plus           Получили адрес начала описания рамки
    
l151
 jmp showborder
 
; Описатели рамок
myborders
 dfb ¤6,¤10,¤1b,¤12,¤5c,¤1f,¤1d
 dfb ¤6,¤09,¤1b,¤0a,¤5c,¤0b,¤0c
 ASC ¤6,""
 ASC ¤6,"      "
 
nowayy
 jmp ddrop

; Нарисуем рамку на абсолютном экране
; на стеке: TopX TopY BotX BotY BorderAdr -
Showborder
 dfb ¤8a
 asc "showbordeR"
 dw  Getpalette

showborder
 jsr onep
l152
 jsr CrtIn
 jsr Pop
 sta Vrem+¤a
 sty Vrem+¤b
l153
 jsr GetRealAdr    
 bcs nowayy
 jsr Pop
 sta Vrem+5      НизУ
 jsr Pop
 sta Vrem+4      НизХ
l154
 jsr GetRealAdr
 bcs nowayy
 jsr Pop
 sta Vrem+6
 lda Vrem+5
 sec
 sbc Vrem+6
 sta Vrem+5      ГлубинаУ
 jsr Pop
 sta Vrem+6
 lda Vrem+4
 sec
 sbc Vrem+6
 sta Vrem+4      ДлинаХ  
   
; ВерхЛевоУгол
 ldy #¤0
 lda (Vrem+¤a),y
 
l161
 jsr OutBordPart

; Рисуем полоску 
l155
 jsr ShowHorLine

; ВерхПравоУгол
 sty Vrem+3
 ldy #¤2
 lda (Vrem+¤a),y
 ldy Vrem+3
l162
 jsr OutBordPart

; Рисуем вертикальные полоски
 lda Vrem+4
 sta Vrem+6
 lda Mode
 cmp #TEXT64
 beq not322
 asl Vrem+6 
not322

 ldy #¤3
 lda (Vrem+¤a),y

b193 
 pha
l156
 jsr NextVrem
 pla
 ldy #¤0
 dec Vrem+5
 beq b192
l163
 jsr OutBordPart
 ldy Vrem+6
l164
 jsr OutBordPart
l157
 jmp b193
 
b192
; НизЛевоУгол
 ldy #¤5
 lda (Vrem+¤a),y
 ldy #¤0
l165
 jsr OutBordPart
 
; Нарисуем горизонтальную полосу внизу
l158
 jsr ShowHorLine
 
; НизПравоУгол
 sty Vrem+3
 ldy #¤4
 lda (Vrem+¤a),y
 ldy Vrem+3
l166
 jsr OutBordPart
           
l159
 jmp CrtOut
 
; Возьмем в стек параметры окна
; TopX TopY BotX BotY
Getwindow
 dfb ¤89
 asc "getwindoW"
 dw  Getscradr

getwindow
 jsr winx
 jsr at
 jsr winy 
 jsr at
 jsr over
 jsr winwidth
 jsr at
 jsr plus
 jsr onem
 jsr over
 jsr windepth
 jsr at
 jsr plus

 jmp onem
 
; Дополнительные константы экрана и клавиатуры
Black
 dfb ¤85
 asc "blacK"
 dw  Flash
black
 jsr Cons
 
 dw  0

Red
 dfb ¤83
 asc "reD"
 dw  0
red
 jsr Cons
 
 dw  1

Green
 dfb ¤85
 asc "greeN"
 dw  Black
green
 jsr Cons
 
 dw  2

Yellow
 dfb ¤86
 asc "yelloW"
 dw  Border
yellow
 jsr Cons
 
 dw  3

Blue
 dfb ¤84
 asc "bluE"
 dw  Sspat
blue
 jsr Cons
 
 dw  4

Violet
 dfb ¤86
 asc "violeT"
 dw  Yellow
violet
 jsr Cons
 
 dw  5

Lightblue
 dfb ¤89
 asc "lightbluE"
 dw  Getwindow
lightblue
 jsr Cons
 
 dw  6

White
 dfb ¤85
 asc "whitE"
 dw  Green
white
 jsr Cons
 
 dw  7  
 
Escapekey
 dfb ¤89
 asc "escapekeY"
 dw  Lightblue
escapekey
 jsr Cons
 
 dw  ¤9b
 
Enterkey
 dfb ¤88
 asc "enterkeY"
 dw  Getcolor
enterkey
 jsr Cons
 
 dw  ¤8d

Rightkey
 dfb ¤88
 asc "rightkeY"
 dw  Enterkey
rightkey
 jsr Cons
 
 dw  ¤95

Leftkey
 dfb ¤87
 asc "leftkeY"
 dw  Inverse
leftkey
 jsr Cons
 
 dw  ¤88

Upkey
 dfb ¤85
 asc "upkeY"
 dw  White
upkey
 jsr Cons
 
 dw  ¤99

Downkey
 dfb ¤87
 asc "downkeY"
 dw  Leftkey
downkey
 jsr Cons
 
 dw  ¤9a

; Описываем расширенные процедуры для экрана
Screen
 dfb ¤86
 asc "screeN"
 dw  Violet

screen
 jsr setscreen
 jsr showscreen
 jsr lit
  dw ¤8c

 jmp out
 
Con
 dfb ¤83
 asc "coN"
 dw  Red

con
 jsr false
 jsr cursorstate
 jsr store

 jmp CursorOn
 
Coff
 dfb ¤84
 asc "cofF"
 dw  Blue

coff
 jsr CursorOff  
 jsr true
 jsr cursorstate

 jmp store

 chn sys2.lib
[an error occurred while processing this directive]