Значок ресурса

Alarm Clock

Нет прав на скачивание
Автор: Ian D. Turtle
Год: 1984
Издатели: Your Spectrum
Языки: 🇬🇧 Английский
Формат: 📼 TAP лента
Требования: 🖥️ ZX Spectrum 48K

Ссылки:
Страница на ZXArt
Страница на World Of Spectrum
Страница на Spectrum Computing

Скриншоты:
AlarmClock.gif


Alarm Clock (Clock This) - Ian Turtle (Your Spectrum-Issue 2-Page 93)








Have you ever got so engrossed in your programming that the


hours just ticked by and you missed that important appointment?


Well, type in this program and one worry at least will


be over.


The Basic program which performs this amazing feat


includes two machine code routines as well as a self-


performing checksum, which should ensure that you type the


program in correctly . However,just to take all precautions,


it would be wise to SAVE the program once typed in, before


running it.


This done, now let's try it out. One of two things will


happen. At worst, it'll respond with an 'Error in data' message,


and list the DATA lines where the error occurs. You should


now check these lines, restore the program to good health,


SAVE the listing to tape and start over.


Should the program run correctly first time, you will be


greeted with an 'OK' message and prompted to input the time


(in hours and minutes) that you'd like the alarm to be set off.


That done, the computer NEWs itself. Don't panic at this


stage - the program has not crashed; it's merely waiting for


you to start the countdown.


To initiate the timer, simply type RANDOMIZE USR


65120, to which the response should be 'OK', indicating that


all is going according to plan. This instruction executes a


small machine code routine to set up the interrupt. When


your time is up, the program blanks the screen, turning it a


glorious shade of red. Again, nothing to panic about - just


press the Enter key and you'll find all the work you've been


doing is still in memory waiting to be SAVEd so it can be


continued at a later date.


Once the timer has been set, you are free to start your


programming - up until whenever the alarm is due to go off.


Basic programs will not affect the alarm, and most machine


code programs should also work (as long as they don't use


interrupts nor occupy addresses 65120 upwards).


Don't worry if at any time during your programming you


NEW the computer - you won't clear the Spectrum Alarm.


However, you will need to reset the interrupt by typing in


RANDOMIZE USR 65120 again. The timer will thus


begin where it left off. Also, PAUSEs, BEEPs, and all


LOADing and SAVEing operations, will cause the alarm to


stop. But once finished, the alarm automatically resets itself,


so you shouldn't lose too much time.


If you'd like a continuous on-screen printout of the time


remaining before the alarm goes off, type in this Basic one-


liner:





10 PRINT AT 0,0; PEEK 65532;":"; PEEK 65533;":"; PEEK 65534;" ": GO TO 10








Line 10 Lowers RAMTOP and restores data.


Lines 15-20 Print the on-screen message, and set the checksum and


data counters.


Lines 30-60 Read the machine code for the interrupt routine and POKE it


into memory. When all the interrupt machine code is


installed, check to see whether an error has occurred.


Lines 70-90 This area of the program carries out the same task as lines


30-60 for the alarm call machine code.


Lines 100-210 Set the alarm time, POKE it into memory and then NEWs


the computer.


Line 300 The machine code for the interrupt routine.


Lines 310-350 The machine code for the alarm call routine.








Here is a disassembled listing of the main service routine, which is


included in lines 310-350 of the Basic program.





The Alarm Call routine


Machine Code Assembler Comments


10 CLOCK RST 56 Performs the keyboard scan which


had been diverted.


20 DI Disable the interrupts, ie. ensure


this routine cannot be interrupted,


30 PUSH AF and save the only register used onto


the stack.


The addresses used are:


65532 - count of hours remaining.


65533 - count of minutes remaining


in the present hour.


65534 - count of seconds remaining


in the present minute.


65535 - count of 1/50 second remaining


in the present minute.


40 LD A,(65535) Check if the 1/50 of a second counter


50 CP 0 has gone down to zero.


60 JR Z,BMPSEC If so, jumps to line 100 onwards which


causes a decrement in seconds.


70 DEC A If not, simply decrements the 1/50 of


80 LD (65535),A a second counter and jumps to the


90 JR END returning part of the routine


(lines 430-450).


--------------------------------------------------------------------------------


100 BMPSEC LD A,49 Decrement the seconds counter and jump


110 LD (65535),A to the minutes decrementer (if required).


120 LD A,(65534)


130 CP 0


140 JR Z,BMPMIN


150 DEC A


160 LD (65534),A


170 JR END


--------------------------------------------------------------------------------


180 BMPMIN LD A,59 Decrement the minutes counter and jump


190 LD (65534),A to the hours decrementer (if required).


200 LD A,(65533)


210 CP 0


220 JR Z,BMPHOU


230 DEC A


240 LD (65533),A


250 JR END


--------------------------------------------------------------------------------


260 BMPHOU LD A,59 Decrement the hours counter. If this


270 LD (65533),A has already reached zero, it causes a


280 LD A,(65532) call to the alarm routine.


290 CP 0


300 JR Z,ALARM


310 DEC A


320 LD (65532),A


330 JR END


--------------------------------------------------------------------------------


340 ALARM LD A,2 Set the BORDER colour red.


350 CALL #229B


360 LD A,23 Set the attribute colours to PAPER 2:


370 LD (23693),A INK 7: FLASH 0: BRIGHT 0.


380 CALL #0D4D


390 CALL #0D6B A ROM call to effect a cleared screen.


400 LD A,62 Reset the interrupts to the previous


410 LD I,A mode.


420 IM 1


--------------------------------------------------------------------------------


430 END POP AF Restore the A register, re-enable the


440 EI interrupts and return.


450 RET








For those in the know, the data in line 300 of the Basic program generates a


short routine to set up the interrupts, its task being to make the computer


service the routine at address 65129. Here is the disassembled listing.





The Interrupt routine


10 LD A,9


20 LD I,A


30 IM 2


40 RET





------------------------------------------------------------------------------








letter from Your Spectrum #3 (May'84)





CLOCK THAT





Further to the Clock This program (issue 2), I have re-written the alarm


routine as, after much thought, I consider the whole screen turning red


to be unsatisfactory. Instead, the border still turns red and a two-toned


BEEP sounds for 20 seconds - a bit more like an alarm. (The new listing


is shown alongside.)





Ian Turtle, Loughborough





[This alternative version is included in ALARMCLK.TAP. JimG]
Автор
Verter_bot
Загрузки
0
Просмотры
1
Расширение
zip
Размер
1.2 КБ
Хэш
5864bbe5b8ebf39d835330c749da65db
Первый выпуск
Последнее обновление

Оценки

0.00 звезд(ы) 0 оценок
Назад
Вверх