Автор Тема: Библиотека для ввода/вывода  (Прочитано 762 раз)

Оффлайн BRE

  • Newbie
  • *
  • Сообщений: 16
  • Karma: +3/-0
    • Просмотр профиля
Библиотека для ввода/вывода
« : Апрель 02, 2013, 02:19:12 pm »
У нее есть зависимость от оконной библиотеки, но от нее легко избавиться.
А вот оконную я найти не могу, скорее всего она осталась только на дискетах.

;---------------------------------------
;-  DISK LIB  (C)   1993  RB-SOFT      -
;---------------------------------------
WND      = $6000
OPENWND  = WND
CLOSEWND = WND+$03
WCH      = WND+$06
WTXT     = WND+$09
RESET    = WND+$0C
SCR      = WND+$0F
WNDOK    = WND+$12
XS       = WND+$17
YS       = WND+$18
XF       = WND+$19
YF       = WND+$1A
COLOR    = WND+$1B
PARAM    = WND+$1C
ATTR     = WND+$27
GCURCH   = WND+$28
PCURCH   = WND+$38

         *= $5B00

         JMP OPEN
         JMP WRMEM
         JMP RDMEM
         JMP GETST
         JMP PRST
         JMP STATUS
         JMP KERERR

;---------------------------------------
OPEN     JSR $FFC0
         JMP KERERR

;---------------------------------------
; Запись данных в файл
; In : .YA - указатель на блок данных
;            Offs  Len  Discriptor
;             00    1    FilePtr
;             01    2    BufferPtr
;             03    2    BufferSize
; Out: CS - Error
WRMEM    STA $C9
         STY $CA
         LDY #0
         STY $90
         LDA ($C9),Y
         TAX
         JSR $FFC9
         JSR KERERR
         BCS WRERR
         INY
         LDA ($C9),Y
         STA WR1+1
         INY
         LDA ($C9),Y
         STA WR1+2
         INY
         LDA ($C9),Y
         STA SIZE
         INY
         LDA ($C9),Y
         STA SIZE+1

WRLOOP   LDA SIZE
         ORA SIZE+1
         BEQ WREXIT

WR1      LDA $FFFF
         JSR $FFD2
         LDA $90
         BNE WRERR
         INC WR1+1
         BNE WR2
         INC WR1+2
WR2      SEC
         LDA SIZE
         SBC #1
         STA SIZE
         BCS WRLOOP
         DEC SIZE+1
         JMP WRLOOP

WREXIT   CLC
WREXIT1  PHP
         JSR $FFCC
         PLP
         RTS

WRERR    SEC
         BCS WREXIT1

;---------------------------------------
; Чтение данных из файла
; In : .YA - указатель на блок данных
;            Offs  Len  Discriptor
;             00    1    FilePtr
;             01    2    BufferPtr
;             03    2    BufferSize
; Out: CS - Error
RDMEM    STA $C9
         STY $CA
         LDY #0
         STY $90
         LDA ($C9),Y
         TAX
         JSR $FFC6
         JSR KERERR
         BCS WRERR
         INY
         LDA ($C9),Y
         STA RD1+1
         INY
         LDA ($C9),Y
         STA RD1+2
         INY
         LDA ($C9),Y
         STA SIZE
         INY
         LDA ($C9),Y
         STA SIZE+1

RDLOOP   LDA SIZE
         BNE RD3
         LDA SIZE+1
         BEQ WREXIT
RD3      JSR $FFE4
RD1      STA $FFFF
         LDA $90
         BNE WRERR
         INC RD1+1
         BNE RD2
         INC RD1+2
RD2      SEC
         LDA SIZE
         SBC #1
         STA SIZE
         BCS RDLOOP
         DEC SIZE+1
         JMP RDLOOP

SIZE     .WORD 0

;---------------------------------------
; Читает статус диска
; In :
; Out: .CS = error
GETST    LDA #0
         STA $90
         JSR CH_ON
         LDY #0
GSL1     JSR $FFA5
         STA BUFST,Y
         INY
         BIT $90
         BVC GSL1
         JSR CH_OFF
         LDA #0
         STA BUFST,Y

         LDY #0
         LDA BUFST,Y
         CMP #$30
         BNE STERR
         INY
         LDA BUFST,Y
         CMP #$30
         BNE STERR
         CLC
         RTS
STERR    SEC
         RTS

;---------------------------------------
; Выводит статус в окне
PRST     JSR OPENWND
         .BYTE 5,17,35,22,2,3
         LDA #<MST
         LDY #>MST
         JSR WTXT
         LDA #<BUFST
         LDY #>BUFST
         JSR WTXT
         JSR GKEY
         JMP CLOSEWND

MST      .TEXT "    DISK  STATUS :   "
         .TEXT "       "
         .BYTE 0
BUFST    .BYTE 0,0,0,0,0,0,0,0,0,0
         .BYTE 0,0,0,0,0,0,0,0,0,0
         .BYTE 0,0,0,0,0,0,0,0,0,0

;---------------------------------------
; Читает статус и если произошла ошибка
; выводит его в окне
STATUS   JSR GETST
         BCC ST1
         JSR PRST
ST1      RTS

CH_ON    LDA #8
         JSR $FFB4
         LDA #$6F
         JMP $FF96

CH_OFF   JMP $FFAB

;---------------------------------------
; Проверяет флаг переноса и если он
; установлен выводим ошибку Kernal
KERERR   BCS LKE1
         RTS
LKE1     PHA
         JSR OPENWND
         .BYTE 8,5,32,10,2,3
         LDA #<MKEH
         LDY #>MKEH
         JSR WTXT
         PLA
         ASL A
         TAX
         LDA PTRKE,X
         LDY PTRKE+1,X
         CPY #$FF
         BNE LKE2
         LDA #<NLE
         LDY #>NLE
LKE2     JSR WTXT
         JSR GKEY
         JSR CLOSEWND
         SEC
         RTS

GKEY     JSR $FFE4
         BEQ GKEY
         RTS


MKEH     .TEXT "    KERNEL  ERROR    "
         .BYTE 0

PTRKE    .WORD MERR0
         .WORD MERR1
         .WORD MERR2
         .WORD MERR3
         .WORD MERR4
         .WORD MERR5
         .WORD MERR6
         .WORD MERR7
         .WORD MERR8
         .WORD MERR9
         .WORD $FFFF

NLE      .TEXT "AUTOR ERROR ..."
         .BYTE 0
MERR0    .TEXT "STOP PRESSED."
         .BYTE 0
MERR1    .TEXT "OVERLOAD FILE TABLE."
         .BYTE 0
MERR2    .TEXT "FILE OPENED."
         .BYTE 0
MERR3    .TEXT "FILE NOT OPEN."
         .BYTE 0
MERR4    .TEXT "FILE NOT FOUND."
         .BYTE 0
MERR5    .TEXT "DEVICE NOT PRECENT."
         .BYTE 0
MERR6    .TEXT "FILE NOT INPUT."
         .BYTE 0
MERR7    .TEXT "FILE NOT OUTPUT."
         .BYTE 0
MERR8    .TEXT "NOT NAME FILE."
         .BYTE 0
MERR9    .TEXT "ILEGAL DEVICE NAME."
         .BYTE 0
;---------------------------------------