Начал писать движок игры. Тут такое дело возникло: выделяю в программе память, в конце программы освобождаю память, а в ОС по окончании программы нет выхода. Где я напутал?
Выделяю память так:
Освобождаю память так:;сохранение старых значений страниц в окнах 0,1,3
IN A,(0x82)
LD (OldWin0Page),A
IN A,(0xa2)
LD (OldWin1Page),A
IN A,(0xE2)
LD (OldWin3Page),A
;выделение памяти
;для окон 0 и 3
;получение блока памяти на две страницы
ld b, 2
ld c,61
rst 0x10
ld (memblock),a; сохраним номер блока
;получим номера физических страниц в блоке
;в акк уже есть ном. блока
ld b, 0
ld c,196
call 15635
ld (Win0Page),a
ld a,(memblock)
ld b, 1
ld c,196
call 15635
ld (Win3Page),a
;отключение прерываний
di
ld a,i
ld (OldIREG),a
ld (OldSP),sp
;Установка новых значений страниц в окнах 0,1,3
Ld a,(Win0Page)
out (0x82),a
LD A,0x54; в 1 странице видеопамять
OUT (0xa2),A
Ld a,(Win3Page)
out (0xe2),a
;УСТАНАВЛИВАЕ СТЕК
ld sp,61000
Вот исходный код во вложении( Пасмо ассемблер).IM2Test.asmdi
ld a,(OldIREG)
ld i,a
im 1
;Установка старых значений страниц в окнах 0,1,3
Ld a,(OldWin0Page)
out (0x82),a
LD A,(OldWin1Page)
OUT (0xa2),A
Ld a,(OldWin3Page)
out (0xe2),a
;УСТАНАВЛИВАЕМ СТАРЫЙ СТЕК
ld sp,(OldSP)
;ei Включал прерывания - не помогло. В ОС нет выхода
;освобождаем память
ld a,(memblock)
ld c,62
rst 0x10
Скомпилированная программа:
https://dropmefiles.com/1IaUY




Ответить с цитированием