samstyle / Xpeccy

Multiplatform emulator of retro computers
MIT License
71 stars 13 forks source link

Или что-то случилось. Или одно из двух. #39

Closed qboneteam closed 5 years ago

qboneteam commented 5 years ago

image

qboneteam commented 5 years ago

короч, одна и та же дискета в пяти разных эмулях +3. процедура печати десятичного числа самописная, от ромов не зависит

samstyle commented 5 years ago

дай процедурину

qboneteam commented 5 years ago

при этом у меня вот так: image

qboneteam commented 5 years ago

https://yadi.sk/d/-jaA5mGM8BVzzQ

samstyle commented 5 years ago

ПРОЦЕДУРИНУ

qboneteam commented 5 years ago

Так она на диске - автостартует

samstyle commented 5 years ago

Что-то специфичное - без турбо у FDC печатается 30000, с турбо N000 Опять криворукие погроммисты из амстрада сделали всё, чтобы ускорить работу uPD765 было нельзя... минимум, чего удалось добиться - 14мкс/байт, при том что ВГ93 с тырдосом может 0.5мкс/байт

qboneteam commented 5 years ago

То есть тут ничего не сделаешь и можно закрывать?

samstyle commented 5 years ago

Турбо отключить. В следующей сборке uPD765 с турбо будет работать медленее, и по крайней мере в этом случае такого не будет

ammehet commented 5 years ago

ПРОЦЕДУРИНУ

Вот ПРОЦЕДУРИНА. Непосредственно вывод на экран через rst #10. Не очень понятно, как она может выдать на выходе что-то кроме цифр, и как это зависит от привода. Наверное, какая-то амстрадовская магия =)

; prints a number in decimal to a self-allocated zero-terminated buffer ready for print subroutine
; ENTRY CONDITIONS
;     BC = number
;     CY must be set to print leading zeroes (or spaces)
; EXIT CONDITIONS
;     Always:
;         HL = self-allocated zero-terminated buffer ready for print subroutine
;         BC' DE' HL' corrupt
;         All other registers preserved
dec_to_str:
    ex   af,af'
    ld   a,#FF
.dec_to_str:
    ld   (.number+1),bc
    exx
.number:
    ld   hl,#0000
    push ix
    ld   xh,a
    ld   de,.buf
    ld   bc,#D8F0       ; -10,000
    call .write_digit
    ld   bc,#FC18       ; -1,000
    call .write_digit
    ld   bc,#FF9C       ; -100
    call .write_digit
    ld   c,#F6          ; -10
    call .write_digit
    ld   a,l
    call .write_char
    pop  ix
    exx
    ld   hl,.buf
    ex   af,af'
    ret

.write_digit:
    xor  a              ; Clear the A register.
.l1 add  hl,bc          ; The 'trial subtraction'.
    inc  a              ; Count each 'trial'.
    jr   c,.l1          ; Jump back until exhausted.
    sbc  hl,bc          ; Restore last 'subtraction'
    dec  a              ; and discount it.
    jr   nz,.write_char ; If no 'subtractions' were possible jump back to see if a space is to be printed.
    ld   a,xh           ; Здесь в A нужен "0" или #Fx, а не что попало
    or   a
    ret  m
.write_char
    ld   xh,0
    add  a,"0"          ; Otherwise print the digit.
    ld   (de),a
    inc  de
    xor  a
    ld   (de),a
    ret

    db   "0"            ; Leading zero
.buf:
    dz   "000000"
samstyle commented 5 years ago

Да всё, уже определилось, что ПРОЦЕДУРИНА не виновата, это всё из-за скорости работы fdc. Дос наивно ждёт нормальной скорости

qboneteam commented 5 years ago

Да всё, уже определилось, что ПРОЦЕДУРИНА не виновата, это всё из-за скорости работы fdc. Дос наивно ждёт нормальной скорости

А ежели пропатчить дос чтобы не ждал?