Sei sulla pagina 1di 12

Cdigo de reloj

; reloj25.asm: Reloj Gigante, apacheco@ieee.org, Nov'99. main mov int push call call call pop mov mov mov call mov int mov mov int mov mov int mov mov int ret ah, 0fh 10h ax video loc_rom_chr paint ax modo, al pag, 0 cursor, 0607h video ax, 4c00h 21h ; get video mode ; ; ; ; ; ; ; ; al=current video mode video en pag #1 sin cursor apuntador a bitmap de digitos 0-9 dibuja reloj hasta pulsar tecla 'esc' restablece modo video restablece pag #0 restablece cursor .. en rutina video

; fin: regresa a DOS ; set video mode ; modo=80x25x16 p/reloj ; select page ; no. pag. ; set cursor type (Jump-274) ; ch=inicio, cl=final

video

ah, 00h al, [offset(modo)] 10h ah, 05h al, [offset(pag)] 10h ah, 01h cx, [offset(cursor)] 10h

loc_rom_chr bitmap mov mov mov int ret paint cld add mov @again call call call call jnz ret prtdig mov mov @30 mov mov bytes/chr) mul mov add dec

; out: cx=bytes/chr, dl=rows/chr, es:bp=inicioah, 11h al, 30h bh, 3 10h ; (Brey-721) ; bitmap 8x8 / chr

; auto-incremento(si) bp, 180h ; start='0'=es:bp+(48*8=180h) digitos, bp ; graba loc. inicio bitmap-digitos delay ; retardo < 1 seg gettime ; lee reloj del sistema prtdig ; imprime digitos del reloj getch @again count, 0 lim_x, pos_x si, [offset(count)] al, 8 ; Imprime reloj gigante (99:99:99) ; pos-x inicial ; digito a imprimir en BCD ; factor multiplicativo (8

byte [si+offset(hr)] ; ax=[hr+count]*8 si, [offset(digitos)] ; apunta a inicio de bitmap si, ax ; si=digitos+dig*8 si ; ajuste(-1): extra-renglon-0

mov call inc cmp jb ret @40 pr1dig sub mov mov add es: lodsb mov call mov and ror mov jnz mov push call inc call pop call dec inc mov cmp jb add cmp jb ret mov mov mov mov int ret mov mov mov mov int ret mov int cmp jnz mov int

ycoord, pos_y-2 pr1dig count count, no_digitos @30 lim_x, 8 al, [offset(lim_x)] xcoord, al lim_x, 8 pels, al gotoxy al, [offset(pels)] al, pos pos, 1 al, pixel @60 al, 32 ax putch ycoord gotoxy ax putch ycoord xcoord dl, lim_x xcoord, dl @50 ycoord, 2 ycoord, pos_y+16 @40 ah, 02h bh, [offset(pag)] dl, xcoord dh, ycoord 10h ah, bl, bh, cx, 10h 09h color [offset(pag)] 1

; ajuste(-2): extra-renglon-0 ; imprime un digito de reloj ; sig. digito ; mas digitos?

; ; ; ;

ajuste para obtener min-x imprime un digito a la vez xcoord = min-x max-x = min-x + 8

@50

; al=bitmap(es:si++) ; pels = 8 pixeles ; posiciona cursor ; recarga bitmap ; z=0 si bit(pos)=1 en al ; prepara siguiente bit ; si bit=1 imprime ascii(178) ; bit=1? ; si bit=o imprime espacio ; imprime pixel-gigante ; inicia: renglon-doble

@60

; termina: renglon-doble ; sig. columna ; ultima columna? ; sig. renglon ; ultimo renglon?

gotoxy

; input: coord(x=dl,y=dh) ; pag

putch

; al=ascii ; pag ; repeticiones

getch

ah, 0bh 21h al, ffh @nokey ah, 10h 16h

; keyb status: al=ff/00=key/no-key (Jump-53) ; tecla plusada? ; out: al=ASCII (Abel-188)

cmp @nokey ret delay @70 @80 mov push loop pop loop ret

al, escape cx, 1fffh cx @80 cx @70 ah, 2ch 21h al, ch

; terminar? ; OJO: Retardo sensitivo a velocidad del CPU!!

gettime mov int dl=1/100seg mov aam mov mov mov aam mov mov mov aam mov mov ret escape pixel pixel=1 color pos_x pos_y no_digitos '99:99:99' modo db cursor dw pag db digitos count pels pos dw dw db db equ equ equ equ equ equ

; out: hr, min, seg ; out: ch=hr, cl=min, dh=seg,

; get hr ; a BCD (ah=centenas, al=decenas) [offset(hr)+0], ah ; set hr [offset(hr)+1], al al, cl ; get min ; a BCD [offset(min)+0], ah ; set min [offset(min)+1], al al, dh ; get seg ; a BCD [offset(seg)+0], ah ; set seg [offset(seg)+1], al 27 178 00011110b 7 5 8 ; tecla 'esc' para finalizar programa ; 15,178,224 caracter ascii a imprimir si ; ; ; ; color: fondo=azul, letra=amarilla columna inicial renglon inicial numero de digitos gigantes del reloj

3 ffffh 1 ? ? ? 10000000b

; Texto: 80x25x16 ; cursor-off ; pagina #1 ; ; ; ; offset del apuntador a bitmap contador de digitos del reloj mapa de 8 bits (un renglon de mascara para sensar un bit en del 0-9 en ROM-BIOS impresos un caracter) una posicion dada

lim_x db ? xcoord db ? ycoord db ? hr sep1 min sep2 seg dw ? db 10 dw ? db 10 dw ?

; posicion x-inicial y x-final del cursor ; posicion-x actual del cursor ; posicion-y actual del cursor ; ; ; ; ; Horas (BCD) ':' = BCD a ASCII = 10+48 = 58 Minutos (BCD) ':' Segundos (BCD)

Bibliografa: http://www.depi.itch.edu.mx/apacheco/asm/reloj25.asm

Cajero

Cobrar

<<include>> Validar

Dar cambio <<include>> Registrar Cliente

Entregar ticket

Cliente

Pagar

<<include>> Validar <<include>>

Recibir cambio

Cobrar

Dar cambio

Registrar Cliente Cliente Entregar ticket

Cajero

Pagar

Cancelar

Administrador

Alta del producto

<<include>> Validar

Existencias

<<include>>

Actualizar producto

Cajero Pasar producto

<<include>> Validar Existencias <<include>> Baja de can del producto

ADMINISTRA R LA CAJA

CAJERO

ASEGURA LA CAJA

DUEO DE TIENDA

CUENTA EL DINERO

MOSTRAR INGRESOS O PRDIDAS

REVISA LOS PRODUCTOS

ADMINISTRADOR

AVISA AL PROVEEDOR CUANDO SE TERMINA EL PRODUCTO

PROVEEDOR

DEVUELVE LOS PRODUCTOS DEFECTUOSOS

SURTE LOS PRODUCTOS

CAMBIA LOS PRODUCTOS DEFECTUOSOS

Ventas
INGRESAR CODIGO DE BARRAS

SELECCIONAR FORMA DE PAGO

AGREGAR PRODUCTO

EFECTIVO

VALES

TARJETA

PRODUCTOS

CONCRETAR VENTA

PROVEEDORES

PROVEEDORES

AGREGAR

SELECCIONAR PROVEEDOR

ESCRIBIR NOMBRE, DIRECCION, TEL, RFC

MODIFICAR

ELIMINAR

MODIFICAR DATOS AGREGAR A LA BD

ELIMINAR ?

NO

SI
GUARDAR EN BD

ELIMINAR REGISTRO DE PROVEEDOR EN BD

PROVEEDORES

CLIENTES

CLIENTES

AGREGAR

SELECCIONAR CLIENTES

ESCRIBIR NOMBRE, DIRECCION, TEL, MAXIMO

CLIENTE MODIFICAR ELIMINAR

MODIFICAR DATOS AGREGAR A LA BD

ELIMINAR ?

NO

SI
GUARDAR EN BD

ELIMINAR REGISTRO DE CLIENTES EN BD

CLIENTES

CORTE DE CAJA

GENERAR CORTE DE CAJA

SELECCIONAR CAJERO

FECHA

GENERAR CORTE

Potrebbero piacerti anche