Автор Тема: Функция для ввода текстовой строки  (Прочитано 612 раз)

Оффлайн BRE

  • Newbie
  • *
  • Сообщений: 16
  • Karma: +3/-0
    • Просмотр профиля
Функция для ввода текстовой строки
« : Апрель 02, 2013, 05:49:36 pm »
;---------------------------------------
;-  FUNC INPUT STRING                  -
;---------------------------------------
;-  A    - MAX LEN STRING              -
;-  X Y  - COORDINATES                 -
;---------------------------------------
         *= $5700

; INPUT = $5700
; INBUF = INPUT+$0169  !!!
; BASE  = INPUT+$013B  !!!

INPUT    STA LEN
         STX XPOS
         STY YPOS
         LDA #$00
         STA BASE
         LDA $FA
         STA $2A
         LDA $FB
         STA $2B

         TYA
         CLC
         ADC BASE
         TAY

         JSR $E50C
         JSR $EA24
         LDA $D2
         STA $FE
         
         LDA YPOS
         CLC
         ADC $D1
         BCC L1
         INC $FE
L1       STA $FD
         LDA $F4
         STA $FC
         LDA YPOS
         CLC
         ADC $F3
         BCC L2
         INC $FC
L2       STA $FB

LOOP     LDA $C6
         STA $CC
         STA $0292
         BEQ LOOP
         
         SEI
         LDA $CF
         BEQ L4
         LDA $CE
         LDX $0287
         LDY #$00
         STY $CF
         JSR $EA13
L4       JSR $E5B4
         CMP #$0D
         BNE L5
         JMP EXIT
L5       CMP #$14
         BEQ DEL
         CMP #$9D
         BEQ DEL
         CMP #$1D
         BEQ L0
         CMP #$94
         BEQ INS
         CMP #$91
         BNE L6
         JMP LA
L6       CMP #$11
         BNE L7
         JMP LB
L7       LDX $D018
         LDX #$15
         BEQ LC+1
         TAX
         AND #$F0
         CMP #$80
         BEQ LOOP
LC       CMP #$90
         BEQ LOOP
         TXA
         CMP #$20
         BCC LOOP
L0       CMP #$22
         BEQ LOOP
         LDX BASE
         CPX LEN
         BEQ LOOP
         INC BASE
L8       JSR $E716
         JMP LOOP

DEL      LDY BASE
         BEQ LOOP
         DEC BASE
         CMP #$9D
         BEQ L8
L10      LDA ($FB),Y
         TAX
         LDA ($FD),Y
         DEY
         STA ($FD),Y
         TXA
         STA ($FB),Y
         INY
         INY
         BEQ L9
         CPY LEN
         BCC L10
         BEQ L10
L9       LDA #$9D
         JMP L8

INS      LDY LEN
         DEC LEN
LD       DEY
         CPY #$FF
         BEQ EX
         CPY BASE
         BCC EX
         LDA ($FD),Y
         CMP #$20
         BEQ LD
         CPY LEN
         BEQ EX
L12      LDA ($FB),Y
         TAX
         LDA ($FD),Y
         INY
         STA ($FD),Y
         TXA
         STA ($FB),Y
         DEY
         DEY
         CPY #$FF
         BEQ L11
         CPY BASE
         BCS L12
L11      INY
         LDA #$20
         STA ($FD),Y
EX       INC LEN
         JMP LOOP

LA       TAX
         SEC
         LDA BASE
         SBC #$28
         BCC LE
         STA BASE
         TXA
         JMP L8
LE       JMP LOOP

LB       TAX
         CLC
         LDA BASE
         ADC #$28
         BCS L13
         CMP LEN
         BEQ L14
         BCC L14
L13      JMP LOOP
L14      STA BASE
         TXA
         JMP L8

BASE     .BYTE 0
LEN      .BYTE 0
XPOS     .BYTE 0
YPOS     .BYTE 0

EXIT
         LDY LEN
L22      DEY
         LDA ($FD),Y
         CMP #$40
         BCC LK
         ORA #$80
         BNE L21
LK       CMP #$20
         BCS L21
         ORA #$40
L21      STA INBUF,Y
         CPY #$00
L18      BNE L22
         LDX BASE
         INC BASE
         LDA $2A
         STA $FA
         LDA $2B
         STA $FB
         RTS
INBUF